Extraire des informations de la phrase

11

Je crée un chatbot simple. Je souhaite obtenir les informations de la réponse de l'utilisateur. Un exemple de scénario:

Bot : Hi, what is your name?
User: My name is Edwin.

Je souhaite extraire le nom Edwin de la phrase. Cependant, l'utilisateur peut répondre de différentes manières telles que

User: Edwin is my name.
User: I am Edwin.
User: Edwin. 

J'ai essayé de m'appuyer sur les relations de dépendance entre les mots mais le résultat ne marche pas bien.

Une idée sur quelle technique je pourrais utiliser pour résoudre ce problème?

[MIS À JOUR]

J'ai testé avec la reconnaissance d'entité nommée avec une partie de l'étiqueteur de parole et de l'analyseur. J'ai découvert que la plupart des modèles sont formés d'une manière telle que le premier caractère de l'entité pour le nom de la personne ou le nom propre doit être en majuscules. Cela peut être vrai pour un document normal, mais cela n'est pas pertinent pour un chatbot. Par exemple

User: my name is edwin.

La plupart des NER ne l'ont pas reconnu.

edwin
la source
Cela explique comment les robots de discussion modernes sont construits, mais je n'appellerais pas cela simple. Vous pouvez en savoir plus en recherchant «réponse aux questions».
Emre
J'aime tellement la façon dont les gens qui posent des questions et reçoivent des réponses marquent une réponse comme acceptable: P
chewpakabra

Réponses:

7

Vous pouvez éventuellement utiliser une combinaison de reconnaissance d'entité nommée et d'analyse syntaxique - alors que le mot Edwin est certainement soutenu, imaginez une situation où le nom est Edward Philip Martel . NER détecte chaque mot comme une entité distincte (donc 3 entités différentes) - ainsi, vous devrez de toute façon les enchaîner en fonction d'une logique. De plus, dans le cas où plusieurs noms sont présents, il peut être plus difficile de lever l'ambiguïté (par exemple, John et Ramsey ont dîné à Winterfell ).

C'est là que l'analyse de la syntaxe de la phrase serait également utile (en supposant que l'utilisateur final entre une phrase relativement cohérente et correcte - si l'argot et des formes courtes de texte sont utilisés, même le PNL de Stanford peut aider jusqu'à une certaine mesure seulement).

Une façon de tirer parti de l'analyse / analyse syntaxique et du NER est dans les exemples suivants -

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

Dans chacun des cas (comme c'est généralement le cas également), le nom d'entité (nom propre / nom propre) est associé à proximité d'un verbe. Par conséquent, si vous analysez d'abord la phrase pour déterminer les verbes, puis appliquez NER aux mots environnants (+/- 1 ou 2), vous pouvez avoir un moyen relativement décent de résoudre le problème. Cette solution dépendrait principalement des règles de syntaxe que vous créez pour identifier les NER ainsi que de la fenêtre autour des verbes.

vsdaking
la source
2
Vous implémenterez peut-être un «automate fini non déterministe», où chaque phrase est une réponse acceptée par un modèle. Certaines grammaires sont implémentées sur quelque chose comme ça. (PNL / Grammaire). Si vous avez besoin de savoir comment faire cela, regardez le framework stanfordnlp.github.io/CoreNLP
Intruso
5

Vous devez utiliser la reconnaissance d'entité nommée, par exemple à partir de NLTK, http://www.nltk.org/book/ch07.html <- vous pouvez y trouver un exemple d'utilisation. Cela fonctionnerait très bien pour votre cas décrit.

chewpakabra
la source
4

Cela peut être fait facilement avec les CRF . Vous pouvez utiliser l' encodage BIO pour baliser votre phrase. Passez-le ensuite aux CRF. Il vous suffit de créer quelques phrases balisées à des fins de formation comme suit,

 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 et CRF ++ sont quelques-unes des bonnes implémentations. CRFsuite a un wrapper python appelé pycrfsuite , qui est assez facile à implémenter. Consultez ce bloc-notes ipython ou cet extrait de code sur github pour une implémentation de bout en bout de NER.

vérifiez ce projet de bot de chat Open Source sur github avec NER et Intent Classification écrit en python. Ils ont une interface de formation facile à utiliser où vous pouvez entraîner votre bot à extraire des informations des phrases.

Alfred Francis
la source
0

Afin d'effectuer de telles tâches avec une grande précision, je vous suggère de construire un modèle LSTM avec des incorporations de mots à l'aide de word2vec. Les LSTM peuvent aider à récupérer des informations de la phrase ainsi qu'à prédire le caractère ou le mot suivant étant donné qu'un ensemble de mots est déjà présent dans la phrase.

enterML
la source