Ich schreibe eine Smart-Home-Software für meinen Bachelor-Abschluss, die nur das eigentliche Haus simuliert, aber ich stecke im NLP-Teil des Projekts fest. Die Idee ist, dass der Klient Spracheingaben (bereits erledigt) hört, sie in Text umwandelt (fertig) und an den Server sendet, der all das schwere Heben / Entscheiden durchführt.
Also alle meine Eingaben werden ziemlich kurz sein (wie "Bitte schalten Sie die Veranda Licht"). Darauf aufbauend möchte ich entscheiden, welches Objekt zu handeln und wie zu handeln ist. Also habe ich mir ein paar Dinge ausgedacht, um etwas Effizientes zu schreiben.
Ich hoffe, die Frage ist einzigartig genug (ich habe NLP-Fragen zu SO gesehen, keiner hat wirklich geholfen), dass es nicht geschlossen wird.
Ich bin kein Wegbereiter für NLP (ich liebe es aber), aber lasst mich meine Hand an dieser spielen. Für Ihr Projekt würde ich vorschlagen, dass Sie Stanford Parser
durchgehenVon deiner Problemdefinition denke ich, dass du nichts anderes als Verben und Substantive brauchst. SP generiert POS (Teil der Sprachvariablen), mit denen Sie die Wörter löschen können, die Sie nicht benötigen.
Dafür kann ich mir keine bessere Option vorstellen als das, was Sie gerade im Sinn haben.
Auch dafür können Sie die grammatische Abhängigkeitsstruktur von SP verwenden und ich bin ziemlich sicher, dass es gut genug ist, um dieses Problem anzugehen.
Hier liegt Ihr Forschungsteil. Ich denke, Sie können genug Muster mit GD- und POS-Tags finden, um einen Algorithmus für Ihr Problem zu finden. Ich bezweifle kaum, dass jeder Algorithmus effizient genug wäre, um jeden Satz von Eingabesätzen zu verarbeiten (strukturiert + unstrukturiert), aber etwas, das mehr als 85% genau ist, sollte gut genug für Sie sein.
Wenn Sie nicht viel Zeit mit dem NLP-Problem verbringen müssen, können Sie die Wit API ( Ссылка ) verwenden, die natürlich abbildet Sprachsätze für JSON:
Es basiert auf maschinellem Lernen, daher müssen Sie Beispiele für Sätze und JSON-Ausgabe bereitstellen, um es an Ihre Bedürfnisse anzupassen. Es sollte viel robuster sein als grammatikbasierte Ansätze, insbesondere weil die Voice-to-Speech-Engine Fehler machen könnte, die Ihre Grammatik sprengen würden (aber das maschinelle Lernmodul kann immer noch die Bedeutung des Satzes verstehen).
Zuerst würde ich eine Liste aller möglichen Befehle erstellen (nicht jede Möglichkeit, einen Befehl zu sagen, sondern nur die eigentliche Funktion selbst: "Küchenlicht an" und "Licht in der Küche einschalten" sind derselbe Befehl) basierend auf der tatsächlichen Funktionalität, die das Smart House zur Verfügung stellt. Ich nehme an, dass es eine diskrete Anzahl von diesen in der Größenordnung von nicht mehr als Hunderten gibt. Weisen Sie jeder Art von Identifikationscode zu.
Ihre Aufgabe besteht darin, eine Eingabe von:
zuzuordnenzu einer Ausgabe eines Konfidenzniveaus (0.0 bis 1.0) für jeden Befehl.
Das System führt dann den besten Übereinstimmungsbefehl aus, wenn die Konfidenz über einem einstellbaren Schwellenwert liegt (sagen wir über 0,70).
Von hier wird es eine maschinelle Lernanwendung. Es gibt eine Reihe von verschiedenen Ansätzen (und außerdem können Ansätze miteinander kombiniert werden, indem sie basierend auf Merkmalen der Eingabe miteinander konkurrieren).
Zunächst würde ich das NLP-Buch von Jurafsky / Manning aus Stanford bearbeiten. Es ist eine gute Übersicht über aktuelle NLP-Algorithmen.
Von dort erhalten Sie einige Ideen, wie das Mapping erlernt werden kann. Wichtiger noch, wie die natürliche Sprache in eine mathematische Struktur für maschinelles Lernen zerlegt werden kann.
Sobald der Text semantisch analysiert wurde, wäre der einfachste ML-Algorithmus, der zuerst versucht wird, der überwachte. Um Trainingsdaten zu generieren, benutzen Sie eine normale GUI, sprechen Sie Ihren Befehl, und drücken Sie den entsprechenden Befehl manuell. Dies bildet einen einzigen überwachten Trainingsfall. Machen Sie eine große Anzahl von diesen. Legen Sie etwas zum Testen beiseite. Es ist auch ungelernte Arbeit, so dass andere Menschen helfen können. Sie können diese dann als Trainingssatz für Ihren ML-Algorithmus verwenden.