[PYTHON] Verwenden Sie den von word2vec gelernten Vektor in der Einbettungsebene von LSTM

Einführung

Ich wollte den Vektor von word2vec in der Einbettungsschicht wie seq2seq verwenden, also habe ich die nützlichen Funktionen von word2vec zusammengefasst. Im Beispiel erklären wir anhand des gelernten Vektors der Tohoku-Universität (http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/).

Modell laden

Laden Sie zuerst das Modell. Geben Sie den Pfad des heruntergeladenen (entity_vector.model.bin) in model_dir ein.

from gensim.models import KeyedVectors
model_dir = 'entity_vector.model.bin Pfad'
model = KeyedVectors.load_word2vec_format(model_dir, binary=True)

Vektorausgabe

Der Wortvektor kann wie folgt erhalten werden.

print(model['ich'])

Ausgabe


[-0.9154563   0.97780323 -0.43780354 -0.6441212  -1.6350892   0.8619687
  0.41775486 -1.094953    0.74489385 -1.6742945  -0.34408432  0.5552686
 -3.9321985   0.3369842   1.5550056   1.3112832  -0.64914817  0.5996928
  1.6174266   0.8126016  -0.75741744  1.7818885   2.1305397   1.8607832
  3.0353768  -0.8547809  -0.87280065 -0.54103154  0.752979    3.8159864
 -1.4066186   0.78604376  1.2102902   3.9960158   2.9654515  -2.6870391
 -1.3829899   0.993459    0.86303824  0.29373714  4.0691266  -1.4974884
 -1.5601915   1.4936608   0.550254    2.678553    0.53790915 -1.7294457
 -0.46390963 -0.34776476 -1.2361934  -2.433244   -0.21348757  0.0488718
  0.8197853  -0.59188586  1.7276062   0.9713122  -0.06519659  2.4763248
 -0.93890053  0.36217824  1.887851   -0.0175399  -0.21866432 -0.81253886
 -3.9667509   2.5340643   0.02985824  0.338091   -1.3745826  -2.3509336
 -1.5615206   0.8273324  -1.263886   -1.2259561   0.9079302   2.0258994
 -0.8576754  -2.5492477  -2.45557    -0.5216256  -1.3474834   2.3590422
  1.0459667   2.0919168   1.6904455   1.7064931   0.7376105   0.2567448
 -0.8194208   0.8788849  -0.89287275 -0.22960001  1.8320689  -1.7200342
  0.8977642   1.5119879  -0.3325551   0.7429934  -1.2087826   0.5350336
 -0.03887295 -1.9642036   1.0406445  -0.80972534  0.49987233  2.419521
 -0.30317742  0.96494234  0.6184119   1.2633535   2.688754   -0.7226699
 -2.8695397  -0.8986926   0.1258761  -0.75310475  1.099076    0.90656924
  0.24586082  0.44014114  0.85891217  0.34273988  0.07071286 -0.71412176
  1.4705397   3.6965442  -2.5951867  -2.4142458   1.2733719  -0.22638321
  0.15742263 -0.717717    2.2888887   3.3045793  -0.8173686   1.368556
  0.34260234  1.1644434   2.2652006  -0.47847173  1.5130697   3.481819
 -1.5247481   2.166555    0.7633031   0.61121356 -0.11627229  1.0461875
  1.4994645  -2.8477156  -2.9415505  -0.86640745 -1.1220155   0.10772963
 -1.6050811  -2.519997   -0.13945188 -0.06943721  0.83996797  0.29909992
  0.7927955  -1.1932545  -0.375592    0.4437512  -1.4635806  -0.16438413
  0.93455386 -0.4142645  -0.92249537 -1.0754105   0.07403489  1.0781559
  1.7206618  -0.69100255 -2.6112185   1.4985414  -1.8344582  -0.75036854
  1.6177907  -0.47727013  0.88055164 -1.057859   -2.0196638  -3.5305111
  1.1221203   3.3149185   0.859528    2.3817215  -1.1856595  -0.03347144
 -0.84533554  2.201596   -2.1573794  -0.6228852   0.12370715  3.030279
 -1.9215534   0.09835044]

Auf diese Weise wird ein 200-dimensionaler Vektor ausgegeben.

Holen Sie sich alle Vektoren von word2vec als Numpy-Array

Sie können den Vektor aller Wörter mit dem folgenden Code erhalten.

w2v_vector = model.wv.syn0

Überprüfen Sie die Anzahl der Abmessungen.

print(w2v_vector.shape)

Ausgabe


(1015474, 200)

Aus dieser Ausgabe können wir erkennen, dass 1015474 Wörter als 200-dimensionaler Vektor gespeichert sind.

Index der gelernten Wörter abrufen

Ich konnte die Vektoren für alle Wörter abrufen, weiß aber immer noch nicht, welchem Vektor die Wörter entsprechen. Lassen Sie uns also die Wort-ID auf word2vec abrufen.

print(model.vocab['ich'].index)

Ausgabe


1027

Es stellt sich heraus, dass das Wort "I" dem 1027. entspricht. Lassen Sie uns nun den 1027. Vektor ausgeben.

print(w2v_vector[model.vocab['ich'].index])

Ausgabe


