word2vecでWikipediaのダンプを遊ぶ

標準

前回、Wikipediaのダンプファイルを用いて学習ファイルを生成しました。今回はこのデータを使って、ちゃんと学習は出来たのか?そして、word2vecならではの遊び方を紹介していきます。今回はUbuntuのコマンドラインを使っていきます。まずは、word2vecの入っているディレクトリーにカレントディレクトリーを合わせましょう。

まずは、distanceというプログラムを起動します。引数として学習ファイルを指定します。長くて30秒ほどすると「Enter word or sentence (EXIT to break):」という指示が表示されます。このアプリケーションでは入力した単語と近いベクトルを有した単語を上位40件まで列挙してくれるというものです。
試しに幾つか単語を入力してみた結果を紹介します。

yoshipc@ubuntu:~/word2vec$ ./distance jawiki-train.bin
Enter word or sentence (EXIT to break): 東京

Word: 東京  Position in vocabulary: 369

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            大阪			0.819656
                                            名古屋		0.728486
                                            横浜			0.721580
                                            京都			0.690569
                                            関西			0.666182
                                            新宿			0.657751
                                            札幌			0.644623
                                         神奈川			0.644338
                                            新潟			0.633014
                                            仙台			0.624947
                                            神戸			0.622716
                                            福岡			0.622510
                                            銀座			0.620424
                                            静岡			0.609896
                                            関東			0.605483
                                            浅草			0.602041
                                            函館			0.591723
                                            池袋			0.584673
                                            渋谷			0.578642
                                         日本橋			0.578430
                                         八王子			0.571659
                                            金沢			0.567943
                                         東京都			0.566478
                                            埼玉			0.562925
                                            上海			0.562798
                                            調布			0.562326
                                            東都			0.560888
                                            広島			0.559834
                                            品川			0.558159
                                         世田谷			0.556256
                                         六本木			0.554119
                                            青森			0.549229
                                            東北			0.546918
                                            小樽			0.546204
                                            九州			0.544958
                                         武蔵野			0.542167
                                         お台場			0.540832
                                            熊本			0.538358
                                            帝都			0.536352
                                         日比谷			0.531976

Enter word or sentence (EXIT to break): 地球

Word: 地球  Position in vocabulary: 1233

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            宇宙			0.821528
                                            火星			0.812108
                                            惑星			0.797727
                                         太陽系			0.790921
                                            人類			0.738912
                                            木星			0.733991
                                         銀河系			0.733956
                                            銀河			0.708870
                                            月面			0.693097
                                      宇宙空間			0.655918
                                         冥王星			0.651471
                                            太陽			0.633461
                                            水星			0.627036
                                   	地球の危機		0.626256
                                            土星			0.623206
                          	   ブラックホール			0.617673
                                   天の川銀河			0.614921
                                      人工惑星			0.614166
                                            北極			0.612878
                                      暗黒大陸			0.611285
                                   地球の大気			0.609744
                                            南極			0.606897
                                               星		0.604035
                                         海王星			0.603326
                                         地球人			0.599359
                                         天王星			0.597761
                          デジタルワールド			0.596115
                                         宇宙船			0.593324
                                      ガニメデ			0.593323
                                            世界			0.592610
                                            恒星			0.591629
                                         人間界			0.590720
                             アトランティス			0.588247
                                   ラーメタル			0.586938
                                ファルガイア			0.584400
                                            地上			0.583851
                                         ゴラス			0.583015
                                         侵略者			0.581611
                                ハルケギニア			0.581090
                                            星団			0.579153

Enter word or sentence (EXIT to break): 未来

Word: 未来  Position in vocabulary: 2337

                                              Word       Cosine distance
------------------------------------------------------------------------
                                         未来を			0.665130
                                   明るい未来			0.644872
                                         未来へ			0.637368
                                               夢		0.619448
                                   新しい世界			0.606247
                                   地球の危機			0.591318
                                         未来人			0.590926
                                            宇宙			0.571891
                                   本当の自分			0.571252
                          デジタルワールド			0.564416
                                   理想の世界			0.564250
                                            真実			0.561864
                                            現実			0.559642
                                            運命			0.558397
                                         近未来			0.554683
                                         カタチ			0.552179
                                            破滅			0.541106
                          タイムトラベラー			0.540935
                                         別世界			0.538001
                                         こころ			0.537282
                                            人類			0.536730
                                            地球			0.533530
                                            世界			0.532455
                                            叡智			0.524632
                                         理想郷			0.523804
                                            理想			0.521488
                                            幸福			0.518942
                                         みらい			0.518518
                                            明日			0.516735
                                         私たち			0.515698
                                世界の終わり			0.513908
                                      大切な人			0.513858
                                         行く末			0.511889
                                   最後の人間			0.511708
                                      未来社会			0.509263
                                         この国			0.509024
                          セレンディピティ			0.508971
                                      時間旅行			0.508526
                                            僕ら			0.508296
                                   最後の願い			0.506727

