Fähigkeitsentwicklung für Alice. Erfahrung mit Sprachschnittstellen, Tipps für Anfänger

Noch vor einem Monat wollten wir versuchen, eine Erweiterung für Alices funktionale Fähigkeiten zu schaffen . Aufgrund der Erfahrung mit der Kommunikation im Yandex.Dialog-Support-Chat hatte ich den Eindruck, dass Anfänger bereits etwas mit der Arbeit an Sprachschnittstellen zu tun haben .

In der Notiz möchte ich meine Eindrücke von den drei Wochen der Neujahrskünste unserer Kinder, Snow Maiden, und von Fragen und Antworten im Chat der Dialogentwickler erzählen.



Für einen Fachmann in VUI ist die Notiz nichts Neues, aber gute Ratschläge und Kommentare von erfahrenen sind willkommen. Ich schreibe zum ersten Mal, bitte urteilen Sie nicht streng.

Warum auf Alice achten?
Warum das alles: Stimme, Fähigkeiten?
Wie erstelle ich eine Fertigkeit?
Allgemeiner Ansatz und häufige Fehler.
Aktuelle Plattformfehler.

Warum auf Alice achten?


Während Sprachassistenten im Ausland bereits alltäglich geworden sind, laufen bereits viele Stunden Gespräche mit dem Roboter in das Netzwerk ein , dann haben wir es immer noch auf der Ebene der Interaktion mit dem Navigator, des Geschwätzes von Kindern mit Alice und des Verwöhnens von Geeks mit Smart Homes. Nur wenige meiner Freunde geben Notizen und Erinnerungen mit Siri ein, obwohl dies meiner Meinung nach eine der bequemsten Optionen für die Verwendung ist. Mit hoher Wahrscheinlichkeit wird sich die Situation in diesem Jahr zum Besseren wenden, da der Grundstein bereits gelegt wurde:

  • Alice war erst ein Jahr alt, sie studiert, weiß aber schon wie viel.
  • Verlassen Sie die Yandex-Station - ich denke, sie wird allmählich intelligenter und funktionaler.
  • Der Auftritt der ersten kostengünstigen Affiliate- Mini-Lautsprecher im Dezember.
  • Alice School startet, um Fähigkeiten für Entwickler zu entwickeln
  • Es wurden wesentliche Verbesserungen an der Infrastruktur von Yandex.Dialogs angekündigt, insbesondere „Discovery Skills“ - ein Tool für die bequeme Suche und Rangfolge von Fähigkeiten von Drittentwicklern

All dies sagt mir, dass wir am Anfang der Entwicklung von Sprachschnittstellen in Russland stehen und uns daher entschlossen haben, diese Technologien zu studieren.

Warum das alles: Stimme, Fähigkeiten?


Ich denke, dass viele Menschen in einigen Fällen bereits den Vorteil von Sprachschnittstellen verstehen, aber es wird nicht überflüssig sein, sich daran zu erinnern: Manchmal ist dies die am besten geeignete Option. Zum Beispiel im Auto oder in der Küche, beim Kochen oder bei anderen Aktivitäten, bei denen Ihre Hände beschäftigt sind, ist es bequemer, Befehle per Spracheingabe zu erteilen. Zum Beispiel gibt es seit langem Roboter-Krankenschwestern, die von der Stimme gesteuert werden und bei chirurgischen Eingriffen helfen.

Voice ist eine vertraute Schnittstelle, mit der Menschen interagieren können. Ältere Menschen und Kinder lernen diese Methode problemlos, um Informationen zu erhalten und Geräte zu verwalten.

Für Menschen mit Sehbehinderung sind Stimme und Hören ein noch wichtigerer Kanal für die Interaktion mit der Umwelt. Dem Yandex.Station-Chat nach zu urteilen , schätzte diese Kategorie das Aussehen eines solchen Geräts, das ihnen das Leben leichter machte.

Ich werde Fälle nicht weiter auflisten, wenn es interessant ist, dann können Sie mehr darüber aus der Fachliteratur erfahren.

