Snips NLU (Natural Language Understanding) est une bibliothèque Python qui permet d'extraire des informations structurées à partir de phrases écrites en langage naturel.
Derrière chaque chatbot et assistant vocal se cache une technologie commune : la compréhension du langage naturel (NLU). Chaque fois qu'un utilisateur interagit avec une IA en utilisant un langage naturel, ses mots doivent être traduits en une description lisible par machine de ce qu'ils signifient.
Le moteur NLU détecte d'abord quelle est l'intention de l'utilisateur (c'est-à-dire l'intention), puis extrait les paramètres (appelés slots) de la requête. Le développeur peut ensuite l'utiliser pour déterminer l'action ou la réponse appropriée.
Prenons un exemple pour illustrer cela et considérons la phrase suivante :
"Quel temps fera-t-il à Paris à 21h ?"
Correctement entraîné, le moteur Snips NLU sera capable d'extraire des données structurées telles que :
{
"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 "
}
]
}
Dans ce cas, l'intention identifiée est searchWeatherForecast
et deux emplacements ont été extraits, une localité et une date/heure. Comme vous pouvez le voir, Snips NLU effectue une étape supplémentaire en plus de l'extraction des entités : il les résout. La valeur datetime extraite a en effet été convertie dans un format ISO pratique.
Consultez notre article de blog pour obtenir plus de détails sur les raisons pour lesquelles nous avons créé Snips NLU et comment il fonctionne sous le capot. Nous avons également publié un article sur arxiv, présentant l'architecture d'apprentissage automatique de la plateforme vocale Snips.
pip install snips - nlu
Nous disposons actuellement de binaires (roues) prédéfinis pour snips-nlu
et ses dépendances pour MacOS (10.11 et versions ultérieures), Linux x86_64 et Windows.
Pour toute autre architecture/système d'exploitation, snips-nlu peut être installé à partir de la distribution source. Pour ce faire, Rust et setuptools_rust doivent être installés avant d'exécuter la commande pip install snips-nlu
.
Snips NLU s'appuie sur des ressources linguistiques externes qui doivent être téléchargées avant que la bibliothèque puisse être utilisée. Vous pouvez récupérer des ressources pour une langue spécifique en exécutant la commande suivante :
python -m snips_nlu download en
Ou simplement :
snips-nlu download en
La liste des langues prises en charge est disponible à cette adresse.
Le moyen le plus simple de tester les capacités de cette bibliothèque consiste à utiliser l'interface de ligne de commande.
Tout d’abord, commencez par entraîner la NLU avec l’un des exemples d’ensembles de données :
snips-nlu train path/to/dataset.json path/to/output_trained_engine
Où path/to/dataset.json
est le chemin d'accès à l'ensemble de données qui sera utilisé pendant la formation, et path/to/output_trained_engine
est l'emplacement où le moteur entraîné doit être conservé une fois la formation terminée.
Après cela, vous pouvez commencer à analyser les phrases de manière interactive en exécutant :
snips-nlu parse path/to/trained_engine
Où path/to/trained_engine
correspond à l'emplacement où vous avez stocké le moteur entraîné lors de l'étape précédente.
Voici un exemple de code que vous pouvez exécuter sur votre machine après avoir installé snips-nlu, récupéré les ressources en anglais et téléchargé l'un des exemples d'ensembles de données :
>> > 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'
Ce qu'il fait, c'est former un moteur NLU sur un exemple d'ensemble de données météorologiques et analyser une requête météo.
Voici une liste de quelques ensembles de données qui peuvent être utilisés pour entraîner un moteur Snips NLU :
En janvier 2018, nous avons reproduit un benchmark académique publié au cours de l'été 2017. Dans cet article, les auteurs ont évalué les performances d'API.ai (maintenant Dialogflow, Google), Luis.ai (Microsoft), IBM Watson et Rasa NLU. Par souci d'équité, nous avons utilisé une version mise à jour de Rasa NLU et l'avons comparée à la dernière version de Snips NLU (toutes deux en bleu foncé).
Dans la figure ci-dessus, les scores F1 de classification des intentions et de remplissage des emplacements ont été calculés pour plusieurs fournisseurs NLU et moyennés sur les trois ensembles de données utilisés dans le benchmark académique mentionné précédemment. Tous les résultats sous-jacents peuvent être trouvés ici.
Pour savoir comment utiliser Snips NLU, veuillez vous référer à la documentation du package, elle vous fournira un guide étape par étape sur la façon de configurer et d'utiliser cette bibliothèque.
Veuillez citer l'article suivant lorsque vous utilisez 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 }
}
Rejoignez le forum pour poser vos questions et obtenir les commentaires de la communauté.
Veuillez consulter les directives de contribution.
Cette bibliothèque est fournie par Snips en tant que logiciel Open Source. Voir LICENCE pour plus d’informations.
Les entités intégrées snips/city, snips/country et snips/region s'appuient sur le logiciel de Geonames, qui est mis à disposition sous une licence internationale Creative Commons Attribution 4.0. Pour la licence et les garanties pour Geonames, veuillez vous référer à : https://creativecommons.org/licenses/by/4.0/legalcode.