No me creo que no hayas escuchado nunca hablar del Machine Learning… Aun así, vamos a hablar un poco acerca de esta rama de la inteligencia artificial, y sobre todo de cómo hemos uso de ella en Language Understanding.
¿Cómo puedo entender el Machine Learning o Aprendizaje Automático?
No podemos hablar sobre Machine Learning (ML) sin tener un concepto en torno a qué es la Inteligencia Artificial o Artificial Inteligence (AI), de la que tanto estamos escuchando hablar. A muy alto nivel debemos conocer la AI como:
“La capacidad (una capacidad artificial forjada a base de algoritmos) de una máquina, de un servicio, de adoptar cualquier tipo de conducta propia del ser humano”.
A partir de aquí, entendamos el aprendizaje automático o automatizado como la rama dentro de la Inteligencia Artificial, que persigue el objetivo de desarrollar técnicas que permitan que un sistema “aprenda” sin llevar a cabo una programación como tal.
Para ello se pretende emular la habilidad (humana) de la predicción. ¿Cómo? Basándonos en la identificación de patrones a partir del estudio de datos registrados.
Esto se logra enfocando el servicio como un maestro de reconocimiento para la predicción de ciertos patrones, que a partir del estudio de una muestra de datos será capaz de obtener conclusiones en torno a una interpretación determinada. Consiguiendo esto, se podrá terminar dando respuesta a instrucciones basadas en nuevos conjuntos de datos para los que no haya sido, explícitamente, entrenado previamente.
Sí, pero… ¿Dónde los aplicamos?
Teniendo ya una pequeña noción, vamos a conocer un poco más a fondo esta tecnología, viendo, de manera muy sencilla, un caso donde podemos llegar aplicarla.
Para ello, mostraremos un ejemplo práctico de la ML dentro de la herramienta LUIS (Language Understanding Inteligence Service) o más conocida ahora como CLU (Conversational Language Understanding) tras una unificación sobre los servicios que éste nos brinda.
Con tal de ponernos en contexto, en el ejemplo de este post trabajamos con un bot que debe interpretar solicitudes de los usuarios (en forma de entrada de texto), en las que pedirán realizar un cambio en la periodicidad de pago de una póliza, es decir, especificando si el usuario va a querer pagar de forma mensual, trimestral, anual, cada 6 meses, etc.
Parece sencillo ¿Verdad? Ya que nuestro CLU únicamente va a tener que reconocer una entidad que relacione con un tipo de periodicidad que hayamos registrado…
Como ya hemos destacado, aquí CLU reconocería la palabra “mensual” y ya sabríamos exactamente cuál es la necesidad del usuario 🙂
Ahora pongámonos en otro escenario, uno más realista, en el que tengamos en cuenta lo rica que es nuestra lengua y lo dados que somos a lanzar un mismo mensaje de ∞ formas distintas, e incluso a dar información de más (como va a ser el caso), e intentemos interpretar la siguiente instrucción de un usuario:
¿Qué ocurre aquí? Tenemos 2 registros distintos de la misma entidad (2 valores distintos de periodicidad) que necesitamos identificar…entones ¿Qué podemos hacer?
Si estáis pensando en recurrir a ML…estáis bien encaminados 😉
Dentro de los tipos de entidad con los que podemos trabajar en CLU contamos con el tipo de Machine learned, y será haciendo uso de este tipo como podremos dar solución a este problema.
Para ello generaremos un nuevo tipo de entidad en CLU de tipo Machine Learned la cual actuará como “sub-entidad”, es decir, una entidad que no va a tener como objetivo identificar el valor propio de la misma, sino que su propósito va a ser clasificar esa entidad ya reconocida aportando más información acerca de ésta, independientemente de su valor (mensual, trimestral, anual, etc.).
Volviendo al caso del ejemplo en el que CLU recibe un mensaje de solicitud para el cambio del modo de pago y a la hora de interpretarlo obtiene dos valores posibles, surge la necesidad de trabajar solamente con uno de los dos, debiendo descartar uno y tomando otro.
Para ello trabajaremos generando dos tipos de entidad ML que clasificarán, etiquetarán la entidad de periodicidad según sea Inicial o Definitiva. De esta manera, el valor válido que recoja el sistema y con el cual debe quedarse. En primera instancia se crea la entidad que debemos vincular a otra entidad ya registrada: la de Periodicidad.
Y una vez hayamos definido ambas entidades Entidad ML: Inicial y Entidad ML: Definitiva, procederemos al entrenamiento:
¿En qué consiste el entrenamiento?
Siguiendo la dinámica propia del NLU (Natural Language Underestanding), y teniendo claro en qué se basa el ML, debemos de dotar de información al servicio con tal de que pueda predecir correctamente el propósito del mensaje.
Para ello, debemos ingresar en CLU una serie de registros dentro de su pool de intenciones donde relacionar estas entidades de tipo Machine learned, de Inicial y Definitiva que asociaremos, de forma manual en primera instancia, a aquellas entidades de tipo Periodicidad ya identificadas:
Esto lo haremos emulando muchas formas distintas de expresar lo mismo, siempre bajo el caso en el que se identifique al menos 2 registros distintos de la entidad de tipo Periodicidad (con tal de poder definir si se trata de la periodicidad inicial o la definitiva).
Además, con tal de lograr que nuestro servicio realice una interpretación lo más fiable posible, hemos de buscar y construir el mismo mensaje, bajo formas y estructuras distintas:
“Quiero comenzar a pagar de forma mensual y no anual.”
“Hasta ahora he estado pagando de forma trimestral, pero necesito comenzar a hacerlo de forma semestral.”
“Por favor, quiero dejar de pagar mensualmente y comenzar a hacerlo trimestralmente.”
Finalizado ese entrenamiento, el servició será capaz de predecir y clasificar los valores del mensaje que mande el usuario; comenzando a aplicar de forma autónoma las entidades ML que comenzamos relacionando a mano, incluso sobre entradas de texto que no se hayan registrado de forma literal.