黒橋研究室で開発している日本語形態素解析器 JUMAN についてのメモ。

何をしているのか。他の解析器 (ChaSenMecab) との比較など。

最近だと Yahoo! JAPAN の形態素解析 API なんてものがあるけど、仕様がよくわからない。

タスク: 日本語の形態素解析

  1. 文を形態素に区切る
  2. 各形態素に品詞を割り当てる

内容物

プログラムは放置で、実質的に辞書のみの更新。誰かどうにかしてほしいレガシーコード。
文法辞書と形態素辞書は利用者が自由に定義できるとマニュアルではうたっているが、デフォルト以外の辞書が配布されている例を知らない。
ChaSen と MeCab は配布のレベルで、プログラムと辞書を分離している。
IPAdic, NAIST jdic, UniDicなど

エンコーディング

入力

形態素解析は非常に局所的な文脈しか見ないので、別に複数文を一度に入れても問題ない。構文解析でそれをやると、計算量が爆発するし、結果が気持ち悪いことになる。

出力

子ども こども 子ども 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:人 代表表記:子供/こども"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
リンゴ りんご リンゴ 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:植物:人工物-食べ物 ドメイン:料理・食事 代表表記:林檎/りんご"
が が が 助詞 9 格助詞 1 * 0 * 0 NIL
すきだ すきだ すきだ 形容詞 3 * 0 ナ形容詞 21 基本形 2 "代表表記:好きだ/すきだ"
EOS

処理内容

品詞体系

UniDic の品詞体系の位置づけがよく分からない。IPA 品詞体系と同じく学校文法ベースだが、完全に同じではないのか

候補の選択

  1. 形態素辞書と連接辞書により、形態素と、形態素同士の連接にコストを付与
  2. コスト最小のパスを選択

パラメータ (コスト)

精度で完全に MeCab に負けているが、放置状態

同形

かぜ かぜ かぜ 名詞 6 普通名詞 1 * 0 * 0 "漢字読み:訓 カテゴリ:抽象物 代表表記:風/かぜ"
@ かぜ かぜ かぜ 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:抽象物 ドメイン:健康・医学 代表表記:風邪/かぜ"
で で で 助詞 9 格助詞 1 * 0 * 0 NIL
おくれた おくれた おくれる 動詞 2 * 0 母音動詞 1 タ形 10 "可能動詞:送る/おくる 代表表記:送れる/おくれる"
@ おくれた おくれた おくれる 動詞 2 * 0 母音動詞 1 タ形 10 "付属動詞候補(基本) 自他動詞:他:遅らせる/おくらせる 自他動詞:他:遅らす/おくらす 代表表記:遅れる/おくれる"
EOS
同形が出力されるのは分割とコストが同じ場合のみという微妙仕様 (e.g., おさない == 幼い != 押さない) だが、結構使える
同じコストになるのはコストを人手で調整しているから
くる:子音動詞ラ行 (繰る) と くる:カ変動詞 (来る) のように品詞が一部違っても同形になる
MeCab は同形の曖昧性を考慮せずにパラメータを推定しているので、どちらとも言えないような場合でも、とにかく一つの解に決めてしまう。N-best にすれば複数の解を出力するが、N をいくつにすれば良いかは事前にはわからない。
そもそも同形の曖昧性解消を N-gram の情報で行うのが適当とも思えないから、JUMAN/KNP の方針は妥当だろう
「おくれた」のような用言の曖昧性解消は、KNP が格フレームを使って行う。その結果が正しいかは誰もちゃんと調べていないはず。

辞書の整備方針

新聞記事に出てこない難しい単語や固有名詞などは、IPA dic の方が豊富
JUMAN/KNP を用いた日本語固有表現認識の論文でも、精度を上げるために MeCab の解析結果を参照するという変態的な処理をやっている
それ以外にも、なぜ登録されているのか不思議な形態素が辞書に残っていたりする

代表表記

形態素よりも長い「キーワード」レベルでの表現の揺れの吸収はキーワード蒸留型クラスタリングによる大規模ウェブ情報の俯瞰が詳しい (ヒューリスティクスの塊)

カテゴリ・ドメイン

カテゴリ・ドメインを作った目的の一つは言葉同士の意味の近さを大雑把にはかること。シソーラスを使うのが普通のやり方だけど、粒度が細かすぎたり、シソーラスと異なる分類軸もあったりして、思ったほど直観に近い値を返さない。他には権利の問題とか。カテゴリとドメインという2軸を組み合わせれば、大雑把な分類としては十分ではないかという見通しだったらしい。

その他の意味情報

その他の既知の問題

付属の Juman.pm

ChaSen と MeCab の Perl モジュールは、XS を使ってライブラリの関数をスクリプト側から直接呼び出している。Juman.pm はプロセス間通信で JUMAN 本体とデータをやりとりするので、やや効率が悪い。
ChaSen と MeCab の Perl モジュールは、基本的に形態素解析処理を呼び出すためだけのライブラリ。Juman.pm は、それに加えて、形態素解析結果を Perl のオブジェクトに変換した上で操作を行う機能を提供している。だから、例えば、一旦ファイルに書き出しておいた形態素解析結果も読み込める。形態素解析結果を使ったアプリケーションを作るなら、Juman.pm の方が便利なはず。
バインディングされている言語が Perl のみ。研究室が Perl に囲い込まれている。脱 Perl 計画に進展なし。
戻る