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次元のベクトルで演算していますが、平面ベクトルで表現するとこんな感じです。
こんな感じに簡単に私達の知らない情報を引き抜けるんですね。信じるか信じないかはアナタ次第ですが。では以下ではいくつか気になった演算をしてみた結果を。
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から延々とツイートを取得してログとして収集していくという準備をしています。その実験第一回目の結果はこちら!
投稿者プロフィール
最新の投稿
- 2018.09.01AMD動画エンコードでGPUを活用する
- 2018.03.26phpツイートIDからsnowflakeを用いて投稿時刻のミリ秒を算出
- 2018.02.18phpphpMyAdminのインストール方法(Ubuntu)
- 2018.01.07未分類新聞を折らずに郵送する方法
最近のコメント