Skill ist ein Programm, das einen bestimmten Dialog implementiert, der durch einen bestimmten Aktivierungsbefehl in Alice gestartet wird, und die Funktionen des Sprachassistenten von Yandex erweitert.

Wie erstelle ich eine Fertigkeit?


Es gibt bereits eine Reihe guter Fähigkeiten von Drittanbietern, aber es gibt noch viele weitere Nischen, die Sie besetzen und zu einer wirklich interessanten und nützlichen Fähigkeit machen können.

Es gibt mehrere Artikel zu ihrer Erstellung, darunter auch zu Habré. Es gibt Dokumentation , es gibt kurze allgemeine Empfehlungen . Ich werde nicht tief in die technischen Details der Implementierung gehen, weil Ich möchte gemeinsame Ansätze für Anfänger teilen.

Technisch gesehen ist die Fähigkeit einem Bot sehr ähnlich, mit dem Unterschied, dass er keine Nachricht selbst senden kann, sondern nur die Anfrage eines Benutzers beantwortet.

Hier ist eine kurze Liste von Ressourcen, die Ihnen den Einstieg erleichtern: Bibliotheken und Ressourcen für Yandex-Dialoge

Inoffizielle FAQ zur Arbeit mit Yandex Dialogs.

Das Dokument enthält relevante und nicht sehr Links sowie Fragen und Antworten.
Der obige Chat Yandex Dialogs .

Um mit der Entwicklung zu beginnen, benötigen Sie ein Konto bei Yandex, einen Server, auf dem der Code unseres Programms gefunden und ausgeführt wird, einen Webserver und die Anwendung selbst, die in einer für Sie geeigneten Sprache geschrieben sind und über das https-Protokoll arbeiten können .

Ich werde hier keine Details zur Umsetzung meiner Fähigkeiten geben. Wenn es eine Anfrage der Community gibt, werde ich dies in einem separaten Artikel beachten. Darüber hinaus existieren solche Materialien bereits.

Ich werde nur ein Beispiel für eine einfache Fähigkeit in PHP mit Kommentaren hinterlassen, die meiner Meinung nach einem Anfänger einen schnellen Start ermöglichen.

Das Repository enthält ein Skript zum Erstellen einer einfachen Entwicklungsumgebung, in der der in PHP integrierte Webserver ausgeführt wird. Durch die Verwendung des Dienstes serveo.net kann der lokale Port über das Internet zugänglich gemacht werden:



URL speichern https: //******.serveo.net - Dies ist Ihre Webhook-URL. Im Gegensatz zu ngrok ändert sich diese URL im Laufe der Zeit nicht. Sie müssen sie nicht in den Dialogeinstellungen ändern. Sie können die Verfügbarkeit des Webhooks überprüfen, indem Sie diese URL in den Browser eingeben. Json sollte mit einem Fehler zurückkehren. Dies ist normal, wir haben die erforderlichen Parameter nicht an das Skript übergeben.

Als nächstes registrieren Sie die Fertigkeit selbst über den Link :



Wählen Sie den Punkt "Fähigkeit in Alice"



Wir füllen alle Felder gemäß den Eingabeaufforderungen und der Dokumentation der Dialoge aus:



Geben Sie im Feld Webhook-URL die zuvor empfangene URL ein.

Wir versuchen es zu speichern. Wenn wir die Anweisungen befolgen, sollte beim ersten Mal alles funktionieren.

In diesem Artikel zur Implementierung rate ich Ihnen nur, dem System der Protokollierung von Benutzeraktionen besondere Aufmerksamkeit zu widmen. Ich bin alle Problembereiche der Benutzerinteraktion. Ich erwarte beispielsweise "Ja |" Nein, aber ich bekomme etwas anderes, schreibe es in das Protokoll und sende es sofort (als separater Prozess für die Geschwindigkeit des Webhooks) an den Telegrammkanal, um es betriebsbereit zu verfolgen und zu beantworten.

Allgemeiner Ansatz und häufige Fehler.


