【AI】Word2Vecの使い方を解説!2単語の内積を計算してみた

こんにちは、ヒガシです。

 

このページでは、単語をベクトルに変換するモデルの代表格であるWord2Vecモデルの使い方解説を行います。

 

非常に簡単ですし、おもしろいのでぜひ一緒にやってみましょう!

 

スポンサーリンク

gensimをインストールする

Word2Vecモデルを使うためには、まずはじめにgensimをインストールしましょう。

 

インストールする際はバージョン3.8.1を指定すると良いみたいです。

pip install gensim==3.8.1

 

そもそもgensimとは何かというと今回扱うWord2Vecモデルのように「使えれば便利だけど自分だけで使えるようにするのは敷居が高い」みたいなモデルを非常に簡単に使えるようにしてくれるライブラリだと思えばOKです。

 

今回使うWord2Vecモデル以外もgensimを使えば簡単に使えるようになります。

 

すでにgensimがインストールされている方も

print(gensim.__version__)

でバージョンを確認しておきましょう。

どうやらWord2Vecモデルはバージョンが新しすぎるとうまく動作しないみたいです。

 

スポンサーリンク

Word2Vecモデルをローカルにダウンロードする

次は以下のページにいって日本語に対して学習済みのWord2Vecモデルをダウンロードします。

下の方にあるjapanese(w)をクリックすればダウンロードできるはずです。

GitHub - Kyubyong/wordvectors: Pre-trained word vectors of 30+ languages
Pre-trained word vectors of 30+ languages. Contribute to Kyubyong/wordvectors development by creating an account on GitH...

 

ダウンロードしたzipファイルを解凍し、これからプログラムを実行するフォルダに置いておきましょう。

 

スポンサーリンク

Word2Vecモデルで日本語をベクトル化する

それでは事前準備はここまでにして実際にWord2Vecモデルをつかってみましょう。

 

まずは「今日」という単語をベクトル化してみます。

import gensim
import numpy as np
model = gensim.models.Word2Vec.load('data/ja.bin')
a = model["今日"]
print(a)

 

以下が出力されました。(実際はもっと下まであります。)

今日という単語をベクトル化した結果

a.shapeで次数を確認したところ300次元ありました。

 

どんな単語をいれても300次元のベクトル化して返してくれるみたいですね。

 

スポンサーリンク

2つの単語ベクトルの内積を計算してみる

次は先ほどの手順で作成した2つのベクトルに対して、内積を計算してみます。

 

内積というのは、ベクトルどうしの類似度を計算できるものです。

似たような2つの単語ベクトルの内積が高くなり、似てない2つの単語の内積が小さくなるのかを確認してみましょう。

 

以下がそのコードです。

import gensim
import numpy as np
model = gensim.models.Word2Vec.load('data/ja.bin')
a = model["今日"]
b = model["明日"]
inner_product = np.dot(a, b)
print("今日 明日 の内積")
print(inner_product)


a = model["今日"]
b = model["東京"]
inner_product = np.dot(a, b)
print("今日 東京 の内積")
print(inner_product)

 

こいつを実行すると以下の結果が出力されました。

2つの単語ベクトルの内積を計算した結果

 

似た単語である今日と明日の内積は大きく、あまり関係のない今日と東京の内積は小さくなっていますね。

 

イメージ通りの結果です。

 

スポンサーリンク

おわりに

ということで今回はWord2Vecモデルを使って日本語の単語をベクトルに変換する方法をご紹介しました。

こいつを使えば色々な自然言語処理に応用できそうですね。

 

このブログでは、このようなAIスキルを多数紹介しています。

ぜひ他のページもご覧ください。

過去記事一覧

 

それではまた!

コメント

タイトルとURLをコピーしました