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.
Réponses:
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 -
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.
la source
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.
la source
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,
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.
la source
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.
la source