Wie verwende ich eine Worteinbettung, um ein Dokument einem Feature-Vektor zuzuordnen, der für die Verwendung mit überwachtem Lernen geeignet ist?
Ein Wort Einbettungs bildet jedes Wort auf einen Vektor v ∈ R d , wobei d einige nicht allzu große Anzahl (zB 500). Beliebte Wort Einbettungen sind word2vec und Handschuh .
Ich möchte betreutes Lernen anwenden, um Dokumente zu klassifizieren. Momentan ordne ich jedes Dokument einem Merkmalsvektor mithilfe der Wortsackdarstellung zu und wende dann einen Standardklassifizierer an. Ich möchte den Merkmalsvektor der Wortsammlung durch etwas ersetzen, das auf einer vorhandenen vorgeübten Worteinbettung basiert, um das semantische Wissen zu nutzen, das in der Worteinbettung enthalten ist. Gibt es eine Standardmethode dafür?
Ich kann mir einige Möglichkeiten vorstellen, aber ich weiß nicht, ob es etwas gibt, das am sinnvollsten ist. Kandidatenansätze, über die ich nachgedacht habe:
Ich könnte den Vektor für jedes Wort im Dokument berechnen und alle mitteln. Dies scheint jedoch eine Menge Informationen zu verlieren. Zum Beispiel kann der Klassifizierer bei der Darstellung in Wortsäcken leicht lernen, dass es einige Wörter gibt, die für die Klassifizierungsaufgabe von hoher Relevanz sind und die meisten Wörter irrelevant sind. Wenn ich die Vektoren für alle Wörter im Dokument mittle, hat der Klassifikator keine Chance.
Das Verketten der Vektoren für alle Wörter funktioniert nicht, da dies nicht zu einem Merkmalsvektor mit fester Größe führt. Es scheint auch eine schlechte Idee zu sein, da es übermäßig empfindlich auf die spezifische Platzierung eines Wortes ist.
Ich könnte die Worteinbettung verwenden, um das Vokabular aller Wörter in eine feste Menge von Clustern zu gruppieren, beispielsweise 1000 Cluster, wobei ich die Kosinusähnlichkeit auf den Vektoren als Maß für die Wortähnlichkeit verwende. Dann könnte ich anstelle eines Wortbeutels einen Clusterbeutels haben: Der Merkmalsvektor, den ich dem Klassifizierer zuführe, könnte ein 1000-Vektor sein, bei dem die te Komponente die Anzahl der Wörter in dem Dokument zählt, das dies ist sind Teil von Cluster i .
Mit einem gegebenen Wort lassen mich diese Worteinbettungen einen Satz der 20 ähnlichsten Wörter w 1 , … , w 20 und ihre Ähnlichkeitswerte s 1 , … , s 20 berechnen . Ich könnte den wortreichen Merkmalsvektor damit anpassen. Wenn ich das Wort sehen w , zusätzlich zum Inkrementieren des Elements zu Wort entspricht w von 1 konnte ich auch das Element inkrementieren Wort entspricht , w 1 von s 1 , inkrementieren das Element zu Wort entspricht w 2 durch und so weiter.
Gibt es einen speziellen Ansatz, der sich für die Klassifizierung von Dokumenten eignet?
Ich suche nicht nach paragraph2vec oder doc2vec. Diese erfordern Training auf einem großen Datenkorpus, und ich habe keinen großen Datenkorpus. Stattdessen möchte ich eine vorhandene Worteinbettung verwenden.
Antworten:
Eine einfache Technik, die bei kurzen Texten (z. B. einem Satz oder einem Tweet) recht gut zu funktionieren scheint, besteht darin, den Vektor für jedes Wort im Dokument zu berechnen und diese dann mit dem koordinatenweisen Mittelwert, dem min-Wert oder dem max-Wert zu aggregieren.
TL; DR: Überraschenderweise funktioniert die Verkettung von min und max ziemlich gut.
Referenz:
Repräsentationslernen für sehr kurze Texte mit gewichteter Worteinbettungsaggregation. Cedric De Boom, Steven Van Canneyt, Thomas Demeester und Bart Dhoedt. Mustererkennungsbuchstaben; arxiv: 1607.00570. Zusammenfassung , pdf . Siehe insbesondere Tabellen 1 und 2.
Danksagung: Vielen Dank an @ user115202, der mich auf dieses Papier aufmerksam gemacht hat.
quelle
Sie können doc2vec ähnlich wie word2vec verwenden und ein vorab trainiertes Modell aus einem großen Korpus verwenden. Verwenden Sie dann etwas wie
.infer_vector()
in gensim, um einen Dokumentvektor zu konstruieren. Das doc2vec-Training muss nicht unbedingt aus dem Trainingsset stammen.Eine andere Methode ist die Verwendung eines RNN-, CNN- oder Feedforward-Netzwerks zur Klassifizierung. Dies kombiniert effektiv die Wortvektoren zu einem Dokumentvektor.
Sie können auch spärliche Merkmale (Wörter) mit dichten Merkmalen (Wortvektoren) kombinieren, um sich gegenseitig zu ergänzen. Ihre Merkmalsmatrix wäre also eine Verkettung der spärlichen Wortmatrix mit dem Durchschnitt der Wortvektoren. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
Eine andere interessante Methode besteht darin, einen ähnlichen Algorithmus wie word2vec zu verwenden. Statt jedoch ein Zielwort vorherzusagen, können Sie auch eine Zielbezeichnung vorhersagen. Dadurch werden die Wortvektoren direkt auf die Klassifizierungsaufgabe abgestimmt. http://arxiv.org/pdf/1607.01759v2.pdf
Bei mehr Ad-hoc-Methoden können Sie versuchen, die Wörter je nach Syntax unterschiedlich abzuwägen. Beispielsweise können Sie Verben stärker wiegen als Determinatoren.
quelle
Wenn Sie mit englischem Text arbeiten und vorab trainierte Worteinbettungen wünschen, lesen Sie diese Informationen : https://code.google.com/archive/p/word2vec/
Dies ist die ursprüngliche C-Version von word2vec. Zusammen mit dieser Version veröffentlichten sie auch ein Modell, das auf 100 Milliarden Wörtern aus Google News-Artikeln trainiert wurde (siehe Abschnitt "Vorab trainierte Wort- und Phrasenvektoren").
Meiner Meinung nach und meiner Erfahrung mit der Arbeit an Worteinbettungen zur Klassifizierung von Dokumenten funktioniert ein Modell wie doc2vec (mit CBOW) viel besser als jede Menge Wörter.
Da Sie über einen kleinen Korpus verfügen, sollten Sie Ihre Worteinbettungsmatrix anhand der oben genannten vorgefertigten Einbettungen initialisieren. Trainieren Sie anschließend den Absatzvektor im doc2vec-Code. Wenn Sie mit Python vertraut sind, können Sie die Gensim-Version ausprobieren, die sehr einfach zu ändern ist.
Lesen Sie auch dieses Dokument, in dem die Funktionsweise von word2vec / doc2vec beschrieben wird: http://arxiv.org/abs/1411.2738 . Dadurch wird das Verständnis des Gensim-Codes sehr einfach.
quelle