ミッキーと類似の言葉は何なのか、機械学習(word2vec)を使って調べてみる。英語版

# 目的
下記にて、日本語で「ミッキー」と類似の言葉をword2vec調べました。
>[ミッキーと類似の言葉は何なのか、機械学習(word2vec)を使って調べてみる。](https://qiita.com/seigot/items/827bc8520306262b814a)

今回は、英語で「mickey」と類似の言葉をword2vecで調べます。
日本語と同様の結果が出ることを期待値と置きます。

![51DpKAKhZyL._SX314_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/344880/8354a7a9-ed03-d0e8-1019-934cf4066608.jpeg)

# 準備

janome、gensim、mecabのインストールは[こちら](https://qiita.com/seigot/items/827bc8520306262b814a)の通り。

下記から英語wikipediaのword2vec学習済モデルを取得する。
[Pretrained word2vec model - English Wikipedia](https://www.kaggle.com/rabidbear/pretrained-word2vec-model-english-wikipedia/version/1)

```
$ unzip pretrained-word2vec-model-english-wikipedia.zip
$ chmod 777 en_1000_no_stem.tar.gz
$ tar -zxvf en_1000_no_stem.tar.gz
$ ls -lha en_1000_no_stem/en.model
```

# コード

```'sample.py'

# -*- coding: utf-8 -*-                                                                                                                      
from gensim.models import Word2Vec
import sys, codecs

fout = codecs.open('result.txt', 'w', 'utf-8')

def print_list(inputword):
    for item in inputword:
        w1=item[0]
        w2=item[1]
        print(w1, str(w2))
        fout.write(w1)
        fout.write(',')
        fout.write(str(w2))
        fout.write('\n')
        fout.write('---')
    print("---")

model = Word2Vec.load("./en_1000_no_stem/en.model")

# ミッキーと類似度が近い言葉を取得                                                                                                           
similar=model.wv.most_similar("mickey")
print_list(similar)

# クリスマスシーズンのミッキーと類似の言葉を取得（ミッキー + クリスマス）                                                                    
similar2=model.wv.most_similar(positive = ["mickey", "xmas"])
print_list(similar2)

# ユニバーサルスタジオ界のミッキーは誰か（ミッキー - ディズニー + ユニバーサルスタジオ）                                                     
similar3=model.wv.most_similar(positive = ["mickey", "universal"], negative = ["disney"])
print_list(similar3)
```

# テスト

・ミッキーと類似度が近い言葉を取得

```
$ python sample.py
softie 0.38365882635116577
freaked 0.3752264380455017
whizz 0.3680676519870758
doggie 0.3661370873451233
somethin' 0.3587530255317688
'that's 0.3559487462043762
shoo 0.3558597266674042
peed 0.35515618324279785
dog!" 0.35452085733413696
rube 0.3540089726448059
```
-> softie, freaked, whizzは誰でしょうか。
　　doggieは101 dalmatians?
![Screen-Shot-2017-06-30-at-13.09.36.png](https://qiita-image-store.s3.amazonaws.com/0/344880/c6b84a8c-c73e-5d7a-4a19-5ccab2298ae4.png)


・クリスマスシーズンのミッキーと類似の言葉を取得（mickey + xmas）

```
okay! 0.4721372723579407
bed? 0.4691550135612488
again!! 0.4681573212146759
move! 0.46717819571495056
sight! 0.4629859924316406
Hotclaws 0.45783382654190063
:::Whilst 0.45730167627334595
bed! 0.457018107175827
:I’m 0.45372313261032104
weird! 0.4518777132034302
```
-> 日本語のような、ハロウィンやイースターは検索されませんでした。
　　海外ディズニーはあまり季節イベント多くない？

・ユニバーサルスタジオ界のミッキーは誰か（mickey - disney + universal）

```
fundamental 0.30061066150665283
DBPEDIA_ID/universal_suffrage 0.29533812403678894
essence 0.2884775698184967
realization 0.28519997000694275
embodied 0.2842469811439514
consciousness 0.28410547971725464
expression 0.28368979692459106
notion 0.28299811482429504
suffrage 0.2821383476257324
unity 0.2790291905403137
```

-> こちらはキャラクターの固有名詞は抽出できませんでした。


# まとめ
日本語wikipedia学習モデルからミッキーの類似の言葉を調べた場合と異なり、
あまり他キャラクターに関連した言葉が出てきませんでした。

日本語圏と、英語圏のミッキーの話題が異なるのでしょうか。
ただ、両者共にwikipediaから学習したモデルを用いており、ここまで明確に違いが出るのには何か理由があるのは間違いなく、一考の価値があるかもしれません。


という話題をミッキー好きの人と話せば１時間くらい無言の時間がなくなるかもしれません。

# 備考
英語wikipediaの学習モデルと相性が良くないのかと思い、
下記サイトの「GoogleNews-vectors-negative300.bin」も使用しましたが、
類似する言葉の抽出が上手くいきませんでした。
（そもそもmickeyに対するイメージが日本と英語圏では違う？）

>[Google's trained Word2Vec model in Python](http://mccormickml.com/2016/04/12/googles-pretrained-word2vec-model-in-python/)

・ミッキーと類似度が近い言葉を取得

```
$ time python sample.py
mick 0.6692354679107666
micky 0.5800431966781616
p_*** 0.5726287961006165
piss 0.5348302125930786
bollocking 0.5281388759613037
prat 0.5279818773269653
plonker 0.5187163352966309
doolally 0.5181190967559814
pikey 0.5153383016586304
slagging 0.5128487348556519
```
->mick,mickey等の誤字を主に取得していそう。

・クリスマスシーズンのミッキーと類似の言葉を取得（ミッキー + クリスマス）

```
mick 0.666815996170044
Crimbo 0.6293656826019287
christmas 0.6177151799201965
prezzies 0.6031675934791565
pressies 0.601152241230011
p_*** 0.6005554795265198
micky 0.597040057182312
fookin 0.5941460132598877
owt 0.5927474498748779
XXXXXXing 0.5904005765914917
```
->こちらは関連記事が少ないのか、特に他イベントに関する言葉は出力していなさそう。

・ユニバーサルスタジオ界のミッキーは誰か（ミッキー - ディズニー + ユニバーサルスタジオ）

```
application_O2Diesel_TM 0.37089213728904724
universality 0.36549654603004456
veiled_swipe 0.35319334268569946
woefully_misplaced 0.34827640652656555
rightly 0.33812689781188965
unfailing_courtesy 0.33795374631881714
belabouring 0.3369782567024231
fairness 0.33613812923431396
eliciting_howls 0.33534377813339233
transcending_partisanship 0.3337489068508148
```

->こちらはよくわからない。。

# CodeingError対策

```
$ tar -zxvf en_1000_no_stem.tar.gz 
tar: Error opening archive: Failed to open 'en_1000_no_stem.tar.gz'
```
en_1000_no_stem.tar.gzにrw権限が付与されていなかった。"chmod 777 en_1000_no_stem.tar.gz"を実行してrw権限付与して解決

# 参考
[Google's trained Word2Vec model in Python](http://mccormickml.com/2016/04/12/googles-pretrained-word2vec-model-in-python/)
[gensim.models.word2vec](https://tedboy.github.io/nlps/generated/generated/gensim.models.Word2Vec.html#gensim.models.Word2Vec)
[Pretrained word2vec model - English Wikipedia](https://www.kaggle.com/rabidbear/pretrained-word2vec-model-english-wikipedia/version/1)