2010-07-09 6 views
9

Ich habe einige einfache semantische Netzwerkimplementierungen und grundlegende Techniken zum Parsen der natürlichen Sprache studiert. Ich habe jedoch nicht viele Projekte gesehen, die versuchen, die Kluft zwischen den beiden zu überbrücken.Probabilistische Generierung von Semantischen Netzwerken

Betrachten wir zum Beispiel den Dialog:

"the man has a hat" 
"he has a coat" 
"what does he have?" => "a hat and coat" 

Ein einfaches semantisches Netz, auf dem Grammatikbaum Parsing der obigen Sätze basiert, könnte wie folgt aussehen:

the_man = Entity('the man') 
has = Entity('has') 
a_hat = Entity('a hat') 
a_coat = Entity('a coat') 
Relation(the_man, has, a_hat) 
Relation(the_man, has, a_coat) 
print the_man.relations(has) => ['a hat', 'a coat'] 

jedoch diese Implementierung übernimmt das Vorwissen, dass die Textsegmente "der Mann" und "er" sich auf die gleiche Netzwerkeinheit beziehen.

Wie würden Sie ein System entwerfen, das diese Beziehungen zwischen Segmenten eines semantischen Netzwerks "lernt"? Ich bin es gewohnt, über ML/NL-Probleme nachzudenken, basierend auf der Erstellung eines einfachen Trainingssatzes von Attribut/Wert-Paaren, und füttere es einem Klassifizierungs- oder Regressionsalgorithmus, aber ich habe Probleme, dieses Problem auf diese Weise zu formulieren.

Letztendlich scheint es, dass ich Wahrscheinlichkeiten über dem semantischen Netzwerk überlagern müsste, aber das würde eine Implementierung drastisch verkomplizieren. Gibt es einen Stand der Technik in dieser Richtung? Ich habe mir ein paar Bibliotheken angeschaut, wie NLTK und OpenNLP, und obwohl sie anständige Werkzeuge haben, um mit symbolischer Logik umzugehen und natürliche Sprache zu parsen, scheint keiner von ihnen irgendeine Art von proababliltischem Rahmen zu haben, um den einen in den anderen zu konvertieren.

Antwort

3

Es gibt ziemlich viel Geschichte hinter dieser Art von Aufgabe. Ihr bester Start ist wahrscheinlich Question Answering. Der allgemeine Ratschlag, den ich immer gebe, ist, dass wenn Sie eine stark eingeschränkte Domäne haben, in der Sie über all die Dinge, die erwähnt werden könnten, und über all die Arten, wie sie interagieren, Bescheid wissen, dann können Sie wahrscheinlich ziemlich erfolgreich sein. Wenn dies eher ein "Open-World" -Problem ist, wird es äußerst schwierig sein, etwas zu finden, das akzeptabel funktioniert.

Die Aufgabe, die Beziehung aus der natürlichen Sprache zu extrahieren, wird "Beziehungsextraktion" (komischerweise) und manchmal Faktenextraktion genannt. Dies ist ein ziemlich großes Forschungsgebiet, this guy hat eine Doktorarbeit darüber gemacht, wie viele andere auch. Wie Sie bemerkt haben, gibt es hier eine große Anzahl von Herausforderungen, wie Entity Detection, Anaphor Resolution, usw. Das bedeutet, dass es in den Entitäten und Beziehungen, die Sie extrahieren, wahrscheinlich zu viel "Rauschen" kommt.

Zur Darstellung von Fakten, die in einer Wissensbasis extrahiert wurden, neigen die meisten Menschen dazu, keinen probabilistischen Rahmen zu verwenden. Auf der einfachsten Ebene werden Entitäten und Beziehungen als Tripel in einer flachen Tabelle gespeichert. Ein anderer Ansatz besteht darin, eine Ontologie zu verwenden, um Struktur hinzuzufügen und eine Schlussfolgerung über die Fakten zu ermöglichen. Dies macht die Wissensbasis erheblich nützlicher, bringt jedoch viele Skalierbarkeitsprobleme mit sich. Was das Hinzufügen von Wahrscheinlichkeiten betrifft, so kenne ich das Projekt Prowl, das darauf abzielt, eine probabilistische Ontologie zu erstellen, aber es sieht für mich nicht sehr ausgereift aus.

Es gibt einige Forschung in probabilistischen relationalen Modellierung, meist in Markov Logic Networks an der University of Washington und Probabilstic Relational Models in Stanford und anderen Orten. Ich bin ein wenig außer Reichweite des Feldes, aber das ist ein schwieriges Problem, und soweit ich weiß, handelt es sich alles um Frühphasenforschung.Es gibt viele Probleme, hauptsächlich im Hinblick auf effiziente und skalierbare Inferenz.

