2014年04月18日

Wikipediaのデータでword2vecした出力結果のメモ

ここのところ遅ればせながらword2vecと戯れ中。学習にかかる時間も短いし、うまく使えばいろいろ役に立ちそう。

とりあえずWikipediaのデータを突っ込んだ結果などを。

形態素解析時に、姓と名を連結してみたり、接尾語と接頭語を連結してみたり、カタカナの連続を連結してみたりしている。

以下はdistanceした時の上位。上が入力ワード、下が出力されたワード。

田中

高橋, 佐藤, 岡田, 鈴木, 橋本, 渡辺, 山本, 前田, 藤井, 佐々木
鈴木

佐藤, 田中, 伊藤, 高橋, 渡辺, 加藤, 山本, 斉藤, 佐々木, 中西

上は良い例。悪い例として、中村を入力すると妙な結果が出た。

中村

里子, 中津川初, 繪, 田中, 天海春香役, 天海春香, 今井, 三浦, 加藤, 吉田

中村繪里子さんという声優さんがいて(一般的な人名でないため、繪と里子が別れてしまっている)、中津川初と天海春香は演じているキャラらしい。「天海春香役」という単語になっているのは、形態素解析をする際に試しに接頭語と接尾語を連結させてみた為。こういう結果を見ると、連結したのは間違いだった気がする。

別のデータで中村を解析した時は歌舞伎に引っ張られたこともあった。中村は敵である。

芸能人の苗字とかも引っ張られる。

志村

バカ殿様, ぶつ園, 加藤茶, 家来役, 志村通, ♀♂, 志村屋, 大爆笑, ファミリーランド内, ょうぶだぁ

「ぶつ園」はおそらく「どうぶつ園」、「ょうぶだぁ」は「だいじょうぶだぁ」がうまく形態素解析できずに切れている。

姓名が連続する場合は連結させるようにしたので、著名人の近さは割と取れた。たとえばイチローと入力すると、メジャーリーガーの名前が並ぶ。

イチロー

松井秀喜, 田口壮, 伊良部秀輝, 新庄剛志, 佐々木主浩, 野茂英雄, 前田智徳, 山崎武司, 井川慶, 野口茂樹, リリーフエース

三浦知良の場合は、サッカー選手の名前が取れる。

三浦知良

中山雅史, 稲本潤一, 柳沢敦, 北澤豪, 井原正巳, 秋田豊, 中村俊輔, 前園真聖, 藤田俊哉, 久保竜彦, 中澤佑二
芥川龍之介

太宰治, 谷崎潤一郎, 川端康成, 夏目漱石, 坂口安吾, 泉鏡花, 森鴎外, 堀辰雄, 中島敦, 井伏鱒二, 随筆

羽生三冠の結果なんて人間が出しても同じような並びになりそう。

羽生善治

谷川浩司, 森内俊之, 佐藤康光, 中原誠, 米長邦雄, 大山康晴, 加藤一二三, 内藤國雄, 藤井猛, 山崎隆之
鳥山明

永井豪, 大友克洋, 臼井儀人, 尾田栄一郎, オオイシナホ, 岡野剛, 浜崎達也, 島本和彦, コミカライズ
サザンオールスターズ

チェッカーズ, 桑田佳祐, 原由子, 松任谷由実, 矢沢永吉, 高橋真梨子, 郷ひろみ, 山下久美子, 小泉今日子

外国人の名前は姓名を連結させてないので、日本人名ほどはうまくいかなかった。

ドストエフスキー

フョードル, ドストエーフスキイ, ソログープ, スースロワ, ドストイェフスキイ

フョードルはドストエフスキーのファーストネーム。スースロワは恋人。ソログープはフョードル・ソログープ。ロシアの詩人でおそらくフョードルの共起に引っ張られたのではないかと。

中黒で連結すれば海外の人名も取れるけど他のいらないものもくっつけてしまいそうなので、できれば辞書で対応したいところ。

プログラミング言語もそれっぽい結果が出る。

Java

JavaScript, Perl, JVM, API, Python, ソースコード, Unix, Qt, Runtime, ライブラリ, Servlet, 
Scala

Clojure, Python, Esterel, Bindings, Erlang, Stackless, Vala, Eiffel, OCaml, Oberon, Haxe

