inteligencia-artificial

Cuándo quieres construir una solución de tecnología conversacional basada en IA, es importante tener en cuenta que los diálogos generalmente siguen patrones, secuencias de etapas y que estas etapas son más o menos complejas.

Tabla de contenidos

Introducción

Un asistente conversacional es un programa informático que simula el comportamiento humano respondiendo preguntas hechas por una persona y generalmente se utiliza para brindar asistencia a esas personas. Estos asistentes son comúnmente conocidos como chatbots. Este término se refiere a asistentes que se dedican a conversaciones versátiles, simuladores de relaciones humanas. Sin embargo, el término chatbot es ampliamente utilizado y más asociado con este tipo de tecnología.

Algunos analistas estiman que hay entre 1,000 y 1,500 proveedores en todo el mundo que pueden hacer este tipo de sistemas y tengo una lista de más de 450 soluciones a fines de mayo de 2020. Cada una de estas soluciones tiene sus características, sus diferentes capacidades de procesamiento y cada uno dice tener la mejor plataforma del mundo. Entonces, ¿cómo podemos distinguir entre las soluciones? ¿Qué hace que una solución sea mejor que otra y que hace posible resolver los casos comerciales que se están considerando? El criterio que presento aquí me permitirá distinguir los diálogos de acuerdo con la forma en que se llevarán a cabo globalmente, de acuerdo con el nivel de interacción que el sistema tendrá con los usuarios. Es importante comprender las etapas que componen los diálogos.

Cuando hablamos de diálogos, estamos hablando de un número realmente infinito de variaciones posibles, por lo que necesitamos un marco general que guíe nuestro diseño. Al construir un diálogo, es necesario tener un marco de referencia compartido para que los expertos en soluciones y los expertos en negocios puedan entenderse entre sí. Deben poder ponerse de acuerdo sobre cómo modelar el diálogo a nivel mundial y al mismo tiempo verificar si se puede transcribir en el sistema de destino. Te proporciono este sistema de referencia aquí.

Antes de abordar su complejidad, primero es necesario definir qué es un diálogo. La palabra diálogo se refiere a un tipo de comunicación entre varias personas, la mayoría de las veces en forma verbal, la forma más sencilla de comunicarse. El diálogo se refiere a un modo de conversación que requiere razón, discernimiento, precisión y sabiduría, así como una interpretación de argumentos convergentes y convincentes para que la discusión conduzca a algo. Cabe señalar que el diálogo verbal es la forma de comunicación que consume la menor cantidad de energía.

El diálogo es un intercambio de puntos de vista, una confrontación que permite acceder a una verdad a través de él. El origen etimológico griego de la palabra diálogo se refiere a un concepto que se puede traducir como “seguir un pensamiento” (dialogos : de dia “a través” y logos la “palabra”).

Un diálogo debe tener un propósito, un mensaje que transmitir y un objetivo final. El propósito puede ser responder una pregunta, ayudar a tomar una decisión o llevar a cabo una acción en nuestro lugar o en el de otra persona. A menudo se lo conoce como un asistente orientado a la actividad para distinguirlo de los “chatbots” que se encuentran en un dominio diferente al que aborda este marco de referencia.

A diferencia del diálogo, que se construye, la conversación es un intercambio natural y espontáneo de ideas, más entretenimiento, no confrontación. La conversación es un poco como “dejarse hablar”. No hablamos cuando hablamos del clima, ¡hacemos conversación! La conversación debe distinguirse esencialmente por su aspecto naturalmente juguetón y frívolo. El propósito social de la conversación es reunir, conectar e intercambiar entre 2 personas. En la retórica de la conversación, hay frases preparadas como: “¿Estás seguro?”, “¡Eso no es posible!”.

La conversación tiene muchos sinónimos que ilustran este lado frívolo: charlar, cotillear, parlotear… Los franceses tienen muchas palabras para este tipo de converesaciones: bavardage, papotage, racontage, commérage, babil, potinage, ragot, causette, causerie, jacasserie, jamesserie, commérage, caquetage… Si paseas por las calles de París y ves las terrazas de los cafés, encontrarás muchas personas en plena conversación. En las pequeñas aldeas provinciales en los bancos de las plazas también, lo que muestra el apetito de los humanos por este tipo de ejercicio.

