2009-03-07 8 views
4

Je cherche à utiliser une bibliothèque d'analyse de langage naturel pour un simple robot de discussion. Je peux obtenir les balises Parts of Speech, mais je me demande toujours. Que faites-vous avec le POS. Si je connais les parties du discours, alors?Analyse syntaxique en langage naturel, exemple pratique

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

Répondre

6

Un étiqueteur de partie du discours affecte des étiquettes aux mots dans le texte d'entrée. Par exemple, le populaire jeu de tags Penn Treebank comporte quelque 40 étiquettes, telles que «nom pluriel», «adjectif comparatif», «verbe passé», etc. Le tagger 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 des 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 comme: combien de noms dois-je ?, combien de phrases ne contiennent pas un verbe ?, etc.

Pour une chatbot, vous devez évidemment beaucoup plus cette. Vous devez comprendre les sujets et les objets dans le texte, et le verbe (prédicat) auquel ils s'attachent; vous devez résoudre anaphores (ce qui fait un individu il ou elle le point à), quelle est la portée de la négation et de quantificateurs (par exemple tous les , plus de 3), etc.

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

un POS-tagger cartographierait 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 préférez besoin de quelque chose comme ceci:

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

Bien sûr, alors que POS-Tagger obtenir des valeurs de précision et de rappel de près de 100%, plus complexe le traitement automatique sera bien pire.

Une bonne bibliothèque Java pour NLP est LingPipe.Cependant, il ne va pas beaucoup au-delà du marquage POS, du découpage et de la reconnaissance d'entités nommées.

+1

"vous préférez quelque chose comme ceci:" Dans votre message, quelle est la syntaxe et qu'est-ce que vous êtes décrivant. –

+1

Ceci est OWL 2 (voir: http://www.w3.org/2007/OWL/wiki/Syntax). OWL est un fragment de la logique du premier ordre. Dans le contexte de cette réponse, il s'agit simplement d'un exemple de format dans lequel on pourrait convertir des phrases en langage naturel, pour obtenir une capacité de raisonnement automatique en retour. – Kaarel

+0

Entre un étiqueteur POS et l'extrait logique d'une phrase, il y a une étape intermédiaire d'un analyseur, par exemple un analyseur de diagramme, qui effectue la segmentation des mots étiquetés POS. Et puis, pour extraire la forme logique, nous devons déterminer les dépendances d'arguments. Et plus tard, un peu de traitement logique. –

5

Le traitement du langage naturel est vaste et profond, avec des racines remontant au moins aux années 60. Vous pouvez commencer à lire sur computational linguistics en général, natural language generation, generative grammars, Markov chains, chatterbots et ainsi de suite.

Wikipédia a un short list of libraries que je suppose que vous pourriez avoir vu. Java n'a pas une longue tradition en PNL, bien que je n'ai pas regardé les bibliothèques de Stanford.

Je doute que vous obtiendrez des résultats très impressionnants sans plonger assez profondément dans la linguistique et la grammaire. Ce n'est pas le sujet d'école préféré de tout le monde (ou du moins j'ai entendu dire - love'em meself!).

3

Je vais sauter beaucoup de détails et rester simple. Des parties de l'étiquetage de la parole vous aident à créer un parse tree sur une phrase. Une fois que vous avez cela, vous essayez de faire une signification aussi clairement que possible. Le résultat de cette étape d'analyse vous aidera grandement à définir une réponse adaptée à votre chatterbot.

2

Une fois que vous avez une partie de balises vocales, vous pouvez extraire, par exemple, tous les noms, vous savez à peu près ce que les choses ou les objets que quelqu'un parle.

Pour vous donner un exemple:

Quelqu'un dit « vous pouvez ouvrir une nouvelle fenêtre. » Quand vous avez les balises POS vous savez qu'ils ne parlent pas d'un peut (comme dans contenant , jar etc, ce qui aurait même du sens dans le contexte de ouvrir), mais une fenêtre . Vous saurez également que ouvert est un verbe.

Avec ces informations, votre chat bot peut générer une bien meilleure réponse qui n'a rien à voir avec ouvre-boîtes etc.

Remarque: Vous n'avez pas besoin d'un analyseur pour obtenir des étiquettes POS. Un simple tagueur POS est suffisant. Un analyseur vous donnera encore plus d'informations (par exemple, quel est le sujet, quel est l'objet de la phrase?)

Questions connexes