web-dev-qa-db-fra.com

Identification de l'intention Python NLP

Je suis novice en Python et en PNL, et mon problème est de savoir comment déterminer l’intention des questions données. Par exemple, j’ai des séries de questions et de réponses comme celle-ci:

question:What is NLP; answer: NLP stands for Natural Language Processing

J'ai fait quelques POS tagger de base sur des questions données dans la question ci-dessus que j'ai entety [NLP] J'ai aussi fait String Matchingen utilisant cet algo

En gros, j'ai rencontré les problèmes suivants:

  1. Si l'utilisateur demande what is NLP, il retournera les réponses exactes
  2. Si l'utilisateur demande meaning of NLP alors il échoue
  3. Si l'utilisateur demande Definition of NLP alors il échoue
  4. Si l'utilisateur demande What is Natural Language Processing alors il échoue

Alors, comment identifier l’intention de l’utilisateur de telle ou telle question, car dans mon cas, la correspondance de chaîne ou de modèle ne fonctionne pas. 

5
Yogesh

DeepPavlov permet d’identifier l’intention, il prend en charge la classification multi-étiquettes. Vous trouverez plus d’informations dans http://docs.deeppavlov.ai/en/master/components/classifiers.html La page de démonstration https://demo.ipavlov.ai

7
Vlad P

Utilisez ceci https://github.com/RasaHQ/rasa_nlu Un bon cadre pour l'identification d'intention et l'extraction d'entités. Il permet également une formation de modèle simple.

6
Saurabh Yadav

vous pouvez utiliser spacy pour former un analyseur personnalisé pour la sémantique des intentions de discussion.

le composant d'analyse de spaCy peut être utilisé pour apprendre à prévoir n'importe quel type d'arborescence sur votre texte d'entrée. Vous pouvez également prévoir des arborescences sur des documents entiers ou des journaux de discussion, avec des connexions entre les racines de phrases utilisées pour annoter la structure du discours. 

par exemple: "montrez-moi le meilleur hôtel de berlin"

('show', 'ROOT', 'show')
('best', 'QUALITY', 'hotel') --> hotel with QUALITY best
('hotel', 'PLACE', 'show') --> show PLACE hotel
('berlin', 'LOCATION', 'hotel') --> hotel with LOCATION berlin

Pour former le modèle, vous avez besoin de données dans ce format:

# training data: texts, heads and dependency labels
# for no relation, we simply chose an arbitrary dependency label, e.g. '-'
TRAIN_DATA = [
    ("find a cafe with great wifi", {
        'heads': [0, 2, 0, 5, 5, 2],  # index of token head
        'deps': ['ROOT', '-', 'PLACE', '-', 'QUALITY', 'ATTRIBUTE']
    }),
    ("find a hotel near the beach", {
        'heads': [0, 2, 0, 5, 5, 2],
        'deps': ['ROOT', '-', 'PLACE', 'QUALITY', '-', 'ATTRIBUTE']
    })]

TEST_DATA:
input : show me the best hotel in berlin
output: [
      ('show', 'ROOT', 'show'),
      ('best', 'QUALITY', 'hotel'),
      ('hotel', 'PLACE', 'show'),
      ('berlin', 'LOCATION', 'hotel')
    ]

pour plus de détails, veuillez consulter le lien ci-dessous. https://spacy.io/usage/examples#intent-parser

2
manish Prasad

Pour une connaissance générale et une liste d'excellents exemples de systèmes basés sur des questions et des réponses, vous trouverez ci-dessous le classement des PNL du secteur: https://rajpurkar.github.io/SQuAD-Explorer/ Ce processus peut en réalité devenir vraiment compliqué en fonction de la complexité et de la portée de votre domaine. Par exemple, des approches plus avancées appliquent le premier ordre + la logique propositionnelle et les réseaux neuronaux complexes. L'une des solutions les plus impressionnantes que j'ai vue est le flux d'attention bidirectionnel: https://github.com/allenai/bi -att-flow , la démo est ici: http://beta.moxel.ai/models/strin/bi-att-flow/latest

Dans la pratique, j’ai constaté que si votre corpus contient des termes plus spécifiques à un domaine, vous devrez créer votre propre dictionnaire. Dans votre exemple, "NLP" et "Natural Language Processing" sont la même entité. Vous devez donc l'inclure dans un dictionnaire. 

Fondamentalement, considérez-vous vraiment chanceux si vous pouvez vous en tirer avec une approche purement statistique comme la distance cosinus. Vous devrez probablement également combiner une approche basée sur le Lexicon. Tous les projets de PNL que j'ai réalisés ont une terminologie et un "argot" spécifiques à un domaine. J'ai donc utilisé des méthodes combinées, à la fois statistiques et basées sur le lexique, en particulier pour l'extraction de caractéristiques telles que les sujets, les intentions et les entités.

1
saucy wombat

Vous pouvez utiliser le modèle d'apprentissage approfondi avec un modèle d'intégration Word et un modèle d'intégration de caractères. Vous pouvez utiliser RNN ou CNN (selon moi, CNN est plus rapide que RNN est plus robuste pour la PNL). Vous pouvez utiliser n’importe quel modèle Word2vec comme google-news, spacy, gant, etc.

0
Joy

Je pense que cela dépend vraiment de la manière dont vous cadrez votre problème et votre domaine. Ici est un ensemble de données qui pourrait être utile pour la classification du type de question et ici est une implémentation. 

Ceci étant dit, je pense que vous devrez annoter votre texte, éventuellement par Chunker , SRL , etc. et extraire un motif intéressant. 

0
Daniel

Utilisez des modèles d'apprentissage en profondeur, comme CNN avec Word2Vec.

Ces modèles pourront s’adapter aux variations des phrases que vous mentionnez.

Découvrez la mise en œuvre de Keras ici - https://github.com/sarweshsuman/keras-text-classification

0
Sarwesh Suman