En el resto de este artículo y cuando hablo de diálogos, me refiero a los intercambios entre un humano (el solicitante) y un asistente virtual (el encuestado) en un intento por lograr un objetivo común.

Las etapas de los diálogos

Al igual que un guionista que escribe una obra de teatro o un diálogo cinematográfico, es necesario seguir un marco general que permita concebir el diálogo con el asistente.

Un diálogo normalmente pasa por 3 etapas: Apertura, intercambio y cierre.

El inicio de la conversación (conventional operning) permite al asistente presentarse y, en general, indicar cuáles son sus habilidades. A veces, el sistema puede proponer los temas o preguntas más frecuentes.

Las Etapas del diálogo o dialogue stages tratan de hacer que el objetivo del diálogo sea un éxito. Está compuesto por una serie más o menos larga de oraciones o información transmitida en lenguaje natural. Comienza con la pregunta o consulta del usuario y termina con la respuesta o ejecución vinculada con la consulta. Las preguntas pueden ser preguntas de tipo de soporte informático, preguntas sobre productos, consultas sobre reglas de operación, etc. Las consultas se refieren a acciones que el usuario desea que el sistema realice: encender una luz, reproducir una lista de reproducción, obtener una rotación de una base de datos, solicitar vacaciones, obtener el pronóstico del tiempo para el día siguiente, etc.

El cierre convencional o conventional closing permite al asistente concluir con un saludo cortés o incluso una invitación a nuevos intercambios.

El intercambio a veces se ve interrumpido por un cambio inesperado de tema. Estos cambios introducen pasos adicionales en el curso (normalmente planificado previamente) del diálogo. En un diálogo con un asistente, estos son algunos de los cambios más comunes:

  • La Social Interaction que consiste en que el usuario cuestione el sistema en un nivel más “personal”. “¿Cómo te llamas?”, “¿Eres una niña o un niño?”
  • La definición que consiste en pedir la definición de una palabra durante el diálogo. “¿Qué es el vidrio unidireccional?”
  • La digresión que consiste en cambiar de tema, ya sea temporal o permanentemente.
  • El proceso de desambiguación, que está más del lado del sistema y que consiste en pedir una aclaración de la información porque uno duda entre varias opciones. “¿Quieres dejar un permiso o posponerlo?”
  • El “Fuera de alcance” o “off of scope”, que corresponde a iniciar una discusión sobre un tema que no está dentro del área de competencia del sistema.

En el contexto específico de las interacciones vocales, debe tenerse en cuenta que estos cambios genéricos se complementan con una serie de eventos que son específicos del contexto sonoro, como la solicitud de pausa, la solicitud de repetir la oración, la falta de comprensión, etc. “¿Puede repetir la pregunta?”, “Espere, tengo otra llamada telefónica”.

Los sistemas de administración del asistente conversacional administrarán estos cambios de manera más o menos automática y con más o menos libertad para el diseñador. Siguiendo el sistema, podrá cambiar, más o menos, comportamientos y frases preconfigurados. El manejo adecuado de estos eventos es una garantía de un sistema que brinda una mejor experiencia de usuario.

Sistemas de diseño

El primer sistema para construir asistentes de conversación es ELIZA (Weizenbaum, 1966) [1]. Es un sistema relativamente simple que busca coincidencias en las oraciones y permite la sustitución de ubicaciones por valores recuperados de la oración. Para hacer esto, el diseñador debe construir la oración en respuesta indicando qué porción (index) de la pregunta debe reutilizar para completar la respuesta. Esta realidad nos demuestra que reproducir el comportamiento humano de comunicarse, usando un sistema informático, no es algo novedoso (¡54 años!).

1BcfvQPYCPmoFV8n7uIHhcw
Por Autor desconocido — http://www.le-grenier-informatique.fr/medias/images/eliza-title.jpg, Dominio Público

Este campo, que ha sido relativamente confidencial hasta ahora, se ha convertido en un tema del que todos hablan en los últimos años con la reciente explosión en el rendimiento de los algoritmos de IA (especialmente el reconocimiento de voz) y la explosión de las redes sociales. Es importante agregar el lanzamiento público “muy reciente” de un asistente de conversación llamado Siri (Apple, 2010–2011), el asistente personal de Apple que complementa la funcionalidad del iPhone. Otro evento también ha cambiado el juego: la creación de Watson por IBM. El nombre del primer CEO de IBM, Thomas J. Watson, fue diseñado originalmente para aparecer en el programa de televisión estadounidense “Jeopardy”, donde venció a dos de los ex campeones en 2011 en su propio dominio: comprensión de oraciones. Posteriormente, Watson se dividió en varios servicios que ahora están disponibles en el entorno Cloud de IBM.

