Informationen aus dem Satz extrahieren

11

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.

Edwin
quelle
Dies erklärt, wie moderne Chat-Bots aufgebaut sind, aber ich würde es nicht einfach nennen. Sie können mehr erfahren, indem Sie nach "Beantwortung von Fragen" suchen.
Emre
Ich mag es, wie Leute, die Fragen stellen und Antworten erhalten, eine Antwort als akzeptabel markieren: P
Chewpakabra

Antworten:

7

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:

 1. User: Edwin is my name.
 2. User: I am Edwin.
 3. User: My name is Edwin.

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.

vsdaking
quelle
2
Möglicherweise implementieren Sie eine 'nicht deterministische endliche Automatik', bei der jeder Satz eine Antwort ist, die ein Muster akzeptiert. Einige Grammatiken sind auf so etwas implementiert. (NLP / Grammatik). Wenn Sie dies benötigen, schauen Sie sich das Framework stanfordnlp.github.io/CoreNLP
Intruso
5

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.

Chewpakabra
quelle
4

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:

 I am Edwin.
 O O  B-NAME

 You can call me Alfred
 O   O    O    O B-NAME

 My name is  Edwin   thomas
 O  O     O  B-NAME  I-NAME

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.

Alfred Francis
quelle
0

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.

enterML
quelle