top of page

Power Virtual Agents con Machine Learning

Introducción


Imagina que Power Virtual Agents es como un superhéroe de los chatbots. Es una plataforma de Microsoft que te permite crear chatbots de manera rápida y sencilla, sin necesidad de ser un experto en programación. Es como tener tu propio asistente virtual personalizado.

Por otro lado, el reconocimiento del lenguaje conversacional es como el superpoder de este superhéroe. Es una tecnología que permite a los chatbots entender e interactuar en lenguaje humano. Así que, básicamente, le da a tu chatbot la capacidad de entender y responder a lo que los usuarios están diciendo o escribiendo.

Piensa en la integración del reconocimiento del lenguaje conversacional en Power Virtual Agents como el entrenamiento especial que necesita nuestro superhéroe de los chatbots. Es como aprender un nuevo superpoder.

Al integrar el reconocimiento del lenguaje conversacional, tu chatbot no solo puede entender y responder a las consultas básicas, sino que también puede comprender el contexto, las emociones y las intenciones detrás de las palabras de los usuarios. Es como si tu chatbot pudiera leer la mente de los usuarios.

Esta integración hace que las interacciones con tu chatbot sean más naturales y fluidas, mejorando la experiencia del usuario. Además, permite a tu chatbot manejar consultas más complejas y proporcionar respuestas más precisas.

Siguiendo con la analogía del superhéroe, podríamos decir que Azure Cognitive Services es como la academia de superhéroes donde nuestro chatbot adquiere sus superpoderes. Azure Cognitive Services es una colección de servicios de inteligencia artificial que permite a los desarrolladores incorporar algoritmos inteligentes en sus aplicaciones para ver, escuchar, hablar, entender y hasta interpretar las necesidades de los usuarios.

En el caso de nuestro chatbot, uno de los superpoderes más impresionantes que puede adquirir en esta academia es el reconocimiento del lenguaje conversacional. Pero eso no es todo, también puede aprender a ser multilingüe. Imagina que nuestro chatbot es como un superhéroe con la increíble habilidad de hablar y entender varios idiomas. Esto significa que puede interactuar con usuarios de todo el mundo, independientemente del idioma que hablen.

Así que, al integrar el reconocimiento del lenguaje conversacional y el reconocimiento multilingüe en Power Virtual Agents a través de Azure Cognitive Services, estás equipando a tu chatbot con algunos superpoderes realmente impresionantes. No solo podrá entender y responder a las consultas de los usuarios, sino que también podrá hacerlo en varios idiomas.


¡Es como tener un equipo de superhéroes internacionales listo para ayudar a tus usuarios en cualquier momento!


Creación de un bot inicial

Para empezar vamos a partir de la base que tenemos un Bot ya creado totalmente funcional y que sigue el siguiente diagrama de uso:


Como veis el objetivo del bot es que podamos contarle qué queremos hacer y pasar por 2 niveles dependiendo de nuestra elección. Destacar que todas estas elecciones vendrán dadas por frases del usuario, en ningún caso por selección ya que sino el funcionamiento queda reducido a algo muy sencillo.

Así pues al final de cada nodo esperamos que el Bot nos proponga una manera de actuar; en nuestro caso simplemente nos muestra una frase para corroborar que hemos llegado al final del nodo correcto.

Para ello tendremos un tema para cada nodo y subnodo con la estructura siguiente:


Como veis hemos tenido que añadir frases desencadenantes para que el Bot reconozca ese tema. Este paso es el principal afectado por nuestra nueva funcionalidad. Hasta ahora nosotros introducíamos frases y Power Virtual Agents intentaba identificar los temas en base a ello pero sin la posibilidad de entrenarlo o refinarlo.


Y cada nodo principal una entidad con la que identificar los subnodos:


Dependiendo de la respuesta del usuario redirigiríamos al bot al tema final concreto:


Donde cada nodo final tendría la siguiente estructura:


Como veis el resultado final es una frase identificando cada nodo para que nosotros sepamos que ha pasado por el lugar correcto


Análisis de Limitaciones y Soluciones Potenciales en la Implementación del Bot