Además de las etapas de apertura y cierre, que están relativamente enmarcadas, es necesario configurar la serie de intercambio para poder gestionar el diálogo como un todo. Los sistemas para crear asistentes tienen su propia lógica global y sus propias herramientas para modelar los intercambios. Dado que la herramienta condiciona la forma de configurar el intercambio, el error más común es querer usar la interfaz directamente para diseñar estos diálogos. Terminamos con el síndrome del desarrollador que hace su programa sin especificaciones y que diseñará su aplicación a medida que avanza. Pierde de vista el contexto, corre el riesgo de olvidar casos y, por lo tanto, corre el riesgo de entregar un sistema descoyuntivo y no coherente, lo que conducirá a una mala experiencia del usuario. Por lo tanto, es más que deseable trabajar en el modelado de interacciones desde arriba.

Tecnología basada en IA

Sería un error pensar que los sistemas actuales están completamente administrados por AI. La mayoría de los sistemas utilizan solo dos etapas utilizando técnicas de machine learning: reconocimiento de intención (lo que quiere el usuario) y extracción de entidades (los parámetros de la solicitud, por así decirlo). Para esto, se enseña a la máquina a reconocer (generalizar) grupos de oraciones similares dando ejemplos de oraciones con el mismo significado (intención). Del mismo modo, la máquina está entrenada para extraer palabras de la oración al etiquetar ejemplos de oraciones. Una vez que se ha logrado el reconocimiento de la fase y sus elementos importantes, los algoritmos “clásicos” entran en juego mediante la ejecución de una serie de condiciones, o mediante una máquina de estados que desencadena una o más acciones.

Actualmente, entrenamos los sistemas usando oraciones. La investigación actual ahora se centra en aprender de los diálogos (sistemas de extremo a extremo [2]) o en el uso de gráficos de conocimiento (QA basado en el conocimiento) con generación automática de respuestas [3]. Por el momento, estos sistemas permanecen inestables a largo plazo y aún no se pueden implementar en la producción debido a la falta de datos, sesgo de aprendizaje, dificultad para hacer coincidir la pregunta con el gráfico, etc. La generación automática de oraciones de respuesta usando representación semántica sigue siendo relativamente complicada de configurar e implementar. Esta disciplina del procesamiento automático del lenguaje natural está más presente en la generación automática de informes meteorológicos, artículos [4] o informes financieros.

Los 4 niveles de complejidad

Para ayudar a diseñar los intercambios entre el usuario y el sistema, propongo 4 niveles de complejidad de diálogo. Estos niveles van desde el diálogo más simple hasta el más complejo. Cada nivel corresponde a una tipología de intercambios fácil de identificar y correspondiente a una tipología de parametrización.

1myvuFreLGizKkyDS8OJTkQLa escala de complejidad del diálogo

Nivel 1: Diálogo simple

El nivel 1 corresponde a un nivel de diálogo de preguntas frecuentes (sistemas de preguntas y respuestas). El intercambio entre el usuario y el asistente conversacional comienza con una pregunta y termina inmediatamente con la respuesta a la pregunta. El intercambio tiene solo una interacción. El sistema analiza la pregunta, estima la intención más probable y proporciona la respuesta correspondiente a la intención. Estos sistemas reemplazan las páginas clásicas de preguntas frecuentes de los sitios web.

1diTw nG7nO6ECLLu nU5aw
Ejemplos de diálogos de nivel 1

Casi todas las soluciones cubren este nivel de complejidad. En este nivel, existen soluciones antiguas que no han evolucionado y algunas nuevas empresas que se están iniciando y optan por comenzar en este nivel, el más fácil. En estos sistemas, el diseñador simplemente tiene que asociar la respuesta con la intención. La mayor parte del trabajo es identificar el conjunto de preguntas en el dominio y escribir la respuesta asociada. Para una buena experiencia de usuario, se recomienda limitar el tamaño de la respuesta al tamaño de la ventana donde se realizan los intercambios.

