Snips NLU (Natural Language Understanding) es una biblioteca de Python que permite extraer información estructurada de oraciones escritas en lenguaje natural.
Detrás de cada chatbot y asistente de voz se encuentra una tecnología común: la comprensión del lenguaje natural (NLU). Cada vez que un usuario interactúa con una IA utilizando un lenguaje natural, sus palabras deben traducirse a una descripción legible por máquina de lo que quisieron decir.
El motor NLU primero detecta cuál es la intención del usuario (también conocida como intención) y luego extrae los parámetros (llamados espacios) de la consulta. Luego, el desarrollador puede utilizar esto para determinar la acción o respuesta adecuada.
Tomemos un ejemplo para ilustrar esto y consideremos la siguiente oración:
"¿Cómo estará el tiempo en París a las 21 h?"
Si está debidamente entrenado, el motor Snips NLU podrá extraer datos estructurados como:
{
"intent" : {
"intentName" : " searchWeatherForecast " ,
"probability" : 0.95
},
"slots" : [
{
"value" : " paris " ,
"entity" : " locality " ,
"slotName" : " forecast_locality "
},
{
"value" : {
"kind" : " InstantTime " ,
"value" : " 2018-02-08 20:00:00 +00:00 "
},
"entity" : " snips/datetime " ,
"slotName" : " forecast_start_datetime "
}
]
}
En este caso, la intención identificada es searchWeatherForecast
y se extrajeron dos espacios, una localidad y una fecha y hora. Como puede ver, Snips NLU realiza un paso adicional además de extraer entidades: las resuelve. De hecho, el valor de fecha y hora extraído se ha convertido a un práctico formato ISO.
Consulte nuestra publicación de blog para obtener más detalles sobre por qué creamos Snips NLU y cómo funciona internamente. También publicamos un artículo sobre arxiv, que presenta la arquitectura de aprendizaje automático de Snips Voice Platform.
pip install snips - nlu
Actualmente contamos con binarios (wheels) prediseñados para snips-nlu
y sus dependencias para MacOS (10.11 y posteriores), Linux x86_64 y Windows.
Para cualquier otra arquitectura/sistema operativo, snips-nlu se puede instalar desde la distribución fuente. Para hacerlo, se deben instalar Rust y setuptools_rust antes de ejecutar el comando pip install snips-nlu
.
Snips NLU depende de recursos de idiomas externos que deben descargarse antes de poder utilizar la biblioteca. Puede recuperar recursos para un idioma específico ejecutando el siguiente comando:
python -m snips_nlu download en
O simplemente:
snips-nlu download en
La lista de idiomas admitidos está disponible en esta dirección.
La forma más sencilla de probar las capacidades de esta biblioteca es a través de la interfaz de línea de comandos.
Primero, comience entrenando la NLU con uno de los conjuntos de datos de muestra:
snips-nlu train path/to/dataset.json path/to/output_trained_engine
Donde path/to/dataset.json
es la ruta al conjunto de datos que se utilizará durante el entrenamiento, y path/to/output_trained_engine
es la ubicación donde el motor entrenado debe persistir una vez finalizado el entrenamiento.
Después de eso, puedes comenzar a analizar oraciones de forma interactiva ejecutando:
snips-nlu parse path/to/trained_engine
Donde path/to/trained_engine
corresponde a la ubicación donde almacenó el motor entrenado durante el paso anterior.
Aquí hay un código de muestra que puede ejecutar en su máquina después de haber instalado snips-nlu, buscar los recursos en inglés y descargar uno de los conjuntos de datos de muestra:
>> > from __future__ import unicode_literals , print_function
>> > import io
>> > import json
>> > from snips_nlu import SnipsNLUEngine
>> > from snips_nlu . default_configs import CONFIG_EN
>> > with io . open ( "sample_datasets/lights_dataset.json" ) as f :
... sample_dataset = json . load ( f )
>> > nlu_engine = SnipsNLUEngine ( config = CONFIG_EN )
>> > nlu_engine = nlu_engine . fit ( sample_dataset )
>> > text = "Please turn the light on in the kitchen"
>> > parsing = nlu_engine . parse ( text )
>> > parsing [ "intent" ][ "intentName" ]
'turnLightOn'
Lo que hace es entrenar un motor NLU en un conjunto de datos meteorológicos de muestra y analizar una consulta meteorológica.
Aquí hay una lista de algunos conjuntos de datos que se pueden usar para entrenar un motor Snips NLU:
En enero de 2018, reproducimos un punto de referencia académico que se publicó durante el verano de 2017. En este artículo, los autores evaluaron el rendimiento de API.ai (ahora Dialogflow, Google), Luis.ai (Microsoft), IBM Watson y Rasa NLU. Para ser justos, utilizamos una versión actualizada de Rasa NLU y la comparamos con la última versión de Snips NLU (ambas en azul oscuro).
En la figura anterior, las puntuaciones F1 tanto de la clasificación de intenciones como de la ocupación de espacios se calcularon para varios proveedores de NLU y se promediaron en los tres conjuntos de datos utilizados en el punto de referencia académico mencionado anteriormente. Todos los resultados subyacentes se pueden encontrar aquí.
Para saber cómo utilizar Snips NLU, consulte la documentación del paquete, que le proporcionará una guía paso a paso sobre cómo configurar y utilizar esta biblioteca.
Cite el siguiente documento cuando utilice Snips NLU:
@article { coucke2018snips ,
title = { Snips Voice Platform: an embedded Spoken Language Understanding system for private-by-design voice interfaces } ,
author = { Coucke, Alice and Saade, Alaa and Ball, Adrien and Bluche, Th{'e}odore and Caulier, Alexandre and Leroy, David and Doumouro, Cl{'e}ment and Gisselbrecht, Thibault and Caltagirone, Francesco and Lavril, Thibaut and others } ,
journal = { arXiv preprint arXiv:1805.10190 } ,
pages = { 12--16 } ,
year = { 2018 }
}
Únase al foro para hacer sus preguntas y recibir comentarios de la comunidad.
Consulte las Pautas de contribución.
Snips proporciona esta biblioteca como software de código abierto. Consulte LICENCIA para obtener más información.
Las entidades integradas snips/city, snips/country y snips/region dependen del software de Geonames, que está disponible bajo una licencia internacional Creative Commons Attribution 4.0. Para conocer la licencia y las garantías de Geonames, consulte: https://creativecommons.org/licenses/by/4.0/legalcode.