確かにそれと近い単語が出力されていますが、全く関係ない単語も幾つか見受けられます。まだ日本語モデルが足りなかったんですね。

次にword-analogyというプログラムを動かしていきます。こちらはベクトル演算が出来るという優れもので、例えば「恐竜 噴火 人類」と3つの単語を渡すと、自動的に「噴火 – 恐竜 + 人類」の演算を行い、感覚的には「恐竜 : 噴火 = 人類 : X」のXを返してくれます。日本語で言うところの「恐竜の噴火は人類にとってXに相当する」と言った感じでしょうか。実際は200次元のベクトルで演算していますが、平面ベクトルで表現するとこんな感じです。

word2vecベクトル演算

こんな感じに簡単に私達の知らない情報を引き抜けるんですね。信じるか信じないかはアナタ次第ですが。では以下ではいくつか気になった演算をしてみた結果を。

yoshipc@ubuntu:~/word2vec$ ./word-analogy jawiki-train.bin
Enter three words (EXIT to break): 現在 地球 未来

Word: 現在  Position in vocabulary: 114

Word: 地球  Position in vocabulary: 1233

Word: 未来  Position in vocabulary: 2337

                                              Word              Distance
------------------------------------------------------------------------
                                            宇宙			0.688643
                                   地球の危機			0.619962
                                            人類			0.589227
                                   新しい世界			0.562798
                                            銀河			0.560886
                                            火星			0.550297
                                         太陽系			0.548981
                                            惑星			0.545989
                          タイムトラベラー			0.539157
                                            時空			0.532585
                                            世界			0.529007
                                         宇宙人			0.524593
                          デジタルワールド			0.522972
                                         侵略者			0.519479
                                         未来人			0.516680
                                         銀河系			0.505112
                                         宇宙へ			0.501737
                                         別世界			0.498040
                                   明るい未来			0.493679
                                   理想の世界			0.492330
                                      地球環境			0.488340
                                         金星人			0.486031
                                            星空			0.485491
                                            太陽			0.484105
                                         地球人			0.482406
                                            運命			0.480751
                                            大地			0.480510
                                         火星人			0.480290
                                      エウレカ			0.480114
                                            月面			0.478332
                                               星		0.476642
                                      タナトス			0.474876
                                            人間			0.474285
                                         月世界			0.473038
                                         異次元			0.472115
                                         未来へ			0.469909
                             ブラックホール			0.469258
                                      恐竜時代			0.467985
                                   最後の人間			0.467846
                                            真実			0.466832

Enter three words (EXIT to break): 恐竜 噴火 人類

Word: 恐竜  Position in vocabulary: 6929

Word: 噴火  Position in vocabulary: 7768

Word: 人類  Position in vocabulary: 3591

                                              Word              Distance
------------------------------------------------------------------------
                                      火山活動			0.588478
                                         大洪水			0.570087
                                            洪水			0.568536
                                            地震			0.525334
                                            飢饉			0.523110
                                      群発地震			0.519757
                                         大地震			0.516680
                                         干ばつ			0.514588
                                            水害			0.513399
                                      地殻変動			0.507397
                                         火砕流			0.502001
                                         山火事			0.501575
                                   爆発的噴火			0.501405
                                      山体崩壊			0.497568
                                            津波			0.493958
                                   水蒸気爆発			0.491090
                                            大火			0.488430
                                            旱魃			0.486605
                                            日食			0.472565
                                            内戦			0.468493
                                         大旱魃			0.468090
                                         寒冷化			0.463165
                                      武力衝突			0.460845
                                         暴風雨			0.460724
                                            崩壊			0.460065
                                         磁気嵐			0.459379
                                            争乱			0.458475
                                      天変地異			0.457827
                                            高潮			0.457417
                                            恐慌			0.455366
                                            観測			0.453862
                                         溶岩流			0.451336
                                            火災			0.450723
                                         核戦争			0.450222
                                      海面上昇			0.449969
                                            氾濫			0.448539
                                            戦乱			0.447700
                                            災厄			0.446214
                                      気候変動			0.446063
                                            紛争			0.442918

nter three words (EXIT to break): 過去 戦争 未来

Word: 過去  Position in vocabulary: 598

Word: 戦争  Position in vocabulary: 1053

Word: 未来  Position in vocabulary: 2337

                                              Word              Distance
