2016-11-07 8 views
12

Im Word2Vec-Modell gibt es zwei lineare Transformationen, die ein Wort im Vokabelraum in eine verborgene Ebene (den "In" -Vektor) und dann zurück in den Vokabelraum ("out") bringen "Vektor). Normalerweise wird dieser Vektor nach dem Training verworfen. Ich frage mich, ob es eine einfache Möglichkeit gibt, in gensim python auf den out-Vektor zuzugreifen? Äquivalent, wie kann ich auf die Out-Matrix zugreifen?gensim word2vec Zugriff auf In/Out-Vektoren

Motivation: Ich möchte die Ideen in dieser Arbeit präsentierten umzusetzen: A Dual Embedding Space Model for Document Ranking

Hier weitere Details sind. Aus dem oben anhand wir folgendes word2vec Modell haben:

enter image description here

Hierbei wird die Eingangsschicht ist von Größe $ V $, die Vokabulargröße, die verborgene Schicht ist von Größe $ d $, und eine Ausgangsschicht der Größe $ V $. Die zwei Matrizen sind W_ {IN} und W_ {OUT}. Normalerweise, das Word2Vec-Modell behält nur die W_IN-Matrix. Dies ist, was zurückgegeben wird, wo nach einem word2vec Modell in GENSIM Ausbildung, erhalten Sie Sachen wie:

Modell [ 'Kartoffel'] = [- 0.2,0.5,2, ...]

Wie kann ich auf W_ {OUT} zugreifen oder behalten? Das ist wahrscheinlich ziemlich rechenintensiv, und ich hoffe wirklich auf einige eingebaute Methoden in Gensim, um das zu tun, weil ich befürchte, dass wenn ich das von Grund auf neu programmiere, es keine gute Leistung geben würde.

+0

Haben Sie bisher einen Code? – rebeling

Antwort

5

Während dies möglicherweise keine richtige Antwort (kann noch nicht kommentieren) und niemand wies darauf hin, werfen Sie einen Blick here. Der Schöpfer scheint eine ähnliche Frage zu beantworten. Auch hier haben Sie eine höhere Chance auf eine gültige Antwort.

Graben in der link er in den Word2vec-Quellcode geschrieben, können Sie die syn1 Löschung ändern, um Ihren Bedürfnissen zu entsprechen.Denken Sie daran, es zu löschen, nachdem Sie fertig sind, da es sich um ein Gedächtnisschwein handelt.

+2

Danke! Das sieht nach dem aus, wonach ich suche. Um die Antwort zu paraphrasieren, sind die Ein-/Aus-Einbettungen: Eingabe: model.syn0, Ausgabe: model.syn1, model.syn1neg –

0

Der folgende Code ermöglicht das Speichern/Laden des Modells. Es verwendet intern Pickle, optional können die internen großen NumPy-Matrizen des Modells direkt aus den Plattendateien in den virtuellen Speicher kopiert werden, um den Speicher gemeinsam zu nutzen.

model.save('/tmp/mymodel.model') 
new_model = gensim.models.Word2Vec.load('/tmp/mymodel') 

Einige HintergrundinformationenGensim ist eine kostenlose Python-Bibliothek entworfen Roh, unstrukturierte digitale Texte zu verarbeiten („Klartext“). Die Algorithmen in Gensim, wie latente semantische Analyse, latente Dirichlet-Zuweisung und zufällige Projektionen, entdecken die semantische Struktur von Dokumenten, indem sie statistische Mitauftrittsmuster der Wörter innerhalb eines Corpus von Trainingsdokumenten untersuchen.

Einige guten Blog beschreibt über die Verwendung und Beispielcode Basis zu treten an dem Projekt beginnen

Installationsreferenz here

Hoffe das hilft !!!

+2

Danke für Ihre Antwort. Das hat aber absolut nichts mit meiner Frage zu tun. Speziell in word2vec gibt es zwei verschiedene Wortvektoren ("in" und "out"), und word2vec behält nur eine von ihnen ("in"). Ich frage nach dem anderen. –

0

In der Datei word2vec.py müssen Sie diese Änderung vornehmen In der folgenden Funktion gibt es derzeit den "in" Vektor zurück. Wie Sie den "out" Vektor wollen. Das "in" wird im syn0-Objekt gespeichert und "out" wird in der syn1neg-Objektvariablen gespeichert.

Verwandte Themen