Como el trabajo de búsqueda de respuestas lleva mucho tiempo, estos sistemas pronto serán reemplazados por sistemas automáticos de autoaprendizaje capaces de extraer automáticamente las respuestas en textos de ejemplos (Sistemas de preguntas y respuestas de dominio abierto, DeepPavlov 2018 y recientemente DrQA Facebook 2020 ) o capaz de generar la respuesta con la representación gráfica del conocimiento generado a partir de una documentación. Los gráficos se han generado automáticamente a partir de la extracción de entidades y relaciones.

Este nivel 1 es rápidamente decepcionante para el usuario que no tiene la posibilidad de interactuar con el sistema o ejecutar acciones complejas. Notamos un abandono de soluciones que solo pueden manejar este nivel. Un nivel intermedio (complejidad 1.5) mejora la experiencia del usuario al permitirle hacer una pregunta de followup

Ejemplo de diálogo de nivel 1.5

La intención inicial y las posibles entidades se mantienen en el contexto del diálogo, lo que permite al usuario hacer una pregunta de seguimiento relacionada con el contexto de la primera pregunta.

Nivel 2: dialogo slot-based

El Nivel 2 sigue al Nivel 1 al agregar capacidades de intercambio de recuperación de datos a los diálogos de preguntas y respuestas. Después de una solicitud del usuario, el sistema encadenará una serie de preguntas para poder, por ejemplo, ejecutar una acción, recuperar el estado de un comando, crear un valor en una base de datos, enviar un mensaje, etc. Estos intercambios son llamados sistemas de diálogo basados en espacios, ya que el principio es llenar espacios libres con valores de los intercambios con el usuario.

El objetivo final es recuperar todos los parámetros obligatorios que permitirán llamar al servicio, un servicio web con mayor frecuencia, que permite la ejecución de la acción solicitada. El sistema trabajará para recuperarlos haciendo una pregunta definida por el diseñador para cada uno de los parámetros. En algunos sistemas, es posible configurar varias preguntas diferentes para recuperar el mismo valor. Mientras haya valores vacíos, el sistema continuará haciendo las preguntas para todos los elementos faltantes obligatorios. Los datos a recuperar suelen ser valores mecanografiados, entidades, un valor de una lista, una descripción… A veces, el sistema permite la recuperación de documentos: ID, currículum, documento firmado, etc.

11hiS7syUqrjIKgTIQCocag
Ejemplo de diálogos de nivel 2

Las soluciones DialogFlow de Google, SAP Conversational AI, Botpress, FlowXO, RASA y varias otras son particularmente adecuadas para este tipo de operaciones.

Ejemplo de una interfaz de configuración de nivel 2 en Google DialogFlow

La herramienta facilita la configuración del diálogo al permitir definir la lista de valores a recuperar y asociar una pregunta a cada uno de estos valores. A partir de esta configuración, el sistema gestionará las secuencias de intercambio de forma completa y automática. En soluciones basadas en IA, la detección de un valor en una de las oraciones del intercambio llena automáticamente el valor y, por lo tanto, evita hacer la pregunta. La extracción de entidades nombradas mediante el aprendizaje facilita el trabajo de recuperación y hace posible responder ciertas preguntas sin que el usuario tenga que volver a ingresar la información solicitada. Por ejemplo, la frase “Dime el pronóstico para Brooklyn para el próximo fin de semana” permitirá que la predicción del clima se obtenga directamente sin que el sistema tenga que hacerle preguntas adicionales al usuario, ya que tiene toda la información requerida en la solicitud inicial.

1G5W3LzJUSSoPApiuUuI4bQ
Ejemplo de procesamiento de la consulta de un usuario

Nivel 3: Diálogo basado en árbol de decisión

El nivel 3 completa los niveles anteriores de una capacidad para adaptar los intercambios según las respuestas o el contexto o según los elementos recuperados desde fuera del sistema (software de gestión de relaciones con el cliente, base de datos, etc.). El conjunto forma un árbol de decisión con nodos que corresponden a acciones y ramas que corresponden al contexto de la conversación. Las soluciones basadas en árboles de decisión son las más representativas del estado del arte hasta la fecha.