PerlはUnixが入ってるところがなんかいい。

Perl

Python, Java, JavaScript, Smalltalk, Erlang, MySQL, Unix, コンパイラ, MATLAB, API, OCaml
Python

Perl, JavaScript, Java, Ruby, Smalltalk, コンパイラ, Erlang, Stackless, Qt, MATLAB, ライブラリ

犬の結果は少し微妙。

犬

猫, イヌ, 柴犬, 使いよう, 飼っ

「使いよう」ってなんだろうと思って調べたら、「犬とハサミは使いよう」というライトノベルがあるらしい。Wikipediaはアニメやライトノベルの情報が充実しているので、そちらに引っ張られやすい部分はあります。というかインターネット自体がそっち系の情報が多いわけだけど。

「飼っ」は「飼う」の活用ですが、これ、読み込ませるテキストは基本形にした方が良さそうですね。次からやろう。

哲学的な答えが返ってくることもある。

愛

恋, 永遠, 哀しみ, 君, ハート(トランプ)愛, 夢, 涙

愛は永遠や夢を含みつつも、哀しみや涙とも近いそうです。

実行したコマンドの引数はthreadsを変えたくらいでほぼデフォルト。

./word2vec -train jawiki-latest-pages-articles.xml.bz2.txt -output vectors_wikipedia.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 4 -binary 1

読み込ませたテキストファイルの大きさは6.2G。

結果を見て「接尾語は別にくっつけなくて良い」ということと、「動詞は基本形にしたい」。中黒は試しにくっつけてみて出現回数の閾値上げた方がいいかもということを思った。あと小手先でなんとかしようとしてもデフォルトの辞書だと厳しい。

ベクトルの足し引きの方はこれよりさらにうまくいかない。Wikipediaだと固有名詞は揃うのだけど、感情を伴った言葉とかは足りてないので、他の情報ソースと混ぜて試してみたいところ。青空文庫とか、livedoorニュースとか、Yahoo知恵袋とか。

うまくいった例。

王 → 男 | 王妃 → 女
東京 → 横浜 | ニューヨーク → フィラデルフィア
渋谷 → 新宿 | 札幌 → 函館
CD → DVD | DVD → Blu-ray
アカギ → 麻雀 | カイジ → 賭博
mysql → oracle | 時計 → 懐中時計
日本 → 韓国 | フィンランド → スウェーデン
好き → 嫌い | 愛 → 哀しみ
東京 → 都会 | 埼玉 → 田舎
愛 → 結婚 | 喧嘩 → 別居
名古屋 → エビフライ | 仙台 → 牛タン
夏 → 冬 | 春 → 秋

気持ちはわからなくもない例

日本 → 首相 | アメリカ → 副大統領
ホテル → 旅館 | アウトドア → 釣り
ヤクザ → 組長 | 会社 → 親会社
穴 → 入る | 壁 → 進む
地震 → 震度 | 台風 → 暴風域
カレー → 辛い | ケーキ → 美味しそう (※2位は甘いでした)
麻薬 → 逮捕 | 善行 → 慰留
ラピュタ → 空 | ナウシカ → 飛ぶ
原宿 → クレープ | 新宿 → オムライス
真実 → 虚偽 | 右 → 両

ダメな例。

ホテル → 旅館 | ベースボール → ワールド
穴 → 掘る | 壁 → 石壁
富士山 → チョモランマ | スカイツリー → ゼベックオンライン
カレー → 辛い | 砂糖 → 温かい
嘘 → 本当 | 偽 → あくまで
雨 → 雲 | 晴れ → 山人判
妖精 → ブラウニー | 妖怪 → シーヴァ

今後の課題

次回は軽く辞書を拡張して挑みたい。あと、Wikipediaだけでは文書として厳しい。Twitter、livedoorニュース、アンサイクロペディア、Yahoo知恵袋等、他に使えそうな文書も混ぜるとどうなるかも見る。

同じ事をアンサイクロペディアのデータ(136MB)だけでやってみたけどあまり芳しい結果は出なかった。内容よりも量的な問題だと思われる。


追記 青空文庫でもやってみる http://blog.mwsoft.jp/article/93612059.html