Question

Je souhaite utiliser une bibliothèque d’analyse en langage naturel pour un simple bot de discussion. Je peux obtenir les balises Parts of Speech, mais je me pose toujours la question. Que faites-vous avec le POS? Si je connais les parties du discours, alors?

Je suppose que cela aiderait avec les réponses. Mais quelles structures de données et quelle architecture pourrais-je utiliser?

Était-ce utile?

La solution

Un étiqueteur de partie du discours attribue des étiquettes aux mots dans le texte saisi. Par exemple, le jeu de balises populaire Penn Treebank comporte environ 40 étiquettes, telles que "substantif pluriel", "adjectif comparatif", "verbe au passé", etc. Le tagueur résout également certaines ambiguïtés. Par exemple, de nombreuses formes de mots anglais peuvent être des noms ou des verbes, mais dans le contexte d’autres mots, leur partie du discours est sans ambiguïté. Ainsi, après avoir annoté votre texte avec des balises POS, vous pouvez répondre à des questions telles que: combien de noms ai-je?, Combien de phrases ne contiennent pas de verbe?, Etc.

Pour un chatbot, vous avez évidemment besoin de beaucoup plus que cela. Vous devez déterminer les sujets et les objets du texte et le verbe (prédicat) auquel ils s’attachent; vous devez résoudre les anaphores (à quel individu il ou elle pointe-t-elle), quelle est la portée de la négation et les quantificateurs (par exemple, chaque ), plus de 3 ), etc.

Idéalement, vous devez mapper votre texte d'entrée en une représentation logique (telle que la logique du premier ordre), ce qui vous permettrait de raisonner pour déterminer si deux phrases ont une signification équivalente, ou dans une relation d'implication, etc.

Bien qu'un POS-tagger mappe la phrase

Mary likes no man who owns a cat.

à une telle structure

Mary/NNP likes/VBZ no/DT man/NN who/WP owns/VBZ a/DT cat/NN ./.

vous auriez plutôt besoin de quelque chose comme ça:

SubClassOf(
   ObjectIntersectionOf(
      Class(:man)
      ObjectSomeValuesFrom(
         ObjectProperty(:own)
         Class(:cat)
      )
   )
   ObjectComplementOf(
      ObjectSomeValuesFrom(
         ObjectInverseOf(ObjectProperty(:like))
         ObjectOneOf(
            NamedIndividual(:Mary)
         )
      )
   )
)

Bien sûr, si les étiqueteurs POS obtiennent de la précision et des valeurs de rappel proches de 100%, un traitement automatique plus complexe produira beaucoup moins bien.

Une bonne bibliothèque Java pour la PNL est LingPipe . Cependant, cela ne va pas beaucoup plus loin que le marquage POS, la segmentation et la reconnaissance des entités nommées.

Autres conseils

Le traitement du langage naturel est large et profond, avec des racines remontant au moins aux années soixante. Vous pouvez commencer à lire sur linguistique informatique en général, génération de langage naturel , grammaires génératifs , Chaînes de Markov , chatterbots et ainsi de suite.

Wikipedia a une liste courte de bibliothèques que je suppose que vous avez peut-être vues. Java n'a pas une longue tradition en PNL, même si je n'ai pas consulté les bibliothèques de Stanford.

Je doute que vous obteniez des résultats très impressionnants sans plonger assez profondément dans la linguistique et la grammaire. Ce n’est pas la matière préférée de tout le monde (c’est ce que j’ai entendu dire - je me suis aimé!)

Je vais sauter beaucoup de détails et garder cela simple. Des parties du balisage vocal vous aident à créer un arbre d'analyse syntaxique à partir d'une phrase. Une fois que vous avez cela, vous essayez de définir un sens aussi clairement que possible. Le résultat de cette étape d’analyse vous aidera grandement à définir une réponse adaptée à votre chatterbot.

Une fois que vous avez une partie des balises de la parole, vous pouvez extraire, par exemple, tous les noms, de sorte que vous sachiez de façon approximative les objets ou objets dont une personne parle.

Pour vous donner un exemple:

Quelqu'un a dit " vous pouvez ouvrir une nouvelle fenêtre. " Lorsque vous avez les balises de point de vente, vous savez qu’elles ne parlent pas de can (comme dans conteneur , jar etc.), ce qui aurait même un sens. dans le contexte de ouvrir ), mais une fenêtre . Vous saurez également que open est un verbe.

Grâce à ces informations, votre robot de discussion peut générer une bien meilleure réponse qui n'aura rien à voir avec les ouvreurs de can , etc.

.

Remarque: vous n'avez pas besoin d'un analyseur pour obtenir les balises POS. Un simple étiqueteur de point de vente suffit. Un analyseur vous donnera encore plus d’informations (par exemple, quel est le sujet, quel est l’objet de la phrase?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top