El objetivo del intercambio es dar la respuesta más adecuada y contextualizada posible. Esta respuesta puede ser la resolución de un problema o la ejecución de una acción precisa y parametrizada al final del intercambio. La ventaja del nivel 3, en comparación con el nivel lineal 2, es que es posible seguir una serie de pasos que combinan preguntas, respuestas, condiciones, recuperación de valores, ejecución de acciones intermedias, etc. El nivel 3 es un nivel muy lineal. Un nivel completo 3 permite la inclusión de los niveles de complejidad 1 y 2 durante la discusión. A diferencia del nivel 2, donde el estado de la conversación está vinculado al llenado de pares de valores, el nivel 3 convierte el estado de la conversación a través de la rama seguida de las decisiones tomadas en cada intercambio.

El diálogo se modela como un árbol que consiste en una raíz, nodos y ramas que conectan los nodos entre sí. La raíz corresponde al inicio del intercambio. Los nodos son condiciones o acciones. Las hojas terminan los intercambios. Los nodos son los elementos más importantes del árbol. Pueden corresponder a condiciones en los datos de contexto, preguntas que se le harán al usuario o respuestas dadas por el usuario o consejos a dar, llamadas a servicios externos, pruebas de entidades, etc. Los nodos son los elementos más importantes del árbol. Las herramientas en el mercado permiten más o menos variabilidad en estos tratamientos.

1gzNu3cScAnectRuaKma8NA
Ejemplo de diálogo de nivel 3

Se utilizan varias técnicas para realizar diálogos de nivel 3: a través de un lenguaje de programación estándar, un motor de estado, un motor de reglas y context manager. Varias soluciones en el mercado tienen un editor gráfico que permite modelar el árbol de conversación. El editor de árbol (s) de diálogo gráfico es sin duda la forma más fácil de visualizar las diferentes variaciones de preguntas y acciones, y la solución más accesible para aquellos que no saben programar. Las capacidades de diálogo más o menos avanzadas dependen de las capacidades de parametrización de la herramienta. El uso de un lenguaje de programación es realmente la solución más eficiente, pero también la más lenta en reactividad, ya que la persona que programa generalmente no es la que tiene el conocimiento comercial (el experto en la materia).

Dado que los asistentes de conversación están por encima de todos los sistemas que deben hablar el idioma de los usuarios, la velocidad de modificación es, por lo tanto, un criterio de agilidad importante. La rápida mejora de los diálogos permite que el sistema se adapte a nuevas interacciones, malentendidos y cambios en la respuesta. También hay soluciones que permiten modelar gráficos de diálogo. A diferencia del árbol, estos sistemas permiten realizar bucles, llamar módulos y, por lo tanto, permiten reutilizar secuencias de diálogos ya construidos.

Nivel 4: Diálogo Domain-Based

El nivel 4 abarca todos los niveles al traer la noción de diálogos multidominio. En un intercambio, este último nivel aparece cuando el usuario solicita información que requiere varias habilidades y, por lo tanto, cuando el sistema debe poder administrar varios dominios comerciales diferentes. En el enfoque de un asistente conversacional que vendría a acompañar a los empleados de una empresa, esta última inevitablemente tendrá que gestionar más y más preguntas en dominios cada vez más múltiples: soporte de TI, recursos humanos, proyectos internos, sociales, etc. En este contexto, este sistema debe poder determinar el dominio comercial afectado por una solicitud, desambiguarlo si se trata de varios dominios y administrar digresiones entre dominios.

Otra característica de este nivel es que algunos diálogos pueden ser diferentes dependiendo de ciertas características del usuario. Por ejemplo, un gerente de recursos humanos podrá acceder a respuestas específicas de su dominio, mientras que un usuario externo a la empresa no podrá acceder a las reglas internas de la empresa. Si hace la misma pregunta que el gerente, obtendrá una respuesta diferente, o incluso una respuesta que indique que no tiene derecho a saber la respuesta a esta pregunta. Este nivel responde a una necesidad natural de poder hacer preguntas relacionadas con varias áreas de negocios en la misma interfaz de acceso en lugar de tener que ir a otro sitio web o página para acceder a otro asistente virtual. o incluso una declaración que indique que no tiene derecho a saber la respuesta a esta pregunta.

Ejemplo de diálogo de nivel 4 (área de negocios de Aduanas y Fronteras y Seguridad Social)
1ZVXU2sSYiqvWsohQIgmAeQ
Ejemplo de diálogo de nivel 4 (con desambiguación de dominio)

