Construir y entrenar modelos de NLP

Construir y entrenar modelos NLP

Introducción

Como hemos visto en el episodio 1, los buenos conjuntos de datos son la base de cualquier inteligencia artificial exitosa, especialmente en lo que respecta a NLP. Una vez que nuestra base de datos está correctamente implementada y estructurada, los siguientes pasos son mucho más simples.

Hoy veremos cómo nuestra base de datos nos permitirá construir conjuntos de consultas específicas, que luego podremos anotar y enriquecer, a partir de otras fuentes o de variaciones de ejemplos conocidos. Finalmente, veremos cómo entrenar y perfeccionar nuestro modelo.


Objetivo

Ahora disponemos de una cantidad excepcionalmente grande de datos, correctamente clasificados y estructurados. El objetivo es usar estos datos para construir una inteligencia artificial capaz de analizar solicitudes comerciales. Estos datos luego deberán ser anotados, enriquecidos e integrados en un modelo que deberemos evaluar, ajustar y mejorar.

Conjuntos de datos


Construcción de subconjuntos relevantes a partir de nuestra base de datos

Gracias a la clasificación de nuestros datos (descrita en el episodio 1), podemos extraer de nuestro índice datos relacionados con muchas áreas comerciales en una consulta precisa. Obviamente, esto requiere un conocimiento detallado de las áreas comerciales en cuestión. Luego es necesario pensar inteligentemente en tu consulta.

Por ejemplo, si tomamos el caso de RFQs (Request for Quotes) como las solicitudes de precios de acciones, estamos seguros de encontrar en correos electrónicos que contienen tales solicitudes referencias a términos relacionados con acciones, como “valor de acción” o “acciones”. Una consulta y un análisis rápido de los resultados en Kibana encontrará algunos ejemplos relevantes. Gracias a nuestra estructura, es entonces extremadamente fácil identificar al remitente, al destinatario o la conversación en la que se encuentra el correo, y recuperar, con este método, muchos correos electrónicos vinculados y, por lo tanto, muchos otros ejemplos.

Subconjunto relevante

Para construir un subconjunto relevante en un dominio comercial dado se necesitan al menos diez ejemplos diferentes de este. Obviamente, cuanto más variados sean los ejemplos, más fácil será trabajar en la construcción de un modelo de alto rendimiento, y menos necesitará ser enriquecido. Por lo tanto, es obligatorio pasar por todas las fuentes de correos electrónicos mencionadas anteriormente, para asegurarse de haber extraído el máximo potencial de nuestro conjunto de datos.

Una vez extraídos estos datos, deben ser anotados para permitir el entrenamiento de nuestra IA. Esta parte consistirá en separar nuestros diferentes ejemplos del conjunto de datos en diferentes “intenciones”.

  • Primero, tendremos que separar los correos electrónicos que hemos recuperado en solicitudes relevantes y partes «decorativas». Estas últimas nos permitirán entrenar nuestra IA en frases introductorias, cortesía, conversaciones informales, etc.
  • Luego, podemos separar nuestras solicitudes en “intenciones” que correspondan a acciones específicas, por ejemplo: «solicitud de acciones», «solicitud de bonos», y así sucesivamente.
  • Luego, en cada una de nuestras intenciones, tendremos que determinar «entidades». Estas entidades son valores clave para reconocer los elementos relevantes que pertenecen a una o más intenciones. Por ejemplo, con la intención «solicitud de acciones», podemos imaginar retener las entidades “activo”, «cantidad», «libro», etc.
  • Después, debemos anotar nuestros datos. Para esta parte, podríamos recurrir a esta herramienta, que simplificó mucho nuestro trabajo: https://spacy.io/universe/project/prodigy. Después de anotar el texto, un simple script de transformación, utilizando expresiones regulares, permite modificar las anotaciones para adaptarlas a la herramienta de aprendizaje elegida.

La necesidad de enriquecer nuestros subconjuntos