Wie erwartet sind die üblichen Ansätze zur konventionellen Webentwicklung oder Telegramm-Bot-Entwicklung hier nicht geeignet. Der Hauptunterschied ist die häufige Unvorhersehbarkeit von Antworten. Auf der Dialogplattform können Sie Schaltflächen mit eindeutigen Antworten auf die Frage hinzufügen. Der Benutzer antwortet jedoch häufig überhaupt nicht, was ein Programmierer erwartet, der es gewohnt ist, einer klaren Logik zu folgen.

Ein Beispiel.

Möchten Sie ein anderes Gedicht lernen?
[Ja Nein]

Wir erwarten, dass die Person mit Ja oder Nein antwortet, aber es kamen viele andere Optionen zu uns:

  • Ja
  • ja Ja
  • natürlich möchte ich
  • Ja, Mama, was müssen wir essen?
  • müde von
  • Wie ist das Wetter in Nowosibirsk?

All dies geschieht aus mehreren Gründen. Eine Person kann verschiedene positive Sätze verwenden: "natürlich", "ja", "ja", "komm schon" usw. sowie negative. Es kommt vor, dass er die Frage nicht rechtzeitig beantwortet hat, Alice immer noch nicht auf die Antwort hört und die Person bereits anfängt zu sprechen, am Ende hören wir einen Teil des Satzes. Oder umgekehrt, nachdem eine Person geantwortet hat, setzt sie das Gespräch mit einem anderen Gesprächspartner "im wirklichen Leben" fort. Außerdem versteht der Benutzer der Fertigkeit möglicherweise einfach nicht, was sich im Dialogfeld eines Drittanbieters befindet, und stellt die üblichen Aliso-Anforderungen, ohne den Befehl "genug" zu lassen.

Wenn wir dieselbe Frage einfach wiederholen, ohne die richtige Antwort zu erkennen, kann dies den Benutzer ärgern und zu Enttäuschungen in Ihren Fähigkeiten und in den Sprachschnittstellen im Allgemeinen führen. Daher sollten Sie besonders auf Fehlermeldungen achten. Manchmal ist es besser, die Frage neu zu formulieren, zu klären und nicht erneut zu stellen. Der Benutzer wird wahrscheinlich dieselbe Frage gleich beantworten, nur lauter.

Sie sollten auch versuchen, verschiedene Optionen für Benutzerantworten bereitzustellen, und den semantischen Teil hervorheben. Je nach Situation ist es manchmal besser, einmal einen Fehler zugunsten einer falschen Erkennung der Antwort zu machen und den Benutzer nicht zu einer klaren Antwort zu zwingen. Wenn Sie den erwarteten Antworten etwas mit dem Muster hinzufügen (ja *), funktioniert es oft so, wie es sollte, und die Fälle, in denen uns gesagt wurde, dass Sie mich schon in Ruhe lassen sollen, sind eine Ausnahme, und in der Programmlogik wird nichts Kritisches passieren. Wenn wir natürlich eine genaue Antwort benötigen, aufgrund der falschen Erkennung irreversible Konsequenzen im System haben, sollten wir vom Benutzer eine klare Antwort erhalten. Falls wir uns der Antwort nicht sicher sind, können wir zusätzliche fehlende Informationen anfordern.

Jeder Interaktionsfall sollte separat betrachtet werden.

Im obigen Beispiel sehen wir uns mit der Tatsache konfrontiert, dass Benutzer nach einem kürzeren Gedicht oder einem bestimmten Charakter fragen ("Gibt es ein kürzeres?", "Sprechen wir über die Schneewittchen").

Hier haben wir Optionen - entweder neue Ebenen des Menüs hinzufügen, aber die „Menschlichkeit“ des Dialogs nicht vergessen oder auf solche Anfragen gemäß den Erwartungen des Benutzers reagieren, diese aber eindeutig nicht anbieten.

