Pythonプログラミング：ウィキペディアのデータを使ってword2vecをしてみる｛3. モデル利用編｝

# はじめに

4本立ての記事、3本目です。

1. [データ取得＆前処理編](https://qiita.com/Blaster36/items/84b1af5802f150017d84)
2. [モデル作成編](https://qiita.com/Blaster36/items/810869c8c622fc0d1091)
3. モデル利用編　★本稿
4. [モデル応用編](https://qiita.com/Blaster36/items/140f2b5c532c3be4b8fe)

## 本稿で紹介すること

- word2vecモデルの利用

[word2vec](https://code.google.com/archive/p/word2vec/)
[Word2vec Tutorial](https://rare-technologies.com/word2vec-tutorial/)
[Deep learning with word2vec and gensim](https://rare-technologies.com/deep-learning-with-word2vec-and-gensim/)
[米googleの研究者が開発したWord2Vecで自然言語処理(独自データ)](https://qiita.com/okappy/items/e16639178ba85edfee72)

## 本稿で紹介しないこと

- word2vecの仕組み
- Pythonライブラリの使い方
  - gensim　※単語の分散表現（単語ベクトル）を実現するPythonライブラリ
- word2vecモデルの作成

[【まとめ】自然言語処理における単語分散表現（単語ベクトル）と文書分散表現（文書ベクトル）](https://qiita.com/kenta1984/items/6dc327c31b6c36e66863)
[word2vec（Skip-Gram Model）の仕組みを恐らく日本一簡潔にまとめてみたつもり](https://www.randpy.tokyo/entry/word2vec_skip_gram_model)
[【Python】Word2Vecの使い方](https://qiita.com/kenta1984/items/93b64768494f971edf86)
[gensim/word2vec.py](https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/word2vec.py)
[gensim: models.word2vec – Word2vec embeddings](https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec)

# モデル利用編

モデル作成に続き、Windowsで進めます。

## word2vecモデルの利用

まず、事前に作成（学習）したword2vecモデルを読み込みます。

```python:analyzeWiki_Word2Vec2
from gensim.models import Word2Vec

model = Word2Vec.load(r'..\result\jawiki_word2vec_sz200_wndw10.model')
wv = model.wv
```

以下、モデル利用のCodeを紹介。
# 類義語の探索

”日本”に最も似ているのは”大日本帝国”なのですね。”地球”と”火星”も惑星としての性質ではなく、文脈として同じような使われ方をするケースが多いのでしょうかね。

```python:analyzeWiki_Word2Vec2
$ wv.similar_by_word('日本')
[('大日本帝国', 0.5008862018585205),
 ('韓国', 0.4892416000366211),
 ('アメリカ合衆国', 0.4772924780845642),
 ('中国', 0.4675092399120331),
 ('大韓民国', 0.4430246949195862),
 ('全日本', 0.4379886984825134),
 ('ちら', 0.42691436409950256),
 ('台湾', 0.41929417848587036),
 ('ムスリム・ウラマー', 0.41900634765625),
 ('米国', 0.41775089502334595)]

$ wv.similar_by_word('地球')
[('火星', 0.7551407814025879),
 ('惑星', 0.7512051463127136),
 ('宇宙', 0.7085860967636108),
 ('銀河系', 0.669750452041626),
 ('ガニメデ', 0.6601986885070801),
 ('太陽系', 0.6598026752471924),
 ('人類', 0.6427561044692993),
 ('木星', 0.6242889165878296),
 ('宇宙船', 0.6086498498916626),
 ('月面', 0.6085003018379211)]
```

# 2つの単語の類似度

”チンパンジー”とより似ているのは、”ゴリラ”なのですね。

```python:analyzeWiki_Word2Vec2
$ wv.similarity('チンパンジー', '猿')
0.37958744

$ wv.similarity('チンパンジー', 'ゴリラ')
0.64872086
```

# 単語の足し算と引き算

これが一番強力な使い方ですね。
1つ目の例は、まぁなんとなく分かりますね。
2つ目および3つ目の例は、いかがでしょう。2つ目の例では”トヨタ自動車”と”日産自動車”という車関係の日本のメーカーが出現していますね。一方で、3つ目の例では”ダイムラー”と”ハノマーグ”という車関係のドイツのメーカーが出現していますね。

```python:analyzeWiki_Word2Vec2
$ wv.most_similar(positive=['王子', '女'], negative=['男'])
[('王女', 0.6660595536231995),
 ('女王', 0.6010779738426208),
 ('王妃', 0.5653730630874634),
 ('姫君', 0.5344032049179077),
 ('アル・ワリード', 0.5340311527252197),
 ('ローレシア', 0.5333681106567383),
 ('ベースメントモンスター', 0.5282386541366577),
 ('お姫様', 0.5203766822814941),
 ('ヴィドゥーダバ', 0.5136663913726807),
 ('マナフィ', 0.5090745687484741)]

$ wv.most_similar(positive=['自動車', '日本'])
[('軽自動車', 0.5139060616493225),
 ('二輪車', 0.48638927936553955),
 ('乗用車', 0.4817807674407959),
 ('オートバイ', 0.48034173250198364),
 ('トヨタ自動車', 0.4653428792953491),
 ('陸運', 0.45928823947906494),
 ('日産自動車', 0.4492081105709076),
 ('運輸', 0.4431821405887604),
 ('工業', 0.432481974363327),
 ('自転車', 0.4301576614379883)]

$ wv.most_similar(positive=['自動車', 'ドイツ'], negative=['日本'])
[('GmbH', 0.5056157112121582),
 ('自転車', 0.4951740801334381),
 ('ダイムラー', 0.47622862458229065),
 ('ルートヴィヒスハーフェン', 0.4695303440093994),
 ('乗用車', 0.46864038705825806),
 ('ベンツ', 0.4634667634963989),
 ('車', 0.46102428436279297),
 ('車両', 0.4482493996620178),
 ('オートバイ', 0.4431225061416626),
 ('ハノマーグ', 0.4428933262825012)]
```

# まとめ

ウィキペディアの前処理済みデータから作成済みの、word2vecモデルを利用する方法を紹介。