Limitación Multilingüe y Manejo de Sinónimos:

  • Desafío: El Bot actualmente se encuentra restringido a un solo idioma, lo que dificulta su comprensión de varios idiomas y sinónimos.

  • Solución Propuesta:

    • Implementación de Modelos Multilingües: Explorar soluciones NLP avanzadas que permitan la implementación de modelos multilingües, capacitando al Bot para comprender diversos idiomas.

    • Gestión de Sinónimos: Utilizar técnicas de NLP sofisticadas, como la creación de bases de datos de sinónimos multilingües o embeddings, para abordar sinónimos en diferentes idiomas.

Perfección del Modelo Predictivo:

  • Desafío: El modelo predictivo actual no es entrenable ni perfeccionable de manera eficiente, lo que afecta la precisión del Bot.

  • Solución Propuesta:

    • Entrenamiento Continuo: Implementar un sistema de entrenamiento continuo para el modelo predictivo del Bot, permitiendo mejoras progresivas basadas en datos y patrones de usuario.

    • Retroalimentación del Usuario: Establecer un mecanismo para que los usuarios proporcionen comentarios sobre las respuestas inexactas, aprovechando esta información para refinar y perfeccionar el modelo.


Problemas con Mayúsculas y Minúsculas:

  • Desafío: Las entidades reconocen mayúsculas y minúsculas, lo que puede generar resultados incorrectos.

  • Solución Propuesta:

    • Normalización del Texto: Normalizar todas las entradas de usuario a minúsculas antes del procesamiento, asegurando coherencia en el tratamiento de las entradas, independientemente del uso de mayúsculas o minúsculas por parte del usuario.


¡¡Y aquí es donde entra esta nueva funcionalidad en vista previa!!


Creación de un modelo propio de lenguaje natural


Requisitos previos:

  • Suscripción de Azure

  • Crear un recurso de Language Studio en la misma región donde reside nuestro bot de Power Virtual Agents: https://aka.ms/languageStudio


Una vez tenemos el recurso de Language Studio creado podemos proceder a crear un proyecto de reconocimiento de lenguaje conversacional:


Nombre del Proyecto:

  • Especifica un nombre significativo para el proyecto. Asegúrate de copiar este valor, ya que será importante para referencia futura.

Idioma Principal de las Frases (Utterances):

  • Selecciona el idioma principal del modelo. Si deseas crear un bot multilingüe, marca la opción correspondiente para omitir el idioma primario.

Habilitar Múltiples Idiomas en el Proyecto:

  • Marca esta opción para permitir que el modelo reconozca y procese varios idiomas en las frases de los usuarios.


Con estos pasos ya estamos preparados para empezar a trabajar en nuestro nuevo modelo para el bot.


Planificación de las acciones


Para empezar tenemos que tener claras 2 premisas:

  1. Para garantizar que PVA funcione correctamente, debemos crear intenciones para los temas del sistema de Power Virtual Agent y para cualquier tema personalizado

  2. Crear cualquier entidad personalizada que queramos usar en nuestro Power Virtual Agents.

Pero elegir la metodología no es sencillo. Así que vamos a contar un poco de teoría sobre como estructurar temas y entidades. Para ello le he pedido a GPT que nos lo explique con un ejemplo:


Imagina que estás construyendo un robot de chat que entiende y responde a las preguntas de los usuarios. Para hacer esto, necesitas definir dos cosas: las “intenciones”, que son las acciones o consultas que los usuarios pueden querer hacer, y las “entidades”, que son los detalles o información que el robot necesita para realizar esas acciones.
Por ejemplo, si estás creando un robot de chat para una tienda online, podrías tener una intención llamada “Comprar” y una entidad llamada “Producto”. Cuando un usuario dice “Quiero comprar un libro”, el robot reconoce “Comprar” como la intención y “libro” como la entidad.
Hay diferentes formas de definir las intenciones y las entidades. Una forma es pensar en las acciones como intenciones y la información como entidades. Otra forma es pensar en la información como intenciones y las acciones como entidades. Lo importante es ser coherente y no mezclar diferentes enfoques.

Con ello, por tanto, y para nuestro ejemplo tendremos que crear los siguientes temas:


Los temas que no están subrayados corresponden a temas genéricos del sistema que también tendremos que generar.

Por lo que corresponde a entidades, tenemos las siguientes:


¡¡Manos a la obra, pues!!


Si entramos en el proyecto de Language Studio que acabamos de crear veremos que en la sección Schema definition podemos crear Temas y Entidades. Es aquí cuando tenemos que empezar a crear lo mismo que teníamos en Power Virtual Agents hasta que tenga un aspecto similar al siguiente:


Es importante mantener el mismo nombre de temas y de entidades puesto que más adelante veréis que para que funcione tenemos que referenciarlo por su nombre.

Una vez creados los temas y las entidades ya podemos empezar a alimentar nuestro modelo a base de frases e idiomas.

  1. Nos dirigimos a la sección Data labeling

  2. Empezamos a introducir frases para cada Tema, en el idioma principal del proyecto, cuantas más mejor!!!

Y aquí es donde podemos darle una vuelta de tuerca al sistema y aprovechar Azure OpenAI o cualquier herramienta de IA para que nos ayude en esta tarea. Como veis hay un botón para subir un fichero de "frases" y otro botón para que Azure OpenAI nos sugiera frases para un tema en particular. Si lo presionamos veremos lo siguiente:


Con esta herramienta podemos ganar mucho tiempo a la hora de ir metiendo frases en los distintos idiomas ya que la IA nos facilitará el trabajo. Si aun así no podéis disponer de este recurso podéis usar ChatGPT del siguiente modo:


1. Le pasamos por PROMPT el ejemplo de fichero JSON que espera el sistema:

[

{

"language": "en-us",

"intent": "Quote",

"text": "I left my heart in Alexandria Egypt"

},

{

"language": "en-us",

"intent": "BookFlight",

"text": "Book me a flight to Alexandria Egypt"

}

]


2. ChatGPT reconocerá que se trata de un fichero de frases para un Tema

3. Le pedimos que genere ejemplos para varios idiomas para el Tema X que queramos.

4. Guardamos la salida en un fichero JSON y lo importamos en Language Studio


Un resultado sería el siguiente:



[
    {
        "language": "es-es",
        "intent": "AX2012",
        "text": "Necesito hacer un desarrollo para AX2012."
    },
    {
        "language": "es-es",
        "intent": "AX2012",
        "text": "Estoy trabajando en un proyecto de desarrollo para AX2012."
    },
    {
        "language": "es-es",
        "intent": "AX2012",
        "text": "¿Puedes ayudarme con un desarrollo para AX2012?"
    },
    {
        "language": "es-es",
        "intent": "AX2012",
        "text": "Estoy programando una aplicación para AX2012."
    },
    {
        "language": "en-us",
        "intent": "AX2012",
        "text": "I need to do a development for AX2012."
    },
    {
        "language": "en-us",
        "intent": "AX2012",
        "text": "I'm working on a development project for AX2012."
    },
    {
        "language": "en-us",
        "intent": "AX2012",
        "text": "Can you assist me with a development for AX2012?"
    },
    {
        "language": "en-us",
        "intent": "AX2012",
        "text": "I'm coding an application for AX2012."
    },
    {
        "language": "fr-fr",
        "intent": "AX2012",
        "text": "Je dois faire un développement pour AX2012."
    },
    {
        "language": "fr-fr",
        "intent": "AX2012",
        "text": "Je travaille sur un projet de développement pour AX2012."
    },
    {
        "language": "fr-fr",
        "intent": "AX2012",
        "text": "Pouvez-vous m'aider avec un développement pour AX2012 ?"
    },
    {
        "language": "fr-fr",
        "intent": "AX2012",
        "text": "Je code une application pour AX2012."
    },
    {
        "language": "de-de",
        "intent": "AX2012",
        "text": "Ich muss eine Entwicklung für AX2012 machen."
    },
    {
        "language": "de-de",
        "intent": "AX2012",
        "text": "Ich arbeite an einem Entwicklungsprojekt für AX2012."
    },
    {
        "language": "de-de",
        "intent": "AX2012",
        "text": "Können Sie mir bei einer Entwicklung für AX2012 helfen?"
    }
]