Unabhängig davon, wie wir diesen Dialogteil zu Beginn durchdacht haben, haben wir festgestellt, dass die tatsächliche Verwendung die Wünsche des Benutzers besser zeigt, da wir unsere erste Fähigkeit mit minimaler Funktionalität gestartet haben und schrittweise die Funktionen unserer Schneewittchen sowie Reaktionen auf die Anfragen hinzugefügt haben, die zuvor nicht von uns angefordert wurden.

Verwenden von APIs von Drittanbietern

Wir haben festgestellt, dass Entwickler manchmal auf die übermäßige Verwendung von APIs von Drittanbietern zurückgreifen, um einige nützliche Funktionen in ihren Fähigkeiten bereitzustellen. Vergessen Sie jedoch nicht, dass die Antwortzeit Ihres Webhooks 1,5 Sekunden nicht überschreiten sollte. Manchmal kann dies zu einer negativen Benutzererfahrung mit einer Fähigkeit führen, die entweder richtig antwortet oder schreibt: "Es ist ein Fehler aufgetreten."

Merkmale der Erkennung benannter Entitäten : Nicht alle Namen und Städte werden korrekt erkannt. Daher ist es ratsam, dies in Ihren Fähigkeiten anzugeben. Bisher mussten wir auf einige „Krücken“ zurückgreifen, um das Kind nicht eines nicht anerkannten Yandex-Namens der Kommunikation mit der Schneewittchen zu berauben. Berücksichtigen Sie dies sofort bei der Entwicklung, um Benutzer beispielsweise nicht mit den Namen Glory oder Hope zu verärgern. Wir hoffen, dass Yandex dies bald beheben wird.

Aussprache von Wörtern

Ein vorhandenes Testwerkzeug für die Sprachsynthese entspricht nicht immer dem, was Sie tatsächlich in Ihren Fähigkeiten haben. Seien Sie nicht faul, Mechanismen zum Hinzufügen von tts zu einer Ihrer Antworten bereitzustellen. Wir haben uns auf die Yandex-Engine verlassen, und einige der Sätze in unseren Fähigkeiten sind jetzt für eine bessere Aussprache schwer zu kennzeichnen (ohne größere Änderungen am Code). Wir werden für die Zukunft überlegen.

Einfache, aber effektive PHP- Funktionen für den Fuzzy-Wortvergleich haben viel geholfen:
like_text () , levenshtein () , andere Sprachen haben ähnliche Tools. Nun, und natürlich reguläre Ausdrücke, wo ohne sie.

Diese Funktionen ermöglichten es beispielsweise, die Antwort auf das Rätsel mit einer teilweise korrekten Antwort korrekt zu akzeptieren - nicht genau erkannt, in verschiedenen Deklinationen.

Dies wird natürlich für Spezialisten in NLP (Natural Language Processing) nicht ernst aussehen, aber auch hier ein Hinweis - für Anfänger.

Aktuelle Plattformschwächen


Ich werde kurz die Hauptansprüche von Entwicklern an Yandex Dialogs skizzieren, die mir im Chat aufgefallen sind.

Eine lange, oft unlogisch erscheinende Mäßigung. Es kommt vor, dass Ihre Fertigkeit nicht moderiert wird, weil Sie beispielsweise einen zu gebräuchlichen Fertigkeitsnamen haben, z. B. „Wetter auf der Krim“, obwohl Sie bereits eine Fertigkeit mit einem ähnlichen Namen haben - „Wetter in Sewerodwinsk“. Ich verstehe also, dass dies auf die Tatsache zurückzuführen ist, dass früher die Anforderungen an Namen und Aktivierungswörter einfacher waren und der Sohn der Freundin seiner Mutter Glück für den Kerl hatte und Sie keinen Erfolg haben. Suchen Sie nach einem anderen Ausdruck oder versuchen Sie es mit einer Marke .

Die Dokumentation ist nicht immer wahr. Die Plattform selbst entwickelt sich schnell, die Dokumentation hält nicht mit, wird manchmal von Benutzern und Vertretern von Yandex unterschiedlich interpretiert.

