Para que un asistente conversacional responda automáticamente a la solicitud de un usuario, es necesario capacitarlo para que reconozca correctamente las preguntas y, por lo tanto, active los escenarios correctos. Para esto, las soluciones industriales (es decir, las soluciones de chatbot) utilizan principalmente el aprendizaje automático para realizar esta detección creando un modelo (el resultado del proceso de aprendizaje) para clasificar las solicitudes por intención. La literatura sobre el aprendizaje nos recomienda verificar el rendimiento del modelo a través de precisión e indicadores de recall. Por experiencia, he descubierto que estos indicadores son realmente irrelevantes en una conversación y conducen a interpretaciones erróneas, exceso de confianza y, en última instancia, son engañosos para el analista. Recomiendo el uso del Critical Success Indez (CSI), pero como todavía no es suficiente, para completar este indicador mediante un análisis del coeficiente de variación imparcial de nuestros viejos amigos y el nuevo.
Tabla de contenidos
Introducción
En la IA conversacional, los sistemas deben “comprender” la solicitud del usuario antes de que puedan realizar la acción solicitada (por ejemplo, “encender la luz”, “pedirme una pizza”, “cómo puedo apagar el televisor”, etc.). Para hacer esto, estos sistemas utilizan una de las técnicas de aprendizaje automático, que consiste en crear automáticamente modelos de clasificación a partir de agrupaciones de oraciones que tienen el mismo significado, que implícitamente significan lo mismo. Para esto, el dialogador o diseñador conversacional (es decir, el que escribe los diálogos de un asistente de conversación) debe supervisar la capacitación de un detector (el clasificador) proporcionándole un conjunto de oraciones de ejemplo y agrupándolas por intención (por tipo de solicitud).
Después de aprender, el sistema debe ser probado para garantizar que sea lo suficientemente “inteligente” como para comprender todas las solicitudes. Especialmente porque estos sistemas se utilizan por su capacidad de detectar la demanda, incluso si varía de lo esperado. Para obtener una descripción del procesamiento de las solicitudes de los usuarios, puedes chequear mi artículo anterior sobre AI conversacional para diseñadores conversacionales: la escala de 4 niveles de complejidad.
Para evaluar al asistente, el diseñador debe hacer preguntas que no están en la capacitación y verificar que el sistema detecte la intención a pesar de las variaciones que introducirá para verificar que el sistema pueda obtener oraciones diferentes. Un defecto de entrenamiento, por ejemplo como resultado de un entrenamiento insuficiente, puede tener efectos negativos para el usuario, ya que el sistema activará una acción que no corresponde a su solicitud inicial.
La teoría
En la clasificación automática, la precisión (también llamada valor predictivo positivo) es la proporción de información relevante entre todos los elementos propuestos. Recordar (sensibilidad) es la proporción de elementos relevantes propuestos entre todos los elementos relevantes [1].
Cuando un asistente conversacional responde correctamente 20 veces (también llamado Verdadero Positivo o TP), ejecuta una acción cuando no es la solicitud 10 veces (llamado Falso Positivo o FP), no ejecuta la acción esperada 40 veces (llamado Falso Negativo o FN), su precisión es entonces 20 / (20 + 10) = 0.667 (66.7%) y su recuperación es igual a 20 / (20 + 40) = 0.334 (33.4%). Un sistema capaz de detectar sin errores tiene una precisión igual a 1 (100%) y una recall también igual a 1 (100%).
Después de una fase de entrenamiento, el clasificador se prueba con las diferentes frases de prueba de una intención (y luego la siguiente). El resultado de cada prueba se ordena según la intención reconocida.
En sistemas de clases múltiples (en nuestro caso, sistemas de intención múltiple y, por lo tanto, escalable a cualquier asistente conversación), la Precisión general del sistema es el promedio de las Precisiones de todos los intentos y la Recuperación es el promedio de los Recalls de todos los intentos. Estos valores se denominan macro-promedio de Precisión y macro-promedio de Recall.
La precisión y la recall se calculan para cada uno de las intenciones y se promedian los resultados generales. El verdadero resultado positivo corresponde a la detección correcta de la intención. El falso negativo corresponde al caso en que nuestra oración de prueba de intención dio otra intención como resultado (una de las otras intenciones). Falso positivo corresponde a las oraciones de otras intenciones que dieron como resultado esa intención. Y el verdadero negativo corresponde a todas las otras pruebas que no dieron nuestra intención como resultado.
Hay otro indicador que es el micro-promedio de las Precisiones y que corresponde a la suma de los TP de las diferentes clases dividida por la suma de los TP y los FP. Este cálculo consiste en sumar todos los valores en el denominador que conduce al cálculo de la tasa de éxito al final.
Para probar el sistema, el diseñador conversacional prepara un conjunto de frases de prueba (llamado conjunto de datos de validación) que consta de frases que no son parte del entrenamiento (llamado conjunto de datos de entrenamiento). Cada oración está vinculada a uno de los intentos.
También es posible utilizar técnicas de prueba automáticas separando los datos disponibles en datos de entrenamiento y datos de prueba de acuerdo con una regla dependiendo del tipo de validación cruzada elegida. En la separación no cruzada, se elige una relación para separar los datos en dos conjuntos. A menudo se usan las relaciones 50/50, 66/33 u 80/20. Sin embargo, la separación de los datos disponibles en dos subconjuntos disjuntos puede generar sesgos de detección si el número de datos es pequeño. Estos sesgos pueden ser un ajuste deficiente o un error de margen demasiado grande.
Una solución a este problema es utilizar la técnica de validación cruzada de separar conjuntos por pliegues llamados k-pliegues. El k-fold propone realizar una separación de los datos en k fold. Un pliegue se mantiene para la prueba y los pliegues restantes (k-1) se utilizan para el entrenamiento [2]. En los sistemas donde el diseñador o experto conversacional puede intervenir directamente en el modelo, este modo de prueba permite ajustar los hiperparámetros del modelo y detener el entrenamiento en el momento adecuado (es decir, antes de un ajuste excesivo).
En sistemas con intentos desequilibrados (es decir, que tienen diferentes números de oraciones por intento, que también suele ser el caso en los asistentes conversacionales), es importante mantener las proporciones de bloque en la intención. Esta técnica se llama validación cruzada estratificada o stratified cross validation
En las soluciones de inteligencia artificial conversacionales “estándar” (es decir, casi todas las soluciones comerciales de Chatbot), no es posible seleccionar estos hiperparámetros y el sistema se establece “por sí solo”. Este lado de la caja negra hace que sea difícil saber si el sistema está preestablecido de fábrica o si se adapta automáticamente mediante la validación cruzada interna y las funciones de apagado anticipado.
La práctica
Tomemos como ejemplo un sistema de 4 intenciones con la constitución de un conjunto de pruebas que ha sido creado especialmente para la validación. Supongamos que se entrena después de una primera iteración comercial, es decir, los expertos en la materia han dado el conjunto de oraciones que corresponden, según ellos, a las solicitudes de usuario más comunes para los dominios que necesitan ser automatizados. Supongamos que una primera fase de prueba arrojó los siguientes resultados:
El clasificador se prueba usando las oraciones de prueba (20 oraciones por intención) y los resultados de las detecciones se anotan en una tabla llamada matriz de confusión, dividida en filas para las intenciones que se probarán y columnas para las intenciones que se detectan. Los números en las intersecciones corresponden a los números de ocurrencias de detección para la intención probada.
En el ejemplo TEST_1, las 20 frases de prueba de la primera intención se clasificaron correctamente 16 veces y se encontraron 4 errores. De las 80 frases de prueba, 59 frases fueron detectadas globalmente correctamente y 21 resultaron en errores de clasificación. La precisión promedio de este clasificador es del 74% y la recuperación también es del 74%. La tasa de éxito (oraciones correctamente identificadas / número total de oraciones) da un resultado del 74% (59/80) que es relativamente correcto para una primera iteración.
Después de una segunda iteración para completar la capacitación general, el sistema se prueba nuevamente con las oraciones de prueba iniciales. Esta nueva prueba da los siguientes resultados:
La nueva tasa de éxito es idéntica a la formación anterior, es decir, 59/80 = 74%. La precisión en la prueba de Intención 3 es del 100% y la recall es del 5%. El conjunto de promedios significa que la precisión general de este entrenamiento es del 80% y la recuperación es del 74%, es decir, un aumento del 6% en la precisión y la recuperación idéntica, mientras que el resultado se ha deteriorado bruscamente en la prueba de intención 3, que prácticamente ya no se reconoce. El análisis de la precisión general, por lo tanto, da un resultado positivo, mientras que existe una fuerte degradación de la experiencia del usuario, ya que el sistema prácticamente ya no podrá responder a una categoría de preguntas. Solo el análisis fino de cada intención permite verificar la evolución del sistema después de la nueva capacitación.
Supon que el analista realiza un trabajo adicional en la intención 3 para corregir el problema identificado, aumenta el aprendizaje sobre esta intención y realiza un nuevo conjunto de pruebas.
La nueva tasa de éxito es del 74%, que es la misma que en las otras 2 pruebas. La precisión es del 87%, un aumento del 7% en comparación con la prueba anterior y la recall es del 74%, un valor que no cambia en todas las pruebas. Para el analista, el sistema muestra una progresión global de la precisión que sugiere una mejora del sistema. Al analizar los resultados con más detalle, podemos ver que la intención 3 ahora se detecta en exceso con casi una precisión para esta intención de 20/41 = 49%, que es inferior a la prueba anterior. Desde el punto de vista del usuario, y esto es lo más importante al final, el sistema da la impresión de activar sistemáticamente la misma acción (50% de las solicitudes con 25% que, sin embargo, están justificadas).
El análisis de los cambios generales en Precisión, por lo tanto, no habría identificado ninguna clasificación errónea. El análisis de la retirada tampoco habría sido concluyente en estos casos, ya que no varió en las 3 pruebas. Desde el punto de vista del evaluador, la distinción entre una no detección o una detección falsa es importante para el análisis de los resultados y para determinar las acciones que se llevarán a cabo en los entrenamientos (crear nuevas intenciones, agruparlas, agregar oraciones a intenciones…).
Sin embargo, desde la perspectiva del usuario final, lo importante es que el sistema responde correctamente la mayor parte del tiempo y el análisis general de estos valores habría omitido errores que habrían penalizado la experiencia del usuario. Por supuesto, el rendimiento del clasificador debe ser globalmente equilibrado. Sin embargo, se puede prever una detección menos buena en solicitudes menos frecuentes. Entonces es necesario correlacionar los resultados con la frecuencia de las solicitudes, pero este es otro tema.
Un enfoque en sistemas desequilibrados
Al probar el rendimiento de un clasificador, es importante tener en cuenta el equilibrio de los conjuntos de prueba y, si es posible, tener el mismo número de valores de prueba en cada intención.
Para resaltar esto, vamos a ver otro ejemplo. Estamos realizando una prueba de detección, pero no tenemos un sistema equilibrado ya que el número de oraciones de prueba varía según la intención: la intención 1 tiene solo 10 oraciones de prueba, la intención 2 tiene 20, la intención 3 es la más completa con 45 oraciones e intención 4 tiene solo 5 oraciones.
La prueba da los siguientes resultados:
Tenemos los siguientes indicadores: precisión = 86%, recuperación = 84% y tasa de éxito = 86%. Para equilibrar los resultados, es necesario introducir la noción de indicador ponderado. Los valores de los respectivos indicadores de las diferentes clases deben multiplicarse por la razón de las oraciones utilizadas para la prueba. La relación de intención 1 es 10/80 = 0.125. Los indicadores ponderados son entonces Precisión ponderada = 87% y Recall ponderada = 86%.
Modificamos la capacitación para tratar de mejorar nuestro sistema.
Los indicadores tienen los siguientes valores: precisión = 80%, recuperación = 89% para una tasa de éxito del 90%. La precisión ponderada es del 93% y la recall ponderada es del 90%. En el cálculo sin ponderación, habríamos visto una disminución del 6% en la precisión, mientras que el sistema ha mejorado en general, lo que se muestra por el valor ponderado, ya que vemos una mejora del 7% en la precisión. Esta diferencia muy importante proviene del hecho de que el peso de la instancia 4 es idéntico a las otras clases, mientras que el número de pruebas es bajo para esta instancia. El bajo número de pruebas para la instancia 4 significa que el impacto de un mal resultado da mucho peso a los resultados de la prueba para esta instancia, que se destaca aquí.
¿Qué indicador (s) elegir entonces?
Hemos visto que los indicadores de precisión y recuperación no destacan los errores de clasificación localizados, lo que puede penalizar a todo el sistema. En el caso de TEST_3, el sistema detecta una mala intención en una cuarta parte de las solicitudes, lo que seguramente conducirá al rechazo del asistente conversacional. Además, Precisión y recall se centran en 2 ejes diferentes: el primero resalta los problemas de falsos positivos cuando el segundo resalta los problemas de falsos negativos. Para el usuario, esto sigue siendo una respuesta incorrecta y, por lo tanto, necesitamos un nuevo indicador que tome para agrupar estos dos ejes.
Este indicador existe (aunque no es demasiado visible) y es el Critical Success Index (CSI, por sus siglas en inglés) más bien utilizado en el pronóstico del tiempo en otros lugares. También se llama Threat Score TS. El CSI es una medida de verificación del rendimiento para detecciones categóricas. Es igual al número total de pronósticos de eventos (TP) correctos dividido por el número total de detecciones falsas (FN + FP) a las que se agrega TP para obtener una relación de rendimiento.
Para finalizar nuestras pruebas antes de entrar en funcionamiento, estamos llevando a cabo una nueva capacitación que mejora globalmente nuestro modelo, colocándolo en un nivel completamente operativo con una precisión del 90%, una recuperación del 89% y una tasa de éxito del 89%.
Luego calculamos varios indicadores que encontrarás en esta página de Wikipedia.
Un estudio de la tabla muestra que ningún indicador realmente resalta los problemas de los clasificadores TEST_2 y TEST_3. Solo los indicadores CSI, F1-score, Matthews Correlation Coefficient (MCC) y el índice de Fowlkes-Mallows destacan una disminución de la calidad en el clasificador TEST_2. No hay indicador para detectar el problema TEST_3. El indicador CSI es el más cercano a una expectativa del rendimiento general del sistema, lo que lo convierte en un indicador más relevante que Precisión, Recall e incluso Accuracy.
Dado que los indicadores no dan ninguna indicación, estamos obligados a mirar los detalles de las pruebas de valores para cada intención a fin de determinar qué intenciones son problemáticas.
Dado que este trabajo es tedioso en una gran cantidad de pruebas y para muchas intenciones, propongo usar un indicador de dispersión llamado coeficiente de variación (o desviación estándar relativa). Este indicador se define como la relación entre la desviación estándar y la media [3]. Este número sin unidad permite una comparación entre varias series, lo que lo hace interesante para pruebas automatizadas. Sin embargo, este valor debe ajustarse para tener en cuenta el pequeño número de muestras. La fórmula para este indicador es la siguiente:
El cálculo de este indicador para nuestras 4 pruebas arroja los siguientes resultados para precisión, recuperación y CSI:
Por lo tanto, superar un umbral (por ejemplo, 20%) de uno de estos 3 valores puede usarse para informar al analista de un problema de calidad de la capacitación. Este indicador complementa el análisis clásico de los indicadores de rendimiento, es decir, baja precisión general, por ejemplo. Cuando se alcanza el umbral, es aconsejable analizar los resultados más de cerca para determinar la(s) intención (es) problemática (s) y así ver cómo modificar el entrenamiento, o incluso rechazar el nuevo entrenamiento.
Conclusión
En el área de los asistentes conversacionales, una de las causas del rechazo de los sistemas es cuando no reconocen correctamente las solicitudes. Por lo tanto, es importante probar el rendimiento de tu asistente antes de publicarlo y ponerlo a disposición de los usuarios. Hemos visto cómo calcular los valores de Precisión y Recall para un sistema de varias clases y lo importante que es ponderar los valores cuando el número de oraciones de prueba no está equilibrado. Sin embargo, los indicadores de precisión y recuperación, los más utilizados en el aprendizaje automático, no nos permiten concluir si un sistema no contiene un error en uno o más intentos, ya que solo estamos estudiando un valor global.
Por lo tanto, te invito a completar tu caso agregando el indicador CSI, que es más relevante para las expectativas del usuario, es decir, un asistente que responde correctamente con la mayor frecuencia posible (independientemente del error tipo I o II). Completa este indicador calculando el coeficiente de variación ajustado (imparcial) para precisión, recall y CSI. Establecer un umbral de alerta en el máximo de estos 3 valores te permite resaltar un problema de aprendizaje sin tener que verificar los indicadores uno por uno y así ahorrar tiempo en el análisis de tus iteraciones de entrenamiento.
Referencias
[1] Precisión y exhaustividad— Wikipedia — https://es.wikipedia.org/wiki/Precisi%C3%B3n_y_exhaustividad
[2]. Validación cruzada — Wikipedia — https://es.wikipedia.org/wiki/Validaci%C3%B3n_cruzada
[3]. Coeficiente de variación — Wikipedia — https://es.wikipedia.org/wiki/Coeficiente_de_variaci%C3%B3n