Para realizar este paso al completo se necesitan muchas frases, cuantas más mejor. Así conseguiremos que nuestro Bot reconozca claramente qué queremos hacer.


Y la pregunta...¿en todos los idiomas?

La respuesta es NO. Una de las ventajas de Language Studio es que es capaz de reconocer el idioma y traducirlo para encontrar las coincidencias. Tan solo tendremos que añadir frases en otros idiomas si vemos que en esos idiomas los aciertos son muy bajos y necesitamos refinarlos.


Ahora ya hemos actuado sobre los Temas. Vamos a empezar con las entidades.


Creamos las entidades con el mismo nombre que tenemos en Power Virtual Agents:



Y ahora tenemos varias maneras de configurar estas entidades:

  • Aprendizaje

  • Entidad precompilada

  • Expresión regular

  • Lista

Las 3 últimas existen ya en Power Virtual Agents, por tanto vamos a indagar en la que no existe allí y, para mí, la más interesante.


Vamos a configurar la entidad DEVELOP ENTITY que acabamos de crear siguiendo el método de aprendizaje:

  1. Abrimos la sección Data labeling donde tenemos todas nuestras frases.

  2. Veremos que a la derecha hay una sección con las entidades que hemos creado, y al lado de ellas el símbolo de un marcador.

  3. Seleccionamos el marcador y empezamos a jugar!!!

  4. En cada una de las frases en las que veamos identificada nuestra entidad, subrayamos la parte de la frase.


Y vamos haciendo lo mismo con todas las frases y todas las entidades. Repito lo mismo que anteriormente, cuantas más, mejor.

Esta misma acción se puede hacer en el JSON creado anteriormente y ya importarlo identificando las entidades.


Podéis consultar las best practices a la hora de modelar entidades en el siguiente enlace:



Crear un modelo consistente no es tarea fácil ya que requiere de mucho entrenamiento y tener un esquema robusto y pensado antes de ponerse con ello.


Entrenamiento del modelo


Una vez tenemos el proyecto completado tenemos que entrenarlo para que la herramienta de Machine Learning cree el modelo y podamos empezar a usarlo. Para ello nos dirigimos a la sección Training Jobs y ejecutamos el entrenamiento según los parámetros que queramos:


Una vez entrenado podemos dirigirnos a la sección Model performance donde podemos ver el análisis del modelo, porcentajes de predicción y demás información muy útil.



Para los más entendidos en este tema también podéis consultar la matriz de confusión usada y los resultados:


Y de nuevo pedimos a GPT que nos explique qué es la matriz de confusión:


La matriz de confusión es una herramienta que se utiliza en el campo de la inteligencia artificial para evaluar el rendimiento de un modelo de clasificación, es decir, un sistema que se ha entrenado para distinguir entre diferentes categorías o clases.
Imagina que tienes un sistema que ha sido entrenado para distinguir entre gatos y perros. Cuando le muestras una imagen, el sistema hará una predicción: ¿es un gato o un perro?
La matriz de confusión es una tabla que nos ayuda a entender cómo de bien lo está haciendo nuestro sistema. Se compone de cuatro partes:
Verdaderos positivos (VP): El sistema predijo “gato” y la imagen era realmente de un gato.
Falsos positivos (FP): El sistema predijo “gato”, pero la imagen era en realidad de un perro.
Verdaderos negativos (VN): El sistema predijo “perro” y la imagen era realmente de un perro.
Falsos negativos (FN): El sistema predijo “perro”, pero la imagen era en realidad de un gato.
Estos cuatro números nos dan una idea completa del rendimiento del sistema. Por ejemplo, si los falsos positivos son muy altos, significa que el sistema está clasificando incorrectamente muchas imágenes de perros como gatos.

Y una vez los resultados son suficientemente buenos podemos implementar el modelo para que esté disponible para su uso:

  1. Nos dirigimos a la sección Deploying a model

  2. Añadimos un nombre a la implementación (copiamos este nombre para más adelante)

  3. Aceptamos y esperamos a que termine la implementación