Die Plattform bietet bisher nur grundlegende Tools zum Debuggen von Fähigkeiten .
Wenn Sie dem Entwicklerfenster eine Fertigkeit hinzufügen, sollte Ihr Webhook bereits korrekt reagieren, da sonst nur ein Validierungsfehler auftritt. Welche Art von Fehler, welcher JSON gesendet wurde und welcher kam - werden wir nicht sehen. Wenn Sie es geschafft haben, die Fertigkeit hinzuzufügen, haben Sie ein minimales Bedienfeld mit dem Inhalt nur der letzten Anfrage-Antwort und das ist alles! Es gibt keine Möglichkeit, vor der Moderation zu überprüfen, wie dies tatsächlich auf dem Gerät funktioniert und wie es klingt. Es gibt einen Emulator eines Drittanbieters , der nicht in allen Browsern ziemlich instabil funktioniert und nicht dem aktuellen Protokoll entspricht.

Es gibt andere Wünsche und Anforderungen von Entwicklern, wie z. B.: Integration in ein Smart Home, Bestimmung des Gesprächspartners anhand seiner Stimme, Auswahl von Stimmen für Fähigkeiten mit besserer Generierung, Integration von Zahlungssystemen, Integration in ein Yandex-Konto, einschließlich der Arbeit mit einer Fähigkeit mit verschiedene Geräte unter einem Benutzer, durchdachtes System privater Fähigkeiten. Dies sind jedoch Funktionen, die sorgfältiges Studium und aus Sicherheitsgründen Bequemlichkeit erfordern. Ich denke, Yandex wird diese Möglichkeiten bieten können, wenn es sie auf der richtigen Ebene umsetzt. Probleme mit Moderation, Debugging und manchmal irrelevanter Dokumentation können Anfänger jedoch stark daran hindern, sich an die Plattform zu gewöhnen.

Es hilft, dass der Chat- Support ständig reagiert. Es wurde auch eine weniger erfahrene und reaktionsschnelle Community organisiert, die mir sehr geholfen hat und Ihnen helfen wird. Der Support reagiert auf viele Ansprüche recht schnell mit den Meldungen "zur Kenntnis genommen", "wir wissen über die Dokumentation Bescheid, wir werden sie beheben", "wir entscheiden über Moderation". Ok, wir freuen uns darauf.

Für einen schnellen Start empfehle ich Ihnen, eine private Fähigkeit zu veröffentlichen. Diese wird nun mit den Mindestanforderungen überprüft:

  • Die Fertigkeit wird auf den Namen und die Aktivierungsphrase überprüft, da die Basis allen Entwicklern gemeinsam ist.
  • Webhook sollte korrekt auf Anfragen reagieren .
  • Eine private Fähigkeit sollte melden, dass die Fähigkeit in ihrer Begrüßungsadresse geschlossen ist. Damit wird der Benutzer, der es versehentlich gestartet hat, benachrichtigt.

Chat-Tipp:

Sobald eine veröffentlichte Fähigkeit verwendet werden kann, um ihre anderen Dialoge im Vorgriff auf Moderation zu testen, indem Anforderungen von einem veröffentlichten Webhook an einen entwickelten weitergeleitet und nach Benutzer-ID gefiltert werden.

Fazit


Im Allgemeinen schienen die Sprachschnittstellen selbst ein sehr interessantes Thema zu sein, das in Zukunft immer gefragter wird. Ich habe vor, mich eingehender mit diesem Thema zu befassen und spezielle Literatur, Anweisungen und Tipps von ähnlichen ausländischen Diensten (Google, Amazon, Siri usw.) zu lesen.

Ich möchte Sie noch einmal an Alices Yandex-Schule erinnern, wenn sich jemand wie ich für dieses Thema interessiert hat.

Einige weitere verwandte Links:

Yandex Dialog Blog
Youtube-Kanal Yandex-Dialoge
Einfacher Dialog
Buchgestaltung von Sprachbenutzeroberflächen
Natasha: eine Bibliothek zum Extrahieren benannter Entitäten
Telegrammkanal, der über neue Fähigkeiten informiert
Inoffizieller Fähigkeitskatalog

Source: https://habr.com/ru/post/de434194/


All Articles