2009-03-07 9 views
4

Ich bin auf der Suche nach einer natürlichen Sprache Parsing-Bibliothek für einen einfachen Chat-Bot. Ich kann die Parts of Speech Tags bekommen, aber ich frage mich immer. Was machst du mit dem POS? Wenn ich die Teile der Rede kenne, was dann?Natural Language Parsing, praktisches Beispiel

Ich denke, es würde mit den Antworten helfen. Aber welche Datenstrukturen und Architektur könnte ich verwenden?

Antwort

6

Ein Wortart-Tagger weist den Wörtern im Eingabetext Beschriftungen zu. Zum Beispiel hat das beliebte Penn Treebank-Tagset etwa 40 Labels, wie "Plural Substantiv", "Vergleichs Adjektiv", "Vergangenheitsform Verb", usw. Der Tagger löst auch einige Mehrdeutigkeiten. Zum Beispiel können viele englische Wortformen entweder Substantive oder Verben sein, aber im Zusammenhang mit anderen Wörtern ist ihr Sprachteil eindeutig. Also, nachdem Sie Ihren Text mit POS-Tags versehen haben, können Sie Fragen wie beantworten: wie viele Substantive habe ich ?, wie viele Sätze enthalten kein Verb? Usw.

Für einen Chatbot brauchen Sie offensichtlich viel mehr als Das. Sie müssen die Themen und Objekte im Text herausfinden und an welches Verb (Prädikat) sie sich anhängen; Sie müssen Anaphern lösen (die einzelnen tut ein er oder sie Punkt), was den Umfang der Negation und quantifiers (zB jeder, mehr als 3) usw.

Idealerweise Sie müssen den eingegebenen Text in eine logische Darstellung (z. B. Logik erster Ordnung) abbilden, damit Sie eine Schlussfolgerung einbringen können, um zu bestimmen, ob zwei Sätze in der Bedeutung oder in einer Folgebeziehung usw. äquivalent sind.

While Ein POS-Tagger würde den Satz

abbilden
Mary likes no man who owns a cat. 

auf eine solche Struktur

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

Sie lieber so etwas wie dieses brauchen:

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

Natürlich, während POS-Tagger Precision und Recall-Werte nahe 100%, komplexer werden die automatische Verarbeitung wird viel schlechter abschneiden.

Eine gute Java-Bibliothek für NLP ist LingPipe.Es geht jedoch nicht viel über POS-Tagging, Chunking und die Erkennung von benannten Entitäten hinaus.

+1

"Sie würden eher so etwas brauchen:" In Ihrem Beitrag, welche Syntax ist das und was sind Sie beschreibend. –

+1

Dies ist OWL 2 (siehe: http://www.w3.org/2007/OWL/wiki/Syntax). OWL ist ein Fragment der Logik erster Ordnung. Im Kontext dieser Antwort ist es nur ein Beispiel für ein Format, in das man natürlichsprachliche Sätze umwandeln kann, um im Gegenzug eine automatische Argumentationsfähigkeit zu erhalten. – Kaarel

+0

Zwischen einem POS-Tagger und dem logischen Auszug eines Satzes gibt es einen Zwischenschritt eines Parsers, z. B. eines Diagrammparsers, der das Chunking der POS-markierten Wörter durchführt. Um die logische Form zu extrahieren, müssen wir die Argumentabhängigkeiten bestimmen. Und später etwas Logikverarbeitung. –

5

Verarbeitung in natürlicher Sprache ist weit und tief, mit Wurzeln, die mindestens bis in die 60er zurückgehen. Sie könnten anfangen zu lesen auf computational linguistics im Allgemeinen, natural language generation, generative grammars, Markov chains, chatterbots und so weiter.

Wikipedia hat eine short list of libraries die ich vermute, dass Sie vielleicht gesehen haben. Java hat keine lange Tradition im NLP, obwohl ich mir die Stanford-Bibliotheken nicht angesehen habe.

Ich bezweifle, dass Sie sehr beeindruckende Ergebnisse erhalten werden, ohne tief in die Linguistik und Grammatik einzutauchen. Nicht jedermanns Lieblingsfach in der Schule (oder wie ich gehört habe - liebte mich selbst!).

3

Ich werde viele viele Details überspringen und dies einfach halten. Mithilfe von Teilen der Sprachmarkierung können Sie aus einem Satz eine parse tree erstellen. Sobald Sie dies haben, versuchen Sie, eine Bedeutung so eindeutig wie möglich zu erkennen. Das Ergebnis dieses Parsing-Schritts wird Ihnen sehr dabei helfen, eine passende Antwort für Ihren Chatterbot zu gestalten.

2

Sobald Sie einen Teil der Rede-Tags haben, können Sie zum Beispiel alle Substantive extrahieren, so dass Sie ungefähr wissen, über welche Dinge oder Objekte jemand spricht.

Sie ein Beispiel geben:

Jemand sagt „Sie ein neues Fenster öffnen kann.“ Wenn Sie die POS-Tags haben wissen, dass sie nicht über eine können sprechen (wie in Behälter , jar usw., was im Zusammenhang mit offen), aber ein Fenster Sinn machen würde. Sie werden auch wissen, dass open ein Verb ist.

Mit diesen Informationen können Sie Ihre Chat-Bot eine viel bessere Antwort erzeugen, die nichts mit Dosenöffner zu tun haben usw.

Hinweis: Sie müssen nicht einen Parser POS-Tags zu erhalten. Ein einfacher POS-Tagger genügt. Ein Parser wird Ihnen noch mehr Informationen geben (zB was ist das Thema, was das Objekt des Satzes?)

Verwandte Themen