Ich erstelle einen einfachen Chatbot. Ich möchte die Informationen aus der Benutzerantwort erhalten. Ein Beispielszenario:
Bot : Hi, what is your name?
User: My name is Edwin.
Ich möchte den Namen Edwin aus dem Satz extrahieren. Der Benutzer kann jedoch auf verschiedene Arten reagieren, z
User: Edwin is my name.
User: I am Edwin.
User: Edwin.
Ich habe versucht, mich auf die Abhängigkeitsbeziehungen zwischen Wörtern zu verlassen, aber das Ergebnis ist nicht gut.
Irgendeine Idee, mit welcher Technik ich dieses Problem angehen könnte?
[AKTUALISIERT]
Ich habe mit der Erkennung benannter Entitäten zusammen mit einem Teil von Speech Tagger und Parser getestet. Ich fand heraus, dass das meiste Modell so trainiert ist, dass das erste Zeichen der Entität für den Personennamen oder das Eigenname Großbuchstaben sein muss. Dies mag für normale Dokumente zutreffen, ist jedoch für einen Chatbot irrelevant. Z.B
User: my name is edwin.
Die meisten NER haben dies nicht erkannt.
Antworten:
Möglicherweise können Sie eine Kombination aus Named Entity Recognition und Syntactical Analysis verwenden. Stellen Sie sich eine Situation vor, in der der Name Edward Philip Martel lautet, während das Wort Edwin sicherlich auftaucht . NER erkennt jedes Wort als separate Entitäten (daher 3 verschiedene Entitäten) - daher müssen Sie sie auf der Grundlage einer Logik aneinanderreihen. Wenn mehrere Namen vorhanden sind, kann es außerdem schwieriger werden, sie zu unterscheiden (z. B. John & Ramsey haben in Winterfell zu Abend gegessen ).
Hier würde auch die Analyse der Satzsyntax helfen (vorausgesetzt, der Endbenutzer gibt einen relativ kohärenten und korrekten Satz ein - wenn Slang und kurze Textformen verwendet werden, kann sogar das Stanford NLP nur bis zu einem gewissen Grad helfen).
Eine Möglichkeit, Syntaxanalyse / -analyse und NER zu nutzen, sind die folgenden Beispiele:
In jedem Fall (wie allgemein auch) wird der Entitätsname (Eigenname / Substantiv) in unmittelbarer Nähe eines Verbs zugeordnet. Wenn Sie also zuerst den Satz analysieren, um Verben zu bestimmen, und dann NER auf umgebende (+/- 1 oder 2) Wörter anwenden, haben Sie möglicherweise eine relativ gute Möglichkeit, das Problem zu lösen. Diese Lösung hängt in erster Linie von den Syntaxregeln ab, die Sie zur Identifizierung von NERs erstellen, sowie vom Fenster um die Verben.
quelle
Sie sollten die Erkennung benannter Entitäten verwenden, z. B. von NLTK, http://www.nltk.org/book/ch07.html <- dort finden Sie ein Verwendungsbeispiel. Es würde für Ihren beschriebenen Fall ganz gut funktionieren.
quelle
Dies kann leicht mit CRFs durchgeführt werden . Sie können die BIO- Codierung verwenden, um Ihren Satz zu markieren. Dann geben Sie es an CRFs weiter. Sie müssen nur ein paar markierte Sätze für Trainingszwecke wie folgt erstellen:
CRFsuite und CRF ++ sind einige der guten Implementierungen. CRFsuite verfügt über einen Python-Wrapper namens pycrfsuite , der recht einfach zu implementieren ist. Überprüfen Sie dieses Ipython-Notizbuch oder dieses Code-Snippet auf Github auf End-to-End-Implementierung von NER.
Überprüfen Sie dieses Open Source Chat-Bot-Projekt auf Github mit NER und Intent Classification in Python. Sie haben eine einfach zu bedienende Trainings-Benutzeroberfläche, in der Sie Ihren Bot trainieren können, um Informationen aus Sätzen zu extrahieren.
quelle
Um solche Aufgaben mit hoher Genauigkeit ausführen zu können, empfehle ich Ihnen, mit Hilfe von word2vec ein LSTM-Modell mit Worteinbettungen zu erstellen. LSTMs können helfen, Informationen aus dem Satz abzurufen und das nächste Zeichen oder Wort vorherzusagen, wenn eine Reihe von Wörtern bereits im Satz vorhanden ist.
quelle