Unüberwachtes Lernen von Funktionen für NER


11

Ich habe das NER-System unter Verwendung des CRF-Algorithmus mit meinen handgefertigten Funktionen implementiert, die ziemlich gute Ergebnisse lieferten. Die Sache ist, dass ich viele verschiedene Funktionen verwendet habe, einschließlich POS-Tags und Lemmas.

Jetzt möchte ich das gleiche NER für verschiedene Sprachen erstellen. Das Problem hier ist, dass ich keine POS-Tags und Lemmas verwenden kann. Ich fing an, Artikel über Deep Learning und unbeaufsichtigtes Feature-Learning zu lesen.

Meine Frage ist:

Ist es möglich, Methoden für unbeaufsichtigtes Lernen von Funktionen mit dem CRF-Algorithmus zu verwenden? Hat jemand dies versucht und ein gutes Ergebnis erzielt? Gibt es einen Artikel oder ein Tutorial zu diesem Thema?

Ich verstehe diese Art der Feature-Erstellung immer noch nicht vollständig, daher möchte ich nicht zu viel Zeit für etwas aufwenden, das nicht funktioniert. Jede Information wäre also wirklich hilfreich. Ein ganzes NER-System basierend auf Deep Learning zu erstellen, ist vorerst etwas zu viel.

Antworten:


5

Ja, es ist durchaus möglich, unbeaufsichtigtes Lernen mit dem CRF-Modell zu kombinieren. Insbesondere würde ich empfehlen, dass Sie die Möglichkeit prüfen , word2vec- Funktionen als Eingaben für Ihre CRF zu verwenden.

Word2vec trainiert a, um zwischen Wörtern zu unterscheiden, die für einen bestimmten Kontext geeignet sind, und Wörtern, die zufällig ausgewählt werden. Ausgewählte Gewichte des Modells können dann als dichte Vektordarstellung eines bestimmten Wortes interpretiert werden.

Diese dichten Vektoren haben die ansprechende Eigenschaft, dass Wörter, die semantisch oder syntaktisch ähnlich sind, ähnliche Vektordarstellungen haben. Grundlegende Vektorarithmetik enthüllt sogar einige interessante gelernte Beziehungen zwischen Wörtern.
Zum Beispiel ergibt Vektor ("Paris") - Vektor ("Frankreich") + Vektor ("Italien") einen Vektor, der dem Vektor ("Rom") ziemlich ähnlich ist.

Auf hoher Ebene können Sie sich word2vec-Darstellungen ähnlich wie LDA- oder LSA-Darstellungen vorstellen, in dem Sinne, dass Sie einen spärlichen Eingabevektor in einen dichten Ausgabevektor konvertieren können, der Wortähnlichkeitsinformationen enthält.

Für diese Angelegenheit sind LDA und LSA auch gültige Optionen für unbeaufsichtigtes Lernen von Merkmalen - beide versuchen, Wörter als Kombinationen von "Themen" darzustellen und dichte Wortdarstellungen auszugeben.

Für englischen Text verteilt Google word2vec-Modelle, die auf einem riesigen Google News-Datensatz mit 100 Milliarden Wörtern trainiert wurden. Für andere Sprachen müssen Sie jedoch Ihr eigenes Modell trainieren.


Hey, Faust, ich möchte dir für deine Antwort danken. Ich habe noch eine Frage. Wortvektoren, die vom word2vec-Algorithmus zurückgegeben werden, haben Gleitkommawerte, sodass Wörter wie groß und größer Vektoren haben, die im Vektorraum nahe beieinander liegen, aber die Werte von Vektoren können völlig unterschiedlich sein. Zum Beispiel groß = [0,1, 0,2, 0,3] und größer = [0,11, 0,21, 0,31]. Ist das nicht ein Problem für den CRF-Algorithmus, weil dieser Algorithmus sie als nicht ähnlich behandeln würde? Gibt es eine zusätzliche Verarbeitung, die durchgeführt werden muss, bevor diese Wortvektoren in CRF verwendet werden? Ich hoffe meine Frage ist klar genug.
MaticDiba

4

In diesem 2014 erschienenen Artikel ( GitHub ) verglichen die Autoren mehrere Strategien zur Integration von Worteinbettungen in ein CRF-basiertes NER-System, einschließlich dichter Einbettung, binerisierter Einbettung, Cluster-Einbettung und einer neuartigen Prototypmethode . Die direkte Verwendung dichter Vektoren, wie von vlad vorgeschlagen, ist der einfachste Weg, aber auch der am wenigsten wirksame bei Mehrfachauswertungen.

Ich habe die Prototyp-Idee in meinem domänenspezifischen NER-Projekt implementiert und sie funktioniert für mich ziemlich gut.


3

Ich bin nur 5 Monate zu spät, aber mit CRFSuite können Sie diese Float-Funktionen tatsächlich als Zahlen und nicht als Zeichenfolgen verwenden. Dazu müssen Sie nur eine eindeutige Beschriftung für jede Dimension erfinden und dann ein ":" gefolgt vom Wert hinzufügen.

Zum Beispiel wird ein Wort "Dschungel" in 5 Dimensionen dargestellt: 0,1 0,4 0,8 0,2 0,9

Dann würde CRFSuite dieses Wort + Feature wie folgt annehmen:

ETIKETT f1: 0,1 f2: 0,4 f3: 0,8 f4: 0,2 f5: 0,9

Dabei ersetzen Sie natürlich "LABEL" durch eine tatsächliche Zeichenfolge und trennen alle Leerzeichen durch Tabulatoren (das ist das Format für CRFSuite).

Ich bin mir jedoch nicht sicher für andere Pakete.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.