Alles in allem ist es eine gute Idee und eine sehr vernünftige Sache zu tun. Es ist jedoch auch sehr schwer zu erreichen. Wenn Sie sich ein glattes Beispiel des Stands der Technik ansehen wollen (d. H. Was mit einer Menge Leute und Geld möglich ist), schauen Sie sich vielleicht PowerSet an.

+0

PR-OWL sieht interessant aus, in dem sie realisiert haben, dass ein nutzbares semantisches Netzwerk mit Unsicherheit umgehen muss. Wie auch immer, ich mochte OWL nie, weil mir nie klar war, wie sie Entitäten verdinglichen. Außerdem, wie Sie bereits erwähnt haben, scheint das Projekt an dieser Stelle nicht wirklich veröffentlicht zu sein. – Cerin

0

Ich bin nicht genau sicher, ob dies das ist, was Sie wollen, aber werfen Sie einen Blick auf natürliche Sprache Generation wikipedia, die "Umkehrung" der Analyse, konstruieren Ableitungen, die den gegebenen semantischen Einschränkungen entsprechen.

+0

Ja, danke, aber technisch ist das genau das Gegenteil von dem, was ich suche;) – Cerin

2

Interessante Frage, ich habe einige Arbeiten an einem stark typisierten NLP-Engine in C#: http://blog.abodit.com/2010/02/a-strongly-typed-natural-language-engine-c-nlp/ und haben vor kurzem begonnen, es mit einem Ontologie-Store zu verbinden.

Für mich sieht es aus wie das Problem hier ist wirklich: Wie parsen Sie die natürliche Sprache eingeben, um herauszufinden, dass "Er" ist die gleiche Sache wie "der Mann"? Zu der Zeit im Semantischen Netzwerk ist es zu spät: Sie haben die Tatsache verloren, dass Aussage 2 der Aussage 1 folgt und die Mehrdeutigkeit in Aussage 2 mit Aussage 1 aufgelöst werden kann. Eine dritte Beziehung nach der Tat hinzufügen, um zu sagen, dass "Er" und "der Mann" ist das gleiche ist eine andere Option, aber Sie müssen immer noch die Reihenfolge dieser Behauptungen verstehen.

Die meisten NLP-Parser scheinen sich auf die Analyse einzelner Sätze oder großer Textblöcke zu konzentrieren, aber weniger häufig auf die Verarbeitung von Konversationen. In meiner eigenen NLP-Engine gibt es eine Konversationshistorie, die es ermöglicht, einen Satz im Zusammenhang mit allen davor liegenden Sätzen zu verstehen (und auch die geparsten, stark typisierten Objekte, auf die sie sich bezogen). Die Art, wie ich damit umgehen würde, ist zu erkennen, dass "Er" im aktuellen Satz mehrdeutig ist und dann zurückblickt, um herauszufinden, wer die letzte männliche Person war, die erwähnt wurde.

In meinem Haus zum Beispiel könnte es Ihnen sagen, dass Sie einen Anruf von einer Nummer verpasst haben, die nicht in seiner Datenbank ist. Sie können eingeben "Es war John Smith" und es kann herausfinden, dass "Es" den Anruf bedeutet, der Ihnen gerade erwähnt wurde. Aber wenn du direkt nach dem Anruf "Tag it als Party Music" tippst, würde es immer noch zu dem Song aufgelöst, der gerade läuft, weil das Haus nach etwas sucht, das ITaggable ist.

+1

Das Problem wird allgemein Anapherauflösung genannt. Wenn Sie es nur darauf beschränken, 'er' und 'sie' aufzulösen, wird es Pronomenauflösung genannt. Es gibt Systeme, die das können, aber normalerweise nicht sehr gut. Das letzte Mal, als ich eines benutzt habe, hat es viele Fehler verursacht, weil es nicht sagen konnte, dass Barack Obama ein männlicher Name war. – Stompchicken

+0

Anaphora/Pronomen Auflösung ist ein Problem, aber das Problem ist allgemeiner. Wenn ich in zwei verschiedenen Diskursen auf "den Mann" rede, kann es sich auf dieselbe Entität beziehen oder nicht. In einer Open-World-Domäne gilt dieses Problem möglicherweise für jedes Wort in einem Satz. – Cerin

+0

In diesem Fall wird es normalerweise als (dokumentenübergreifende) Entitätsauflösung bezeichnet. Vor einiger Zeit gab es einen Wettbewerb: http://www.kdnuggets.com/news/2007/n08/10i.html Ich bin mir nicht sicher, was daraus wurde. – Stompchicken