0
1

More than 1 year has passed since last update.

言語処理100本ノック(2020)-60: 単語ベクトルの読み込みと表示

Last updated at Posted at 2021-08-29

言語処理100本ノック 2020 (Rev2)「第7章: 単語ベクトル」60本目「単語ベクトルの読み込みと表示」記録です。
多分「第7章: 単語ベクトル」は61以降をやりませんが、「第8章: ニューラルネット」をやりたかったため、前提となるこのノックに取り組みました。
7章の準備運動的内容ですし、Rev2015と異なりGensim使っているだけなので、コードも短く非常に簡単です。
記事「まとめ: 言語処理100本ノックで学べることと成果」言語処理100本ノック 2015についてはまとめていますが、追加で差分の言語処理100本ノック 2020 (Rev2)についても更新します。

参考リンク

リンク 備考
060.単語ベクトルの読み込みと表示.ipynb 回答プログラムのGitHubリンク
Qiita記事 多くのソース部分のコピペ元
まとめ: 言語処理100本ノックで学べることと成果 言語処理100本ノックまとめ記事

環境

後々GPUを使わないと厳しいので、Goolge Colaboratory使いました。Pythonやそのパッケージでより新しいバージョンありますが、新機能使っていないので、プリインストールされているものをそのまま使っています。

種類 バージョン 内容
Python 3.7.11 Google ColaboratoryのPythonバージョン(2021年8月時点)
google 2.0.3 Google Colaboratoryで提供されていたPythonパッケージ(2021年8月時点)
gensim 3.6.0 Google Colaboratoryで提供されていたPythonパッケージ(2021年8月時点)

第7章: 単語ベクトル

学習内容

単語の類似度計算や単語アナロジーなどを通して,単語ベクトルの取り扱いを修得します.さらに,クラスタリングやベクトルの可視化を体験します.

ノック内容

単語の意味を実ベクトルで表現する単語ベクトル(単語埋め込み)に関して,以下の処理を行うプログラムを作成せよ.

60. 単語ベクトルの読み込みと表示

Google Newsデータセット(約1,000億単語)での学習済み単語ベクトル(300万単語・フレーズ,300次元)をダウンロードし,”United States”の単語ベクトルを表示せよ.ただし,”United States”は内部的には”United_States”と表現されていることに注意せよ.

回答

回答結果

Voctor見ても人間に理解できませんが、結果です(1行目に300次元であることを確認もしています)。

結果
Tuple Length: 300

-5.59082031e-02 -5.00488281e-02 -3.73535156e-02  1.25976562e-01
  5.61523438e-02  1.51367188e-01  4.29687500e-02 -2.08007812e-01
 -4.78515625e-02  2.78320312e-02  1.81640625e-01  2.20703125e-01
--後略--

回答プログラム 060.単語ベクトルの読み込みと表示.ipynb

GitHubには確認用コードも含めていますが、ここには必要なものだけ載せています。

from google.colab import drive
from gensim.models import KeyedVectors

drive.mount('/content/drive')

model = KeyedVectors.load_word2vec_format('/content/drive/MyDrive/ColabNotebooks/ML/NLP100_2020/07.WordVector/input/GoogleNews-vectors-negative300.bin.gz', binary=True)

print('Tuple Length: ' + str(len(model['United_States'])))
print(model['United_States'])

回答解説

Word2Vecファイル読込

今回、鍵となるのはこのWord2Vecファイル読込だけです。models.keyedvectorsload_word2vec_format関数を使います。
KeyVectorsフォーマットは公式Document「Why use KeyedVectors instead of a full model?」に書いてあるとおり、小さいモデルとして保存可能(代わりに再訓練ができないなどあり)。単なるTuple型です。
100本ノックRev2015の「言語処理100本ノック-92(Gensim使用):アナロジーデータへの適用」で使っていたWord2Vec.load関数と異なります。
ファイルサイズが圧縮されていて1.5GBなので読込処理に2分超かかりました。

model = KeyedVectors.load_word2vec_format('/content/drive/MyDrive/ColabNotebooks/ML/NLP100_2020/07.WordVector/input/GoogleNews-vectors-negative300.bin.gz', binary=True)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1