------------------------------------------------------------------------
                                            革命			0.579042
                                            平和			0.551328
                                      最終戦争			0.551048
                                            大戦			0.511333
                             第三次世界大戦			0.505464
                                            戦い			0.499229
                                            聖戦			0.494336
                                      全面戦争			0.492297
                                   新しい戦争			0.487422
                                            文明			0.484664
                                      世界大戦			0.479522
                                            動乱			0.479157
                                            侵略			0.479121
                                         核戦争			0.477395
                                            破滅			0.462690
                                            内乱			0.460555
                                            戦乱			0.459921
                                            戦役			0.459181
                                            人類			0.458564
                                            闘い			0.454692
                                         総力戦			0.454031
                                            紛争			0.452444
                                      解放戦争			0.450627
                                      日米戦争			0.450438
                                               ―		0.449418
                                            内戦			0.448559
                                      独立戦争			0.448321
                                            事変			0.448053
                                            変革			0.447313
                                         大破壊			0.446041
                                            胎動			0.445219
                                            物語			0.443327
                                            作戦			0.443116
                                            ――			0.441500
                                            飽食			0.439174
                                            社会			0.438808
                                            闘争			0.437719
                                            争乱			0.436250
                                            正義			0.436185
                                      産業革命			0.435023

Enter three words (EXIT to break): 現在 核戦争 未来

Word: 現在  Position in vocabulary: 114

Word: 核戦争  Position in vocabulary: 44105

Word: 未来  Position in vocabulary: 2337

                                              Word              Distance
------------------------------------------------------------------------
                             第三次世界大戦			0.592685
                                   地球の危機			0.583607
                                         大破壊			0.581500
                                      最終戦争			0.581242
                                   新しい戦争			0.545251
                                            地球			0.533560
                                            宇宙			0.531146
                                   新しい世界			0.526614
                                            人類			0.521582
                                            真実			0.519430
                                         未来を			0.517114
                          タイムトラベラー			0.512824
                                      歴史改変			0.503098
           オルタレイション・バースト				0.501443
                             タイムトラベル			0.499473
                                            破滅			0.498174
                                ハルマゲドン			0.494760
                                         明晰夢			0.493937
                                世界の終わり			0.488566
                                            聖戦			0.486603
                                カタストロフ			0.485274
                                      日米戦争			0.483828
                                         近未来			0.479838
                                         未来へ			0.479609
                                   ビッグバン			0.479543
                                メルトダウン			0.477830
                                      無縁社会			0.476650
                                      運命の日			0.476261
                                      人類滅亡			0.476180
                                   理想の世界			0.474734
                                         新人類			0.473068
                                      文明崩壊			0.471420
                                   ヴィジョン			0.470636
                                         侵略者			0.469450
                             ビッグクランチ			0.467575
                                            虚構			0.467098
                                タイムリープ			0.465249
                                      千年王国			0.465109
                                            運命			0.464471
                                            現実			0.463786

Enter three words (EXIT to break): 女性 かわいい 男性

Word: 女性  Position in vocabulary: 404

Word: かわいい  Position in vocabulary: 19629

Word: 男性  Position in vocabulary: 936

                                              Word              Distance
------------------------------------------------------------------------
                                         可愛い			0.811681
                                         デカイ			0.683309
                                         っぽい			0.674909
                                   かっこいい			0.672885
                                      カワイイ			0.671438
                                かわいらしい			0.660587
                                   可愛らしい			0.659621
                                   カッコイイ			0.658944
                                         ダサい			0.625092
                                            怖い			0.619516
                                      かわいく			0.616060
                                      格好いい			0.615856
                                   大人っぽい			0.614768
                                         汗臭い			0.611559
                                         でかい			0.598629
                                         可愛く			0.597155
                                         エロい			0.592667
                                            ぽい			0.592332
                                         キモい			0.585848
                                      暑苦しい			0.581979
                                      愛らしい			0.579754
                                         似合う			0.579252
                                   可愛らしく			0.573437
                                かわいらしく			0.571982
                                            俺様			0.570179
                                      男らしい			0.567764
                                   恥ずかしい			0.566776
                                         ウザイ			0.563024
                                   おっかない			0.559657
                                   ちっちゃい			0.559188
                                うっとうしい			0.555609
                                            甘い			0.554824
                                   愛くるしい			0.554654
                                         キツイ			0.554243
                                      ぶりっ子			0.553716
                                         女の子			0.551877
                                   子供っぽい			0.548488
                                         モテる			0.548079
                                         っぽく			0.547141
                                         男の子			0.545460

どうでしょうか。全くぶっ飛んだ回答をしているわけでもなく、結構やっていて面白いです。他にも「人類 神 蟻」とかちょっと人間でも答えにくいような問題も出してみると楽しいかもしれません。

現在はこれらの結果を鑑みて、日本語モデルを更に増やすためにphpでプログラムを組みまして、Twitterから延々とツイートを取得してログとして収集していくという準備をしています。その実験第一回目の結果はこちら