Snips NLU (Natural Language Understanding) ist eine Python-Bibliothek, die es ermöglicht, strukturierte Informationen aus Sätzen zu extrahieren, die in natürlicher Sprache geschrieben sind.
Hinter jedem Chatbot und Sprachassistenten steckt eine gemeinsame Technologie: Natural Language Understanding (NLU). Immer wenn ein Benutzer mit einer KI in natürlicher Sprache interagiert, müssen seine Worte in eine maschinenlesbare Beschreibung dessen übersetzt werden, was sie meinten.
Die NLU-Engine erkennt zunächst die Absicht des Benutzers (auch Absicht genannt) und extrahiert dann die Parameter (Slots genannt) der Abfrage. Der Entwickler kann daraus dann die entsprechende Aktion oder Reaktion bestimmen.
Nehmen wir zur Veranschaulichung ein Beispiel und betrachten den folgenden Satz:
„Wie wird das Wetter um 21 Uhr in Paris sein?“
Bei entsprechender Schulung ist die Snips NLU-Engine in der Lage, strukturierte Daten zu extrahieren wie:
{
"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 "
}
]
}
In diesem Fall ist die identifizierte Absicht searchWeatherForecast
und es wurden zwei Slots extrahiert, ein Ort und ein Datum/Uhrzeit. Wie Sie sehen, führt Snips NLU zusätzlich zum Extrahieren von Entitäten einen zusätzlichen Schritt aus: Es löst sie auf. Der extrahierte Datum/Uhrzeit-Wert wurde tatsächlich in ein praktisches ISO-Format konvertiert.
Schauen Sie sich unseren Blogbeitrag an, um mehr darüber zu erfahren, warum wir Snips NLU entwickelt haben und wie es unter der Haube funktioniert. Wir haben auch einen Artikel auf arxiv veröffentlicht, in dem wir die Architektur für maschinelles Lernen der Snips Voice Platform vorstellen.
pip install snips - nlu
Wir verfügen derzeit über vorgefertigte Binärdateien (Räder) für snips-nlu
und seine Abhängigkeiten für MacOS (10.11 und höher), Linux x86_64 und Windows.
Für alle anderen Architekturen/Betriebssysteme kann snips-nlu aus der Quelldistribution installiert werden. Dazu müssen Rust und setuptools_rust installiert sein, bevor der Befehl pip install snips-nlu
ausgeführt wird.
Snips NLU ist auf externe Sprachressourcen angewiesen, die heruntergeladen werden müssen, bevor die Bibliothek verwendet werden kann. Sie können Ressourcen für eine bestimmte Sprache abrufen, indem Sie den folgenden Befehl ausführen:
python -m snips_nlu download en
Oder einfach:
snips-nlu download en
Die Liste der unterstützten Sprachen finden Sie unter dieser Adresse.
Der einfachste Weg, die Fähigkeiten dieser Bibliothek zu testen, ist die Befehlszeilenschnittstelle.
Beginnen Sie zunächst mit dem Training der NLU mit einem der Beispieldatensätze:
snips-nlu train path/to/dataset.json path/to/output_trained_engine
Dabei ist path/to/dataset.json
der Pfad zum Datensatz, der während des Trainings verwendet wird, und path/to/output_trained_engine
ist der Speicherort, an dem die trainierte Engine nach Abschluss des Trainings beibehalten werden soll.
Danach können Sie mit dem interaktiven Parsen von Sätzen beginnen, indem Sie Folgendes ausführen:
snips-nlu parse path/to/trained_engine
Dabei entspricht path/to/trained_engine
dem Speicherort, an dem Sie die trainierte Engine im vorherigen Schritt gespeichert haben.
Hier ist ein Beispielcode, den Sie auf Ihrem Computer ausführen können, nachdem Sie snips-nlu installiert, die englischen Ressourcen abgerufen und einen der Beispieldatensätze heruntergeladen haben:
>> > 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'
Es trainiert eine NLU-Engine anhand eines Beispiel-Wetterdatensatzes und analysiert eine Wetterabfrage.
Hier ist eine Liste einiger Datensätze, die zum Trainieren einer Snips-NLU-Engine verwendet werden können:
Im Januar 2018 haben wir einen akademischen Benchmark reproduziert, der im Sommer 2017 veröffentlicht wurde. In diesem Artikel bewerteten die Autoren die Leistung von API.ai (jetzt Dialogflow, Google), Luis.ai (Microsoft), IBM Watson und Rasa NLU. Der Fairness halber haben wir eine aktualisierte Version von Rasa NLU verwendet und sie mit der neuesten Version von Snips NLU verglichen (beide in Dunkelblau).
In der Abbildung oben wurden die F1-Werte sowohl der Absichtsklassifizierung als auch der Slotbelegung für mehrere NLU-Anbieter berechnet und über die drei Datensätze gemittelt, die im zuvor erwähnten akademischen Benchmark verwendet wurden. Alle zugrunde liegenden Ergebnisse finden Sie hier.
Informationen zur Verwendung von Snips NLU finden Sie in der Paketdokumentation. Dort erhalten Sie eine Schritt-für-Schritt-Anleitung zur Einrichtung und Verwendung dieser Bibliothek.
Bitte zitieren Sie das folgende Dokument, wenn Sie Snips NLU verwenden:
@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 }
}
Bitte treten Sie dem Forum bei, um Ihre Fragen zu stellen und Feedback von der Community zu erhalten.
Bitte beachten Sie die Beitragsrichtlinien.
Diese Bibliothek wird von Snips als Open-Source-Software bereitgestellt. Weitere Informationen finden Sie unter LIZENZ.
Die integrierten Entitäten snips/city, snips/country und snips/region basieren auf Software von Geonames, die unter einer Creative Commons Attribution 4.0-Lizenz international zur Verfügung gestellt wird. Die Lizenz und Garantien für Geonames finden Sie unter: https://creativecommons.org/licenses/by/4.0/legalcode.