LoginSignup
1145
1086

More than 5 years have passed since last update.

新形態素解析器JUMAN++を触ってみたけど思ったより高精度でMeCabから乗り換えようかと思った話

Last updated at Posted at 2016-10-12

JUMAN++は最近黒橋・河原研究室から発表された、JUMANの後継となる形態素解析器です。
これまでの形態素解析器と比べて違うのは、RNN言語モデルを用いて意味的自然さを考慮する、ニューラルネットワークを利用した形態素解析器となっている点です。
速度や語彙等の課題はあるものの、解析能力自体はMeCab以上なので、導入方法と共に触ってみた所感を述べてみます。

導入方法

前提

OS X Yosemite 10.10.5
VirtualBox 5.1.6
Vagrant 1.8.6

インストール

vagrant boxは bento/ubuntu-16.04を使用します。
推奨はCentOSですが、自分の環境ではCentOSではビルドに失敗しました。
また、OSはubuntu16.04でもboxによっては上手くインストールすることができないため、bentoのboxがおすすめです。

$ vagrant init bento/ubuntu-16.04
$ vagrant up --provider virtualbox
$ vagrant ssh

ssh接続ができたら、JUMAN++を使うための前提パッケージをインストールしていきます。
(公式ドキュメントではgperftoolsが推奨されていますが、自分の環境では逆に10倍ほど遅くなったので見送りです)

$ sudo apt install libboost-dev # Boostインストール
$ sudo apt install build-essential # gcc等ビルドツールをインストール

これで前提パッケージのインストールは完了です。
いよいよJUMAN++本体をインストールしていきます。

$ wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.01.tar.xz
$ tar xJvf jumanpp-1.01.tar.xz
$ cd jumanpp-1.01/
$ ./configure
$ make
$ sudo make install

インストールが完了しました。
あとは jumanpp で好きな文章を形態素解析します。

$ jumanpp
見せてもらおうか、JUMAN++の性能とやらを
見せて みせて 見せる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見せる/みせる 付属動詞候補(タ系) 使役動詞:見る/みる"
もらおう もらおう もらう 接尾辞 14 動詞性接尾辞 7 子音動詞ワ行 12 意志形 4 "代表表記:もらう/もらう"
か か か 助詞 9 接続助詞 3 * 0 * 0 NIL
、 、 、 特殊 1 読点 2 * 0 * 0 NIL
JUMAN JUMAN JUMAN 未定義語 15 その他 1 * 0 * 0 "品詞推定:名詞"
+ + + 未定義語 15 その他 1 * 0 * 0 "品詞推定:名詞"
+ + + 未定義語 15 その他 1 * 0 * 0 "品詞推定:名詞"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
性能 せいのう 性能 名詞 6 普通名詞 1 * 0 * 0 "代表表記:性能/せいのう カテゴリ:抽象物"
と と と 助詞 9 格助詞 1 * 0 * 0 NIL
やら やら やら 助詞 9 接続助詞 3 * 0 * 0 NIL
を を を 助詞 9 格助詞 1 * 0 * 0 NIL

(追記)その他

Mac

