JUMAN++の形態素解析辞書についてのメモ
黒橋・河原研究室より,新しい日本語形態素解析システムJUMAN++ ver.1.00がリリースされました(2016.9.23). これは森田一さんらのEMNLP2016の論文の実装です.
配布されているパッケージには,その新しい解析システムだけでなく,新しい形態素解析辞書も含まれています. 以前のJUMAN 7.0に含まれている形態素解析辞書は2012年公開なので,実に4年分の差分が詰まっているわけです.
格フレーム構築の研究の関係で, この形態素解析辞書の動詞まわりの整備を京大在職中に行ったので, どのような変更があるのかを,メモとして少し記します. (なお,このメモにある情報は全て公知の情報に依るものです)
JUMAN++の概要
まず,辞書について記す前に,簡単にJUMAN++の概要を述べましょう. JUMAN++という名前から受ける印象は,JUMANを少し改良したものという印象を受けるかもしれませんが,そうではありません.
まず,プログラミング言語が違います. JUMANはCで書かれていましたが, JUMAN++は,(一部JUMANから移植したものがあったとは思いますが)C++11でフルスクラッチで書かれています.
また,採用している学習アルゴリズムも異なります. JUMANではコストは人手調整だったため, コーパスからパラメータを機械学習するMeCabに長らく精度で負けていました. JUMAN++では,言語モデルを用いる新しい機械学習モデルを採用しており, そのモデルではJUMANはもちろん,MeCabも越える精度を報告しています.
なお,形態素解析の精度について考えるときは, 「形態素解析器のアルゴリズムの良さ」と 「形態素解析辞書の良さ」は別物であることに注意してください. さらに言えば,パラメータの学習にどのコーパスを使ったかによっても精度が変わるので, 比較実験するときはこのあたりを意識する必要があります. (JUMAN++で配布されているモデルは,よく使われている京大コーパスに加えて,最近公開されたKWDLCも使って学習しています)
難点は解析速度です. JUMANはMeCabより遅かったですが, JUMAN++はJUMANよりもさらに遅いです. (3月の論文ではJUMANの100倍の時間がかかると書かれています) このあたりは,精度と速度のトレードオフになるかなと思います.
JUMAN++辞書の概要
追加された語
さて,マニュアルにもあるとおり,JUMAN++ 1.00には,
- 基本語彙辞書(約3万語)
- オノマトペ辞書
- Wikipedia辞書(約83万語)
- Wiktionary辞書(約2000語)
- Webコーパス辞書(約1.1万語)
と非常に大規模な辞書が含まれています.
JUMAN 7.0の辞書と比較してみると,例えば
- 普通名詞 「飯砂」「胎果」
- 略語 「うたプリ」「ごちうさ」
- 地名/組織名 「船場」「ドンキホーテ」
- 人名 「佳村」「りえしょん」
などが新たに追加されていることが分かります.
体言に比べれば少ないですが,用言についても追加されていて, 「カビる」,「ディスる」,「怯(ひる)む」といった動詞や 「エグい」といった形容詞も追加されています.
語彙獲得の詳細については,公式マニュアルに有るとおり村脇さんのgithubレポジトリと,そこで参照されている論文が参考になると思います.
neologdとの比較
なお,最近話題の大規模辞書といえばneologdですが,
mecab-ipadic-neologd 20160929-01
を使って
先程挙げた例を試してみると,まず体言は「飯砂」「佳村」が誤って分割されてしまいました.
(もっとも,「飯砂」は分割してもそこまで問題ないとは思います.
またneologdでは「佳村はるか」が一形態素として登録されています.)
また,用言については「怯む」はneologdにありました(そもそもipadicに存在する)が,
「カビる」,「ディスる」,「エグい」はありませんでした.
では,現在のJUMAN++辞書で十分かと言うとは,そうとも言い切れません. 例えば,「なか卯」や「アイカツ」,「るるきゃん」はJUMAN++辞書にはなくneologdには有りました.
品詞体系や固有名詞の姓と名の扱い,複合語の扱いなど, それぞれの辞書の設計思想が異なるため簡単なことではないと思いますが, 幸いいずれもApache License, Version 2.0ですので, それぞれ良いところを吸収する形で発展してもらえると嬉しいな,と思います.
JUMAN++辞書の動詞
意味情報
さて,「意味情報」が充実しているのがJuman辞書の特徴です.
動かせる 動詞,*,母音動詞,基本形,動かせる,うごかせる,代表表記:動かせる/うごかせる 可能動詞:動かす/うごかす
決まる 動詞,*,子音動詞ラ行,基本形,決まる,きまる,代表表記:決まる/きまる 自他動詞:他:決める/きめる
おっしゃる 動詞,*,子音動詞ラ行イ形,基本形,おっしゃる,おっしゃる,代表表記:仰る/おっしゃる 尊敬動詞:言う/いう
壊れる 動詞,*,母音動詞,基本形,壊れる,こわれる,代表表記:壊れる/こわれる 自他動詞:他:壊す/こわす
といったように,対応する動詞がある場合はそれを「意味情報」として保持しています. (その他にも色々な情報が付与されているので,詳しくはマニュアルをご覧ください) そのため,述語項構造解析や格フレーム構築などの,意味処理を行うには,とても便利な辞書です.
実際,これを使って,格フレーム構築の研究を行い,論文を発表しました. このあたりの話は,以前の日記に書きました.
動詞の語彙整備
その論文に書いたことなのですが,従来のJUMAN辞書に登録されていない動詞がいくつか有りました.
1つ目は「可能動詞」です.
母音動詞とよばれるタイプの動詞(例: 寝る,着る)の 接尾辞「られる」をつけることで可能形になります(例: 寝られる,着られる).
一方, 子音動詞とよばれるタイプの動詞(例:読む,切る)の可能形は,活用が異なる別の動詞になります(例:読める,切れる). これを「可能動詞」とよびます. 活用も異なる別の動詞になるため,辞書に登録しておかないと形態素解析に失敗します. ところが,「涙ぐめる」(例文: あの映画で涙ぐめる若さが羨ましい)のように 一部の動詞が登録されていなかったため,子音動詞から可能動詞を自動生成して機械的に登録することにしました.
ただし,「刺させる」「泡立てる」のように可能形として用いられることが極めて考 えにくいにも関わらず,形態素解析に曖昧性を増やしてしまう一部は除外しました. このあたりの話も論文に書いてありますので,興味のある方はご覧ください.
2つ目は「サ変動詞に対応するサ行子音動詞」です. 「愛する」に対する「愛す」のように,サ変動詞に対応するサ行子音動詞は,よく使われるものは登録されていました. しかし,「察する」に対する「察す」のように,一部の動詞は登録されていませんでした. そのため,「彼の心境を察せば文句は言えない」のように基本条件形で使われている文では従来のJUMAN辞書では解析に失敗していました. そこで一部の例外を除いて,これも機械的に登録するようにしました.
この2つが,新しい辞書における私の主なコントリビューションです. (もちろん,私単独の成果ではなく,論文の共著者をはじめ,他のスタッフの方々との議論があって成立した仕事です)
さいごに
ここに書いた事柄の他にも,新しいJUMAN++辞書には細々とした改善が積み重ねられています. (興味の有る方は辞書のdiffをとってみてください)
形態素解析の辞書は過去数年間,新しい(オープンな)ものが出てこなかったと覚えています. しかし,neologdやJUMAN++辞書は今後も定期的な更新が予定されているとのことですので, 今後の形態素解析辞書の発展が楽しみです.