webentwicklung-frage-antwort-db.com.de

Entitätsentnahme/-erkennung mit kostenlosen Werkzeugen während des Lucene-Index

Ich untersuche derzeit die Optionen, um Personennamen, Standorte, technische Wörter und Kategorien aus Text zu extrahieren (viele Artikel aus dem Internet), die dann in einen Lucene/ElasticSearch-Index eingespeist werden. Die zusätzlichen Informationen werden dann als Metadaten hinzugefügt und sollten die Genauigkeit der Suche erhöhen. 

Z.B. Wenn jemand nach "Wicket" fragt, sollte er entscheiden können, ob er Cricket-Sport oder Apache-Projekt meint. Ich habe versucht, dies mit kleinem Erfolg alleine umzusetzen. Jetzt habe ich viele Werkzeuge gefunden, aber ich bin mir nicht sicher, ob sie für diese Aufgabe geeignet sind und welche von ihnen gut in Lucene integriert werden können oder ob die Präzision der Entity-Extraktion hoch genug ist.

Meine Fragen:

  • Hat jemand Erfahrung mit einigen der oben aufgeführten Tools und deren Genauigkeit/Rückruf? Oder wenn Trainingsdaten erforderlich sind + verfügbar.
  • Gibt es Artikel oder Tutorials, in denen ich mit der Entity-Extraktion (NER) für jedes einzelne Tool beginnen kann?
  • Wie können sie in Lucene integriert werden?

Hier sind einige Fragen zu diesem Thema:

43
Karussell

Das Problem, dem Sie im Beispiel "Wicket" gegenüberstehen, heißt Entambilanzierung der Entität , nicht Entity Extraction/Recognition (NER). NER kann jedoch nur dann sinnvoll sein, wenn die Kategorien spezifisch genug sind. Die meisten NER-Systeme verfügen nicht über eine ausreichende Granularität, um zwischen einem Sport- und einem Softwareprojekt zu unterscheiden (beide Typen würden außerhalb der normalerweise bekannten Typen liegen: Person, Organisation, Ort).

Für die Disambiguierung benötigen Sie eine Wissensbasis, gegen die Entitäten disambiguiert werden. DBpedia ist aufgrund seiner breiten Abdeckung eine typische Wahl. Siehe meine Antwort für Wie verwendet man DBPedia, um Tags/Keywords aus dem Inhalt zu extrahieren? wo ich weitere Erklärungen gebe und mehrere Disambiguierungswerkzeuge erwähnt, darunter:

Diese Tools verwenden häufig eine sprachenunabhängige API wie REST, und ich weiß nicht, dass sie direkt Lucene-Support bieten, aber ich hoffe, dass meine Antwort für das Problem, das Sie lösen möchten, von Vorteil ist.

16
John Lehmann

Sie können OpenNLP verwenden, um Namen von Personen, Orten und Organisationen ohne Schulung zu extrahieren. Sie verwenden nur bereits vorhandene Modelle, die Sie hier herunterladen können: http://opennlp.sourceforge.net/models-1.5/

Ein Beispiel zur Verwendung eines dieser Modelle finden Sie unter: http://opennlp.Apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind

2
Abul Fayes

Rosoka ist ein kommerzielles Produkt, das eine Berechnung von "Salience" liefert, die die Bedeutung des Begriffs oder der Entität für das Dokument misst. Salience basiert auf dem Sprachgebrauch und nicht auf der Häufigkeit. Anhand der Salience-Werte können Sie das Hauptthema des Dokuments insgesamt bestimmen. Sie haben die Wahl zwischen XML oder JSON, was die Verwendung mit Lucene sehr einfach macht. Sie ist in Java geschrieben. Eine Amazon Cloud-Version ist unter https://aws.Amazon.com/marketplace/pp/B00E6FGJZ0 verfügbar. Die Kosten für das Ausprobieren betragen 0,99 USD/Stunde. In der Rosoka Cloud-Version sind nicht alle Java-API-Funktionen verfügbar, die der vollständige Rosoka bietet. Ja, beide Versionen führen eine Entambiguierung von Begriffen und Begriffen aus, die auf der sprachlichen Verwendung basiert.

Die Disambiguierung, ob Mensch oder Software, erfordert ausreichend kontextuelle Informationen, um den Unterschied feststellen zu können. Der Kontext kann innerhalb des Dokuments, innerhalb einer Corpus-Einschränkung oder im Kontext der Benutzer enthalten sein. Das erstere ist spezifischer und das spätere hat die größere potentielle Mehrdeutigkeit. Das heißt Wenn Sie das Schlüsselwort "Wicket" in eine Google-Suche eingeben, können Sie sich entweder auf Cricket, Apache-Software oder den Star Wars Ewok-Charakter (d. h. eine Entität) beziehen. Allgemeines Der Satz "Der Wicket wird vom Schlagmann bewacht" enthält inhaltliche Hinweise, um ihn als Objekt zu interpretieren. "Wicket Wystri Warrick war ein männlicher Ewok-Späher" sollte "Wicket" als Vornamen der Personeneinheit "Wicket Wystri Warrick" eingeben. "Welcome to Apache Wicket" hat die kontextabhängigen Hinweise, dass "Wicket" Teil eines Ortsnamens ist usw. 

0
mike

In letzter Zeit habe ich mit Stanford Crf Ner gespielt. Sie haben etliche Versionen veröffentlicht http://nlp.stanford.edu/software/CRF-NER.shtml

Das Gute ist, Sie können Ihren eigenen Klassifikator trainieren. Sie sollten dem Link folgen, der die Richtlinien zum Trainieren Ihrer eigenen NER enthält. http://nlp.stanford.edu/software/crf-faq.shtml#a In meinem Fall werden die genannten Entitäten leider nicht effizient aus dem Dokument extrahiert. Die meisten Entitäten bleiben unentdeckt. 

Nur für den Fall, dass Sie es nützlich finden. 

0
Abhro