JUMAN++のHomebrewフォーミュラができたようです.
(参考:http://chezou.hatenablog.com/entry/2016/10/15/162047)

$ brew tap chezou/homebrew-jumanpp
$ brew install jumanpp

楽ちん.

JUMAN++とMeCabの比較

まず、普通の書き言葉を解析する限りではMeCab+mecab-ipadic-NEologd(NEologd)より特段優れているとは感じませんでした。
語彙数自体はNEologdが多いので、MeCabの方が高精度なこともあると思います。
ですが、以下のようなケースでは、JUMAN++はMeCabよりも精度を発揮します。

1.表記揺れ
2.話し言葉
3.未定義語

1.表記揺れ

例えばGoogleは、グーグル、ぐーぐる、と表記方法が複数存在します。
ひらがなで入力した時に正しく解析できるかテストしてみます。

JUMAN++
けんさくえんじんぐーぐる
けんさく けんさく けんさく 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:検索/けんさく カテゴリ:抽象物 ドメイン:家庭・暮らし"
@ けんさく けんさく けんさく 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:建策/けんさく カテゴリ:抽象物"
えんじん えんじん えんじん 名詞 6 普通名詞 1 * 0 * 0 "代表表記:円陣/えんじん カテゴリ:形・模様"
ぐーぐる ぐぐる ぐぐる 名詞 6 普通名詞 1 * 0 * 0 "自動獲得:Wikipedia Wikipediaリダイレクト:Google 非標準表記"
MeCab
けんさくえんじんぐーぐる
けんさ   名詞,サ変接続,*,*,*,*,検査,ケンサ,ケンサ
くえん   動詞,自立,*,*,一段,体言接続特殊,くえる,クエン,クエン
じん  名詞,一般,*,*,*,*,じん,ジン,ジン
ぐー  名詞,形容動詞語幹,*,*,*,*,グー,グー,グー
ぐる  名詞,一般,*,*,*,*,ぐる,グル,グル

思った以上にJUMAN++の圧勝でした。
RNNすごい。

2.話し言葉

JUMAN++ではくだけた表現に対応するため動的に形態素を認識するので、辞書中と異なる表記でも形態素解析を行うことができます。
そのため「おはよーございます」や「行きたぁぁぁい」のようなくだけた表現の解析が可能になります。

JUMAN++
ぉぃしかったでーーす
ぉぃしかった おいしかった おいしい 形容詞 3 * 0 イ形容詞イ段 19 タ形 8 "代表表記:美味しい/おいしい ドメイン:料理・食事 反義:形容詞:まずい/まずい 非標準表記"
@ ぉぃしかった おいしかった おいしい 形容詞 3 * 0 イ形容詞イ段 19 タ形 8 "代表表記:美味しい/おいしい ドメイン:料理・食事 反義:形容詞:まずい/まずい 非標準表記"
でーーす です です 助動詞 5 * 0 無活用型 26 基本形 2 NIL
MeCab
ぉぃし  形容詞,自立,*,*,形容詞・イ段,ガル接続,おいしい,オイシ,オイシ
かっ    動詞,自立,*,*,五段・ラ行,連用タ接続,かる,カッ,カッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
で      助詞,接続助詞,*,*,*,*,で,デ,デ
ーー    名詞,一般,*,*,*,*,*
す      動詞,自立,*,*,サ変・スル,文語基本形,する,ス,ス

くだけた表現が多いSNS等を解析する時、JUMAN++が適していると言えそうです。

3.未定義語

正確にはNEologdの未定義語です。
NEologdはWebから大量に情報収集し、ipadicを大幅に強化しますが
* 「補殺」や「駐輪所」のような一部の頻出語が含まれていない
* 「すもももももも」「なのは完売」等、文章が固有名詞として登録されている
点が個人的に不満でした。
(※以下の結果は2016年7月7日更新のNEologdの結果です.語彙の問題については最新版では改善されているようです)
JUMAN++も同様にWebから辞書を構築しますが、スクレイピングがよりスマートで、必要な語を適切に網羅することに成功しています。

JUMAN++
駐輪所で返却可能
駐輪所 駐輪所 駐輪所 名詞 6 普通名詞 1 * 0 * 0 "自動獲得:Wikipedia Wikipediaページ内一覧:熊本国府高等学校 読み不明"
で で で 助詞 9 格助詞 1 * 0 * 0 NIL
返却 へんきゃく 返却 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:返却/へんきゃく カテゴリ:抽象物"
可能 かのう 可能だ 形容詞 3 * 0 ナ形容詞 21 語幹 1 "代表表記:可能だ/かのうだ 反義:形容詞:不可能だ/ふかのうだ"
MeCab
駐輪所で返却可能
駐 接頭詞,名詞接続,*,*,*,*,駐,チュウ,チュー
輪 名詞,一般,*,*,*,*,輪,ワ,ワ
所 名詞,接尾,一般,*,*,*,所,ショ,ショ
で 助詞,格助詞,一般,*,*,*,で,デ,デ
返却  名詞,サ変接続,*,*,*,*,返却,ヘンキャク,ヘンキャク
可能  名詞,形容動詞語幹,*,*,*,*,可能,カノウ,カノー

JUMAN++だと綺麗な境界で区切れています。
(「若沖」(正しくは「若冲」)のような誤字も収集してしまっているので、そうした点は今後の改善が望まれます)

JUMAN++のメリット・デメリット

JUMAN++のメリット

  • 意味的自然さに基づいた解析が可能
  • 話し言葉に強い
  • 表記揺れに強い
  • 辞書がスマート
  • MeCabほど細かくに品詞分けしない(解析結果が理解しやすい)
  • カテゴリ・ドメインで意味解析ができる
  • Pythonラッパーが存在(インストール方法はこちら)

JUMAN++のデメリット

  • 辞書の語彙はNEologdの方が充実している
  • MeCabほど細かく品詞分けしない(詳細分析に適さない?)
  • 解析が遅い
  • 読み獲得ができない文字も存在する

感想

スピードが必要とされる場合や、確実に読みを取得したい場合はMeCab。
それ以外はJUMAN++がベストプラクティスかな、と感じました。
また文章の切り出し方も両者それぞれなので、目的や用途によって使い分けてもいいかもしれません。

ただし

  • 辞書・モデルの改良が予定されている事
  • 動作の高速化が予定されている事
  • 部分アノテーションによる簡単な精度向上方法が用意されている事

を考えると、いずれはMeCabに代わるデファクトスタンダードとなるかもしれません。

(追記)部分アノテーションについて

通常形態素解析の誤りを修正するのには専門知識が必要ですが、JUMAN++では簡単に誤りを訂正できます。

この 木 の 実は 、 発芽 し ない

を修正する場合、以下のように適切な境界にタブを挿入します。

この木の \t 実 \t は \t   、発芽しない

どんなに高性能の形態素解析器でも解析誤りは避けられませんが、JUMAN++ではこの部分アノテーションを訓練データに追加することで、二度と同じ過ちを繰り返すことがなくなります。
また、公式ホームページの部分アノテーションを共有するページにアノテーションを投稿することで学習コーパスに反映され、JUMAN++の精度が向上していきます。

結論

スピードと語彙数以外はほぼJUMAN++が勝っていそうです。

更新履歴

2016/10/13 比較部分を追記・修正
2016/10/14 部分アノテーションについて追記
2016/10/19 Macインストールについて追記
2016/10/27 NEologd関連の追記・修正
2016/11/01 NEologdの話し言葉の例を最新に修正

参考

黒橋・河原研究室 日本語形態素解析システム JUMAN++
http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN%2B%2B
Ubuntu 14.04 に gcc、gdb などの開発ツールをインストールする
http://qiita.com/moris/items/02c01a239b9701336260
boostのインストール
http://kaworu.jpn.org/cpp/boost%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB#Ubuntu
RNNLMベースの形態素解析器 JUMAN++ をhomebrewでインストールできるようにした
http://chezou.hatenablog.com/entry/2016/10/15/162047

1145
1086
15

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1145
1086