Im Frühjahr haben wir die
Dialogplattform gestartet, mit der Sie Fähigkeiten für Alice erstellen und Sprachanfragen von Benutzern erkennen können. Zunächst mussten die Skill-Entwickler die Abfragen selbst analysieren. Suchen Sie beispielsweise die Adresse im Text. Jetzt übernimmt die Plattform diesen Teil der Arbeit.
Heute werden wir Habr-Lesern über die Anerkennung der benannten Entitäten (Named-Entity Recognition; NER) und neue Möglichkeiten für Entwickler von Fähigkeiten informieren.

Wir glauben, dass die Zukunft mit Sprachschnittstellen liegt. In vielen Fällen bevorzugen Benutzer bereits die Verwendung von Sprache anstelle einer Bildschirmtastatur. Zum Beispiel beim Autofahren. Oder um schnelle Antworten auf einfache Fragen zu finden. Oder um in der "Stadt" zu spielen, die auf der Couch liegt. Damit solche Szenarien jedoch immer häufiger auftreten, reicht es nicht aus, nur die Stimme im Text zu erkennen.
Sprachschnittstellen ähneln Suchmaschinenabfragen. Wir verstehen nicht immer genau, wie wir unsere Anfrage formulieren müssen, um genau das zu finden, was wir brauchen. Zu Beginn der Entstehung des Internets war dies ein großes Problem, da Suchmaschinen nur nach dem genauen Vorkommen von Wörtern aus der Abfrage suchten. Also mit der Stimme. Wenn wir nicht wissen, welches Team von uns erwartet wird, werden wir lange raten.
Eine gute Sprachschnittstelle sollte eine Person nicht in eine Sackgasse führen. In der Regel lösen Skill-Entwickler dies mit zwei Tricks. Zunächst werden die erwarteten Antworten über die Schaltflächen auf dem Bildschirm angezeigt. Dies ist eine gute Vorgehensweise, die wir nicht ignorieren sollten.
Außerdem versuchen die Entwickler von Fähigkeiten, komplexe Fragen in eine Reihe einfacherer Fragen zu zerlegen, deren Antworten leichter vorherzusagen sind. Darüber hinaus müssen Benutzer in einigen Fällen Wörter in einer bestimmten Form und in einem bestimmten Fall streng aussprechen. Das Problem bei diesem Ansatz ist, dass er nicht mehr als natürliche Kommunikation bezeichnet werden kann. Je mehr Konventionen und Einschränkungen gelten, desto weniger unterscheidet sich die Sprachsteuerung von der Verwendung einer Tastatur und von Tasten. Idealerweise sollte der Benutzer mit dem Dienst so frei kommunizieren wie mit einer Person.
Es ist gut, wenn der Benutzer "Danke! Liefern Sie den Auftrag an Leo Tolstoi 16 und übergeben Sie ihn an Sergej Sergejew “, anstatt ihn in eine Reihe von Fragen zu Straße, Hausnummer, Name und Nachname zu unterteilen. Dies erfordert jedoch, dass der Entwickler die erhaltenen Antworten weiter analysiert. Sie können dies manuell durch den Bediener tun, aber bei einer großen Anzahl von Bedienern wird viel benötigt. Und es ist unwahrscheinlich, dass Bediener dies in Echtzeit tun, sodass die Fähigkeit die Möglichkeit verliert, die fehlenden Informationen sofort zu klären. Sie können eine Technologie entwickeln, die automatisch wichtige Informationen im Text findet, klassifiziert, normalisiert und speichert. Dies ist jedoch eine ziemlich mühsame Aufgabe.
Um nützliche Entitäten effizient aus dem Text zu extrahieren und sie korrekt nach Typ zu klassifizieren, muss der Dienst Erfahrung in zwei wichtigen Richtungen haben. Zunächst müssen Sie in der Lage sein, Wissen darüber zu sammeln, was Objekte sind. Wenn Sie Leo Tolstoy Street nicht im "Wörterbuch" haben, können Sie es bei der Bearbeitung einer Anfrage leicht mit dem Namen der Person verwechseln und überspringen. Andererseits ist es ebenso wichtig, diese Objekte im Rohtext des Benutzers finden zu können. Berücksichtigen Sie mindestens die Morphologie der russischen Sprache, damit das Wort „Sergey“ gefunden wird und sich in den Namen „Sergey“ verwandelt.
So kam es, dass Yandex viel Erfahrung in diesen Bereichen hat. Suchtechnologien werden sowohl zum Suchen nach neuen Objekten als auch zum Analysieren von Benutzeranfragen verwendet. Jetzt stehen diese Technologien auch Skill-Entwicklern für Alice zur Verfügung.
Erkennen benannter Entitäten in Dialogen
Nachdem ein Benutzer einen Befehl ausgesprochen hat, erkennt unsere Plattform seinen Text und extrahiert Wörter und Ausdrücke, die bestimmte Objekte beschreiben. Derzeit erkennen Dialoge:
- Namen;
- Standortangaben;
- Datum und Uhrzeit;
- Ganzzahlen und Bruchzahlen.
Informationen zu erkannten Objekten werden zusammen mit dem Antworttext des Benutzers an den Skill-Server gesendet. Betrachten Sie ein Beispiel:
"Bestellen Sie Pizza auf Leo Tolstoi 16 für Sergey Sergeyev um 22 Uhr."
Unsere Plattform weiß, dass Leo Tolstoi nicht nur eine Person, sondern auch eine Straße ist. Sie berücksichtigt auch, dass in den Adressen neben Straßennamen häufig Hausnummern angegeben sind. Daher enthält die Fertigkeitsanforderung den folgenden Block:
{ "type": "YANDEX.GEO", "value": { "house_number": "16", "street": " " } }
Zu den Standorten können nicht nur die Straße und das Haus gehören, sondern auch die Stadt, das Land oder sogar der Flughafen.
Bei Namen funktioniert dies ähnlich. Die Plattform kann den Vor- und Nachnamen sowie den zweiten Vornamen finden und zum Nominativ bringen.
{ "type": "YANDEX.FIO", "value": { "first_name": "", "last_name": "" } }
Die Datennormalisierung ist ein wichtiges Merkmal der Erkennung benannter Entitäten. Wenn diese Eigenschaft für Adressen und Namen nicht so offensichtlich ist, ist bei Datum und Uhrzeit alles viel klarer. "22 Uhr" wird automatisch zu "22". Morgen und übermorgen werden Daten explizit erhöht.
{ "type": "YANDEX.DATETIME", "value": { "hour_is_relative": false, "hour": 22 } }
Auch die Nummernerkennung ist nicht zu unterschätzen. Zum Beispiel wird aus "vier Punkt fünf Zehntel" in einem Text eines Benutzers Folgendes:
{ "type": "YANDEX.NUMBER", "value": 4.5 }
Interessiert an? Wir laden Sie zur
Dokumentation ein . Wenn noch Fragen offen sind, begrüßen Sie unseren Chat in
Telegramm . Es ist bequem, andere Plattformnachrichten im
Blog zu verfolgen.