[-0.9154563   0.97780323 -0.43780354 -0.6441212  -1.6350892   0.8619687
  0.41775486 -1.094953    0.74489385 -1.6742945  -0.34408432  0.5552686
 -3.9321985   0.3369842   1.5550056   1.3112832  -0.64914817  0.5996928
  1.6174266   0.8126016  -0.75741744  1.7818885   2.1305397   1.8607832
  3.0353768  -0.8547809  -0.87280065 -0.54103154  0.752979    3.8159864
 -1.4066186   0.78604376  1.2102902   3.9960158   2.9654515  -2.6870391
 -1.3829899   0.993459    0.86303824  0.29373714  4.0691266  -1.4974884
 -1.5601915   1.4936608   0.550254    2.678553    0.53790915 -1.7294457
 -0.46390963 -0.34776476 -1.2361934  -2.433244   -0.21348757  0.0488718
  0.8197853  -0.59188586  1.7276062   0.9713122  -0.06519659  2.4763248
 -0.93890053  0.36217824  1.887851   -0.0175399  -0.21866432 -0.81253886
 -3.9667509   2.5340643   0.02985824  0.338091   -1.3745826  -2.3509336
 -1.5615206   0.8273324  -1.263886   -1.2259561   0.9079302   2.0258994
 -0.8576754  -2.5492477  -2.45557    -0.5216256  -1.3474834   2.3590422
  1.0459667   2.0919168   1.6904455   1.7064931   0.7376105   0.2567448
 -0.8194208   0.8788849  -0.89287275 -0.22960001  1.8320689  -1.7200342
  0.8977642   1.5119879  -0.3325551   0.7429934  -1.2087826   0.5350336
 -0.03887295 -1.9642036   1.0406445  -0.80972534  0.49987233  2.419521
 -0.30317742  0.96494234  0.6184119   1.2633535   2.688754   -0.7226699
 -2.8695397  -0.8986926   0.1258761  -0.75310475  1.099076    0.90656924
  0.24586082  0.44014114  0.85891217  0.34273988  0.07071286 -0.71412176
  1.4705397   3.6965442  -2.5951867  -2.4142458   1.2733719  -0.22638321
  0.15742263 -0.717717    2.2888887   3.3045793  -0.8173686   1.368556
  0.34260234  1.1644434   2.2652006  -0.47847173  1.5130697   3.481819
 -1.5247481   2.166555    0.7633031   0.61121356 -0.11627229  1.0461875
  1.4994645  -2.8477156  -2.9415505  -0.86640745 -1.1220155   0.10772963
 -1.6050811  -2.519997   -0.13945188 -0.06943721  0.83996797  0.29909992
  0.7927955  -1.1932545  -0.375592    0.4437512  -1.4635806  -0.16438413
  0.93455386 -0.4142645  -0.92249537 -1.0754105   0.07403489  1.0781559
  1.7206618  -0.69100255 -2.6112185   1.4985414  -1.8344582  -0.75036854
  1.6177907  -0.47727013  0.88055164 -1.057859   -2.0196638  -3.5305111
  1.1221203   3.3149185   0.859528    2.3817215  -1.1856595  -0.03347144
 -0.84533554  2.201596   -2.1573794  -0.6228852   0.12370715  3.030279
 -1.9215534   0.09835044]

Wenn Sie es mit dem ersten Vektorausgabeergebnis vergleichen, können Sie sehen, dass das Ausgabeergebnis dasselbe ist.

Schließlich

Nachdem wir nun bereit sind, den word2vec-Vektor zu verwenden, werden wir das nächste Mal versuchen, die Verwendung des word2vec-Vektors in der Einbettungsebene des seq2seq / Encoder-Modells zu lernen.

Recommended Posts

Verwenden Sie den von word2vec gelernten Vektor in der Einbettungsebene von LSTM
Suchen Sie nach dem Wert der Instanz in der Liste
Visualisierung des Zündzustands der verborgenen Schicht des Modells, die im TensorFlow MNIST-Lernprogramm gelernt wurde
○○ Probleme im Fachbereich Mathematik mit Optimierung lösen
Verwenden Sie Sudachipys gelerntes word2vec in einer Umgebung mit wenig Speicher
Verwenden wir die offenen Daten von "Mamebus" in Python
Verwendung des in Lobe in Python erlernten Modells
Was ich durch die Teilnahme am ISUCON10-Qualifying gelernt habe
Umfrage zum Einsatz von maschinellem Lernen in realen Diensten
Wrap (Teil der) AtCoder Library in Cython zur Verwendung in Python
[In der Abbildung verstanden] Verwaltung der virtuellen Python-Umgebung durch Pipenv
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Verwenden Sie PyCaret, um den Preis von Gebrauchtwohnungen in Tokio vorherzusagen!
Überprüfen Sie das Zeichnungsergebnis mit Plotly, indem Sie CodePen in Qiita einbetten
Die Geschichte der Teilnahme an AtCoder
Die Geschichte des "Lochs" in der Akte
Holen Sie sich den Schlüssel für die Migration von JSON-Daten auf der zweiten Ebene mit Python
Mit LSTM + Embedding habe ich die Bedeutung der Vorverarbeitung in NLP erneut bekräftigt und gleichzeitig ein Modell zur Unterscheidung der Emotionen von Tweets erstellt.