Por razones de rendimiento y mantenimiento, los asistentes conversacionales generalmente se crean para manejar bien solo un área comercial. El rendimiento está relacionado con el sistema de clasificación de las solicitudes de los usuarios, que requiere muchas oraciones de muestra en relación con la cantidad de preguntas típicas que se deben manejar. Cuantas más clases de intención hay, más datos representativos son necesarios para permitir un buen reconocimiento de la pregunta del usuario. Esta clasificación generalmente se lleva a cabo utilizando una red neuronal supervisada basada en una vectorización de un conjunto de oraciones de entrenamiento. Cuantas más funciones tenga la red, más datos de entrada necesitará. Esta clasificación, es un buen consejo (regla general) para tener al menos 10 veces el número de oraciones por número de características. Para 5,000 tipos de preguntas, esto significa capacitar a la red con al menos 50,000 oraciones de ejemplo para que la precisión del reconocimiento sea relevante.

IBM, por ejemplo, ha limitado el número de intents a 2,000 para 25,000 utterances para una skill en Watson Assistant [5]. DialogFlow limita a 100.000 uterrances para el mismo número máximo de intents. De hecho, esto limita el número de preguntas que puede manejar un solo asistente. Además, desde el punto de vista comercial, también se hace difícil separar las oraciones en sus respectivas intenciones cuando el número de preguntas a manejar se vuelve muy grande. Al final, es importante no olvidar la noción de mantenimiento y la capacidad de actualizar toda la información. Cuantos más datos relacionados haya en un dominio (intentos y entidades), más complicado será determinar los impactos de una modificación. Además, los equipos de negocios generalmente están especializados en su campo y no pueden crear los diálogos para otros dominios de negocios, lo que implica diferentes puntos de vista o incluso diferentes instancias.

Este es sin duda el nivel de soluciones más reciente y menos cubierto hasta la fecha. DialogFlow llama al componente para gestionar este nivel un Mega Agent [6] y Kore.ai los Asistentes Virtuales Universales [7].

Conclusión

Espero que a través de este artículo veas la organización de los diálogos de los asistentes conversacionales bajo un punto de vista diferente. La historia de esta tecnología es antigua y muy reciente y se encuentra cada vez más en nuestra vida cotidiana: en la oficina, en nuestro automóvil, en nuestro salón y en nuestro teléfono móvil. Los niveles de complejidad que he detallado están ahí para ayudarnos a determinar cómo diseñar diálogos y cómo modelarlos. Desde el nivel 1 más simple hasta el nivel 4, que representa el nivel más complejo de la escala actual. Paralelamente a estos niveles, está la constitución de un contexto de conversación cuya vida útil nos permite contextualizar las interacciones y llegar hasta establecer un asistente personal que nos pueda acompañar a lo largo de nuestra vida privada y profesional.

Referencias

[1]. ELIZA. From Wikipedia, the free encyclopedia. https://es.wikipedia.org/wiki/ELIZA

[2]. Antoine Bordes, Y-Lan Boureau, and Jason Weston. 2017. Learning end-to-end goal-oriented dialog. In Proceedings of the International Conference on Learning Representations (ICLR)

[3]. Alibaba Clouder. Progress in Dialog Management Model Research. April 20, 2020. https://www.alibabacloud.com/blog/progress-in-dialog-management-model-research_596140

[4]. New-York Times. The Rise of Robot Reporter. https://www.nytimes.com/2019/02/05/business/media/artificial-intelligence-journalism-robots.html

[5]. IBM Cloud documentation. Watson Assistanthttps://cloud.ibm.com/docs/assistant-data

[6]. Google DialogFlow documentation. Mega Agents betahttps://cloud.google.com/dialogflow/docs/agents-mega

[7]. Kore.ai. Universal Virtual Assistants: Orchestrate Tasks From Multiple Specialized Virtual Assistantshttps://kore.ai/platform/features/universal-bots/

Patrick Meyer

Por Patrick Meyer

Desde una formación inicial en sistemas integrados industriales, evolucioné hacia el mundo de Internet a principios de la década de 2000 al participar en los primeros proyectos relacionados con los servidores de aplicaciones Java. Rápidamente me convertí en un experto en servidores de aplicaciones BEA Weblogic; Participé en la difusión de la oferta web como Representante Técnico de Ventas y contribuí a la redacción de numerosos Documentos de Arquitectura Técnica.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *