Was ist eine bessere Eingabe für Word2Vec?

22

Dies ist eher eine allgemeine NLP-Frage. Was ist die richtige Eingabe, um ein Wort zu trainieren, das Word2Vec einbettet? Sollten alle zu einem Artikel gehörenden Sätze ein separates Dokument in einem Korpus sein? Oder sollte jeder Artikel ein Dokument im Korpus sein? Dies ist nur ein Beispiel mit Python und Gensim.

Korpus satzweise geteilt:

SentenceCorpus = [["first", "sentence", "of", "the", "first", "article."],
                  ["second", "sentence", "of", "the", "first", "article."],
                  ["first", "sentence", "of", "the", "second", "article."],
                  ["second", "sentence", "of", "the", "second", "article."]]

Korpus aufgeteilt nach Artikel:

ArticleCorpus = [["first", "sentence", "of", "the", "first", "article.",
                  "second", "sentence", "of", "the", "first", "article."],
                 ["first", "sentence", "of", "the", "second", "article.",
                  "second", "sentence", "of", "the", "second", "article."]]

Training von Word2Vec in Python:

from gensim.models import Word2Vec

wikiWord2Vec = Word2Vec(ArticleCorpus)
Wacax
quelle

Antworten:

14

Die Antwort auf diese Frage ist, dass es darauf ankommt . Der primäre Ansatz ist die Übergabe der Tokensätze ( SentenceCorpusin Ihrem Beispiel also). Je nachdem, welches Ziel Sie verfolgen und welchen Korpus Sie sich ansehen, möchten Sie möglicherweise stattdessen den gesamten Artikel verwenden, um die Einbettungen zu lernen. Dies ist etwas, das Sie möglicherweise nicht im Voraus wissen - Sie müssen sich also überlegen, wie Sie die Qualität der Einbettungen bewerten möchten, und einige Experimente durchführen, um festzustellen, welche Art von Einbettungen für Ihre Aufgabe nützlicher sind ( s).

NBartley
quelle
Gleich vor Ort. Ich habe die Einbettungen in einem Modell verwendet, und wie Sie bereits erwähnt haben, hat sich die Prognoseleistung des Modells erheblich verbessert, wenn ich den gesamten Artikel verwendet habe. In welchem ​​Fall wäre Training Satz für Satz überlegen?
Wacax
1
Sie sollten schauen und sehen, wie Wörter mit ähnlichen Vektoren miteinander verwandt sind. Es wurden einige Arbeiten an der Größe des Kontextfensters und der Art des Kontextes durchgeführt, die darauf hindeuten, dass kleinere Fenster (und möglicherweise kleinere Dokumentgrößen wie Sätze) Wörter ergeben, die funktional ähnlich (wie US-Bundesstaaten) und nicht topisch ähnlich sind ( wie US-Bundesstaaten und regierungsbezogene Wörter) haben ähnlichere Vektoren. Ich zitiere hauptsächlich Omer Levy und Yoav Goldbergs abhängigkeitsbasierte Worteinbettungen aus dem Jahr 2014. Ich könnte mich jedoch irren und würde gerne korrigiert werden, wenn dies der Fall ist.
NBartley
1

Als Ergänzung zu @ NBartleys Antwort. Jedermann stößt auf diese Frage. Ich habe versucht, Artikel / Satz als Eingabe für word2vec auf Spark2.2 zu verwenden, Ergebnis wie folgt.

benutze Satz als Eingabe:

Bildbeschreibung hier eingeben

verwenden Artikel als Eingabe:

Bildbeschreibung hier eingeben

Zachary
quelle
0

Für ersteres hat gensim die Word2Vec-Klasse. Für letztere Doc2Vec.

http://rare-technologies.com/doc2vec-tutorial/


quelle
3
doc2vec unterscheidet sich wesentlich von der Ausführung von word2vec für eine Reihe von Artikeln anstelle von Sätzen. doc2vec lernt Darstellungen der Artikel selbst und nicht nur der Wörter.
Jamesmf