「Yahoo!の形態素解析をMeCabで無理やり再現してみる」を試してみて
Yahoo!の形態素解析をMeCabで無理やり再現してみる を読む。MeCabで形態素解析器を作りたい場合は以下の二つの言語リソースが必要です。1. 辞書 (単語と品詞のペアの集合)2. 入力文と、それに対応する正解出力ペア(正解データ)学習させるときには、辞書と、正解データを用意しなきゃならない。これが面倒だから、なかなか自作の辞書を作る気にならない。Wikipedia のデータをダウンロードすれば、大量のテキスト文章は得られるけれども、正解出力を手作業で作るのは大変だし、元辞書も作らなきゃならないから、不可能に近い。じゃわ、正解出力をちゃんと手作業で作るのではなくて、Yahoo! API の 日本語形態素解析Webサービス を使って得られた解析結果を擬似的に 正解と見なして、そのデータから学習することができるでしょうと。辞書も解析結果をソートしてユニークなものだけ残せばよいしと。そうして学習させたものは、結果的に、Yahoo 形態素解析と同じような結果が得られることになろうと。原理的には。試みとしてはおもしろい。けど、Yahoo! API を使って「陸奥圓明流外伝 修羅の刻」とか形態素解析させても、MeCab で解析させたものと変わらないようなものしか返ってこない。ちょっとがっかり。現状の MeCab とほぼ同じような結果しか返って来ないのだったら、あんまし意味ないもんね。と思って、「日本語、ドイツ語、スワヒリ語。」などを Yahoo で解析すると、それぞれ一語で返される。MeCab だと「日本語、ドイツ//語、スワヒリ//語」と分けられる。「スカンジナビア語」は、どちらも「スカンジナビア//語」。まだ、全部の言語が登録されているわけではない感じ。「防護服、犠牲者、生存者、名古屋空港」のような単語も Yahoo だと一単語だけれど、MeCab だと「防護//服、犠牲//者、生存//者、名古屋//空港」と分かれる。Yahoo APIの返してくる解析結果は、イメージ的には MeCab の単語登録をもっとたくさん入れてやった感じで、基本的には同じような動き。Yahoo は、一単語にした方が何かと扱いやすいものについては、積極的に登録していっているという感じなんだろうか。「歎異抄」みたいのも登録されているから一単語になる。Wikipedia の中にある『』で囲まれているものについては、基本的に書籍、作品等の名前のはずだから、まとめて登録しちゃうとかありかもしれないなとかふと思う。何はともあれ、これは辞書作りの基本を体験してもらおうというデモンストレーションの一種なわけだな。収穫として、webma.tar.gz に含まれている mkmecabdic.pl を使えば、簡単に活用がある単語の辞書登録ができるということに気がついた。MeCab は活用がない語の登録は比較的楽なのだが、活用がある単語の登録はやたらと面倒。自分で活用形をすべて登録しなければならないから。ということで、例えば、ナウい 形容詞,形容,基本形,ナウい,なうい,なういのように基本形だけ登録したファイル (katsuyo.csv)を作って、$ ./mkmecabdic.pl katsuyo.csvとしてやれば、ナウ,0,0,0,形容詞,形容,ガル接続,ナウ,ナウ,なういナウけれ,0,0,0,形容詞,形容,仮定形,ナウけれ,なうけれ,なういナウけりゃ,0,0,0,形容詞,形容,仮定縮約1,ナウけりゃ,なうけりゃ,なういナウきゃ,0,0,0,形容詞,形容,仮定縮約2,ナウきゃ,なうきゃ,なういナウき,0,0,0,形容詞,形容,体言接続,ナウき,なうき,なういナウかれ,0,0,0,形容詞,形容,命令e,ナウかれ,なうかれ,なういナウい,0,0,0,形容詞,形容,基本形,ナウい,なうい,なういナウし,0,0,0,形容詞,形容,文語基本形,ナウし,なうし,なういナウかろ,0,0,0,形容詞,形容,未然ウ接続,ナウかろ,なうかろ,なういナウから,0,0,0,形容詞,形容,未然ヌ接続,ナウから,なうから,なういナウう,0,0,0,形容詞,形容,連用ゴザイ接続,ナウう,なうう,なういナウぅ,0,0,0,形容詞,形容,連用ゴザイ接続,ナウぅ,なうぅ,なういナウかっ,0,0,0,形容詞,形容,連用タ接続,ナウかっ,なうかっ,なういナウく,0,0,0,形容詞,形容,連用テ接続,ナウく,なうく,なういナウくっ,0,0,0,形容詞,形容,連用テ接続,ナウくっ,なうくっ,なういと、活用系を展開してくれるので後はコストの調整をすればよしと。83's: MeCabの辞書作成補助 だと、別途ローマ字ひらがな変換ライブラリ suikyoと、茶筌に(多分)付属しているcforms.chaが必要です。まー基本的にはcforms.chaでなくても、同じフォーマットで、かつ活用形の中に「基本形」が入っていれば動くはずです。あとRubyも必須です。と、ちょっと環境を整えるのが面倒に感じて(めんどくさがりなので)、躊躇したが、これなら楽に活用語を登録できる。ん、でもよく見たら、通常の MeCab の辞書だと読みや発音はカタカナで入力するのに、なんでこれはひらがなでないとダメなのかな。Yahoo API がひらがなで読みを返してくるから、それに合わせてるのか、なるほどと思いつつ、んー、辞書の構造的にはどっちでも入れられないことはないのか。発音のところも、表記が入っていたりするけど、それでも大丈夫なわけか。結果の出力にしか使わないからなのか。何はともあれ、一回、体験してみると、やってみるかなという気になるわけだな。オリジナル辞書/コーパスからのパラメータ推定 を眺めていてふと思った。あっそっか。ルー語変換を MeCab だけで実現 みたいのとかできるのこういうことねと改めて思う。華々しく,51,51,4244,ブリリアントゥっぽく「外来語」言い換え提案 なんかも、同じように辞書を作ってやれば、言い換えをできちゃうわけだな。ルー語変換みたいに変換してくれるページを作って言い換えたものが分かるようにしてやれば、言い換え提案をそのまま採用したらどの程度影響があるかとか、見やすいのにね。と話がそれて終わる。