Cómo crear una API NLU de código abierto con Rasa

Original article was published by Cobus Greyling on Artificial Intelligence on Medium


Introducción

Hay mucho entusiasmo con respecto a los chatbots y la IA conversacional en general.

API de Rasa NLU llamada desde Postman

API de Rasa NLU llamada desde Postman

Las tecnologías a menudo se comparan entre sí para encontrar la que mejor se adapte a una organización o tarea.

El problema es que con toda la tecnología disponible, las decisiones iniciales son fáciles de tomar. Pero, las decisiones posteriores de diseño y arquitectura son más difíciles una vez que se establece el sistema.

En este artículo, me gustaría centrarme en utilizar una opción de código abierto que servirá bien para un proyecto semilla.

Pero más que eso, un marco que puede evolucionar y soportar una solución empresarial completa.

Comenzar con la API de NLU sentará una buena base para convertir la solución en una interfaz de conversación completa.

NLU y Core

Hay algunas plataformas de chatbot que tienen una clara separación entre la parte de NLU y las partes de integración y gestión de diálogo. Esto permite el desarrollo de una API NLU independiente.

Arquitectura de chatbot Rasa con la parte NLU marcada.

La arquitectura Rasa te brinda la oportunidad de tener una API NLU que también se puede usar para tareas de comprensión del lenguaje natural no relacionadas con conversaciones en vivo. Esto incluye conversaciones archivadas en correo electrónico, conversaciones de agentes en línea, etc.

Formato de datos NLU

Hay videos muy buenos sobre cómo instalar Rasa en diferentes entornos.

Aquí puedes encontrar un video de Rachel para la instalación en Widows 10. En segundo lugar, para comenzar, Rasa tiene una serie de videos de Masterclass que es una forma eficiente para ponerse al día con Rasa.

Pero, volviendo a la creación de una API NLU …

El archivo NLU.md dentro de la estructura de archivos Rasa

Los siguientes ejemplos que se utilizan para la capacitación de NLU se basan en un proyecto de GitHub.

El archivo de entrenamiento de NLU tiene las entidades anotadas dentro de las intenciones. Por lo tanto, vemos la tendencia saludable de fusión de intenciones y entidades.

Las intenciones y las entidades están en un archivo de texto en formato markdown.

Intenciones y entidades

Ejemplos simples

El ejemplo más simple es tener una intención definida con algunos ejemplos sin ninguna entidad. A continuación se muestra la intención check_balance con algunos ejemplos.

## intent:check_balance
- How much money is on my account?
- what's my balance?
- what's my current balance?
- What's left on that account?
- How much do I have on that account?

Agreguemos una entidad de tipo account_type con la tarjeta de crédito de ejemplo.

- what's my [credit](account_type) account balance?

El resultado:

La intención es check_balance y la entidad es account_type of credit.

Expresiones regulares

Así es como se definen las expresiones regulares dentro del archivo nlu.md

## regex:accountNumber
- [0-9]{9}## intent:inform_accountNumber
- my account number is [123454434](accountNumber)
- my account number is [334564343](accountNumber)
- my account number is [940564343](accountNumber)

Y la salida…

Se marca la intención y se extrae la entidad de accountNumber.

Normalizar datos

Los datos capturados en la entidad se pueden normalizar. La entidad relacionada con las cuentas de tarjetas de crédito se captura bajo la entidad de account_type, pero siempre con el valor de crédito.

{“text”: “Pague mi [tarjeta de crédito] {“ entity “:” account_type “,” value “:” credit “}, por favor”}

Y el resultado…

La entrada de cuenta de tarjeta de crédito se normaliza a crédito en la entidad account_type.

Aquí puede ver que la entrada bastante sesgada de cuenta de tarjeta de crédito se normaliza al valor del crédito en la entidad account_type.

Modelos

Cada vez que entrenas tu modelo, se crea un nuevo archivo de modelo en la carpeta de modelos. Esto te permite cambiar entre modelos para tu API, volver a versiones anteriores, etc.

Se pueden invocar diferentes modelos entrenados al ejecutar la API

Creando la API

Con un solo comando, la API se inicia en el puerto 5005. Pero primero, asegúrate de haber activado tu anaconda virtual environment:

conda activate rasa2

Mi entorno virtual se llama rasa2.

Ejecuta la API:

rasa run --enable-api -m models/nlu-20200917-225530.tar.gz

Puedes acceder a la API en la URL

http://localhost:5005/model/parse

Interactúas con tu API a través de un cliente como Postman .

Enviar una cadena de consulta JSON a la API Rasa

Enviar una cadena de consulta JSON a la API Rasa

Conclusión

También hay otras funciones disponibles al definir los datos de entrenamiento. Las características mencionadas aquí son las principales, en mi opinión. En el próximo artículo, quiero ver las estructuras disponibles para las entidades.