Natürliche Sprachverarbeitung für Smart Homes

8

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.

  1. Befreien Sie sich von unnötigen Wörtern (im vorherigen Beispiel "bitte" und "das" sind Wörter, die die Bedeutung dessen, was getan werden muss, nicht ändern, aber wenn ich sage "schalte mein Lichter ", hat mein" eine ziemlich wichtige Bedeutung).
  2. Befasse dich mit Synonymen ("Licht einschalten" sollte dasselbe tun wie "Lichter aktivieren" - ich weiß, dass es ein dummes Beispiel ist). Ich schätze, die einzige Option ist eine Art Wörterbuch (XML vielleicht) und nur eine Liste möglicher Wörter für ein bestimmtes Objekt im Haus.
  3. Das Verb und das Thema erkennen. "Einschalten" ist das Verb und "Lichter" ist das Thema. Ich brauche einen guten Weg, dies zu erkennen.
  4. Allgemeine Implementierung. Wie werden diese Dinge in der Regel in Algorithmen entwickelt? Ich habe nur einen Artikel über NLP in Smart Homes gefunden, der sehr vage war (und schlechtes Englisch hatte). Alle Links sind willkommen.

Ich hoffe, die Frage ist einzigartig genug (ich habe NLP-Fragen zu SO gesehen, keiner hat wirklich geholfen), dass es nicht geschlossen wird.

    
Eduard Luca 09.09.2013, 21:35
quelle

3 Antworten

3

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

durchgehen
  1. Von 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.

  2. Dafür kann ich mir keine bessere Option vorstellen als das, was Sie gerade im Sinn haben.

  3. 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.

  4. 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.

Prateek 09.09.2013, 21:56
quelle
6

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).

    
Blacksad 10.09.2013 20:59
quelle
3

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:

zuzuordnen
  • ein Satz englischen Textes
  • Ort des Sprechers
  • Tageszeit, Wochentag
  • andere Eingabedaten

zu 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.

    
Andrew Tomazos 10.09.2013 00:24
quelle

Tags und Links