Una vez hecho esto, teóricamente puedes entrenar tus primeros modelos. Sin embargo, encontrarás que algunos de tus subconjuntos no son lo suficientemente completos o no abarcan lo suficiente. Aunque hayas agotado el lote de ejemplos disponibles en tu conjunto de datos, todavía hay una solución: crear variaciones de ejemplos que ya tienes.

Examinaremos el ejemplo específico de solicitudes sobre acciones. Imaginemos que hemos tomado algunos ejemplos de nuestro conjunto de datos, que hemos anotado:

Ejemplos de nuestro conjunto de datos

Duplica los ejemplos escritos anteriormente, modifica las entidades anotadas o su orden, sin cambiar el significado general de la solicitud. Este procedimiento nos permitirá integrar mejor qué nociones son necesarias para definir una intención particular, sin introducir sesgos.

Ejemplos de nuestro conjunto de datos

Una vez que tengamos suficientes datos anotados, estamos listos para entrenar nuestro modelo.


Entrenar y ajustar nuestro modelo

Matrices de confusión

Para construir nuestro modelo, nos basamos en modelos estándar. Basarse en un modelo existente tiene la ventaja de simplificar el reconocimiento de entidades e intenciones, ya que el modelo existente podrá asociar las entidades de nuestro modelo con sus propias entidades.

Modelo NLP

Esto fue particularmente relevante en nuestro caso, con la intención relacionada con transacciones de acciones. Por ejemplo, es importante poder diferenciar entre la consulta «¿Cuál es el precio de las acciones de Microsoft?» y la consulta «¿Cuál es el precio de una guitarra?», y así poder diferenciar implícitamente entre nombres de empresas y instrumentos musicales.

Por lo tanto, entrenamos nuestros primeros modelos a partir de los datos anotados previamente. Ahora necesitamos evaluar estos resultados para ver si cumplen con nuestras necesidades. Para esta necesidad específica, generaremos matrices de confusión para nuestro modelo.

Las matrices de confusión son una herramienta fundamental para evaluar el rendimiento de una IA en terreno conocido: nos dan una idea de las capacidades de la IA en los datos que hemos anotado. Los resultados esperados deben ser perfectos. Si no es así, será necesario reestructurar nuestro modelo para eliminar confusiones, incluso antes de probarlo en elementos desconocidos.

Matriz de confusión de entidades

Las matrices muestran qué entidades se han predicho correctamente y, si no es así, con cuáles se confunden. Lo mismo ocurre con las intenciones. Vemos aquí un ejemplo de esto en la intención «solicitud de acciones» descrita anteriormente.

Puede ocurrir que algunas entidades o intenciones se confundan entre sí. Luego serán necesarios ajustes. A veces será necesario repensar la definición de intenciones y entidades para eliminar ambigüedades.

Una vez que tu modelo haya pasado todas estas pruebas perfectamente, es el momento de probarlo en condiciones reales. ¡Pero eso será en el próximo episodio!


Conclusión

En este segundo episodio, hemos visto:

  • Cómo preparar nuestro modelo a partir del conjunto de datos creado anteriormente
  • Cómo enriquecerlo
  • Y finalmente, cómo entrenarlo y ajustarlo

Estos 3 pasos son especialmente importantes: solo un modelo a prueba de balas podrá hacer NLP de manera eficiente. De hecho, tendrás usuarios humanos enfrentándose a tu modelo, capaces de expresar una solicitud de muchas maneras.

Construir una IA capaz de responder autónomamente a solicitudes generadas por personas es un proceso gradual. Por nuestra parte, el desarrollo requirió un trabajo riguroso y meticuloso de minería de datos, enriquecimiento, anotación y ajuste antes de poder desplegar nuestra IA en producción y procesar transacciones reales.

¡Precisamente este último paso será el que abordaremos en el próximo episodio! Veremos cómo abordar tus primeras fases de prueba en condiciones reales, qué esperar de tu IA y cómo adaptarla.

¡Mantente atento al episodio 3!