Con esto completado ya podemos volver a Power Virtual Agents!!!


Asignación de intenciones y entidades de CLU


Para poder asignar el modelo de CLU a Power Virtual Agents seguiremos estos pasos:

  1. Nos dirigimos a la pestaña idioma de nuestro Bot

  2. Creamos una conexión con Azure Cognitive Services y la seleccionamos

  3. Guardamos

  4. En ese momento nos dirá que podemos migrar el Bot a CLU, guardamos una instantánea del Bot por lo que pueda pasar y marcamos el check

  5. Nos pedirá el nombre del proyecto y el nombre de la implementación. Es en este momento donde hay que introducir los 2 componentes copiados anteriormente y que deben coincidir con los configurados en Language Studio



Una vez hecho esto ya tenemos a nuestro Bot apuntando a nuestro modelo CLU. Solo nos queda mapear cada tema y cada entidad con su correspondiente en CLU.

Para ello nos dirigiremos a cada tema, haremos click en el desencadenador e introduciremos el mismo nombre que tiene el tema en CLU:


Si lo que tenemos es un Bot muy complejo existe la herramienta de importación masiva en la pestaña idioma:

  1. Exportamos el proyecto desde Language Studio

  2. Importamos en la herramienta



¿Y el multiidioma?


Te habrás preguntado como soluciona todo esto el tema del multiidioma. Sí, hemos configurado temas y entidades, pero el Bot sigue entendiendo en un idioma y respondiendo en ese idioma.

Es aquí donde existe un tema adicional que el sistema ha creado cuando hemos pasado a CLU. El tema se llama "Analizar texto".


Por este tema pasa todo lo que va diciendo el usuario, lo envía a Language Studio y le devuelve la conclusión: tema y entidades reconocidas.

Si entramos veremos que hace una llamada a Language Studio:


En la que uno de los parámetros es el idioma. Por tanto modificaremos ese tema para introducir una caja más:

Esta caja llamará a un Power Automate que nos devolverá el idioma del mensaje del usuario.

A la vuelta y para cada mensaje que diga el Bot al usuario haremos el paso opuesto, traducir al idioma del usuario.


Power Virtual Agents con Machine Learning


Ya tenemos a nuestro Bot completado así que vamos a verlo funcionar.

Como veréis en el vídeo siguiente, aunque nuestro Bot está creado en inglés le estamos escribiendo en español y reconoce correctamente nuestro prompt.





Conclusiones


  • El reconocimiento del lenguaje conversacional (CLU) es un servicio de Azure AI que te permite crear modelos personalizados de comprensión del lenguaje natural para aplicaciones de conversación2.

  • Power Virtual Agents es una herramienta que te permite diseñar y publicar tu propio chatbot sin necesidad de saber programar.

  • Puedes integrar tu modelo de CLU con tu bot de Power Virtual Agents para aprovechar las intenciones y las entidades que has definido en tu proyecto de CLU.

  • Para integrar tu modelo de CLU con tu bot, debes tener en cuenta los siguientes aspectos:

    • Elegir un esquema coherente para definir las intenciones y las entidades, ya sea modelando las acciones como intenciones y la información como entidades, o viceversa.

    • Preparar tu entorno de Azure y tu recurso de idioma con la función de CLU habilitada.

    • Entrenar e implementar tu proyecto de CLU en la misma región que tu recurso de Power Virtual Agents.

    • Asignar las intenciones y entidades de CLU a los temas y preguntas de tu bot.

    • Actualizar las frases desencadenantes del bot para vincular cada tema a una intención de CLU correspondiente3.

    • Administrar manualmente la relación entre el modelo CLU y Power Virtual Agents4.

  • La integración de CLU con Power Virtual Agents te ofrece varias ventajas, como:

    • Mejorar la precisión y la cobertura de tu bot al usar un modelo personalizado de reconocimiento del lenguaje natural.

    • Ampliar fácilmente las funcionalidades existentes a nuevos destinos o acciones mediante la creación de nuevas entidades o intenciones.

    • Combinar varias aplicaciones secundarias de CLU u otros servicios de Azure AI en una aplicación orquestada.


bottom of page