RNNLMベースの形態素解析器 JUMAN++ をhomebrewでインストールできるようにした

京大の黒橋・河原研から最近出たJUMAN++をmacOSのhomebrewでinstallできるようにしました。

JUMAN++はRNNLMというディープラーニングベースの言語モデルを使っています。 こちらの記事を読んで知ったという方も多いのではないでしょうか。

<iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Friverwell%2Fitems%2F438e88427363511e9f28" title="新形態素解析器JUMAN++を触ってみたけど思ったより高精度でMeCabから乗り換えようかと思った話 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://qiita.com/riverwell/items/438e88427363511e9f28">qiita.com</a></cite>

インストール方法は、現段階では後述する理由のためhomebrew-coreにはまだ入っていないので、tapを使ってください。

[2016/10/23追記] やっと本家homebrewに入ったので、tapは要らなくなりました。 [/追記]

$ brew install jumanpp

github

<iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fchezou%2Fhomebrew-jumanpp" title="chezou/homebrew-jumanpp" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/chezou/homebrew-jumanpp">github.com</a></cite>

JUMAN++のサイト凄い

JUMAN++のサイトには解析を試せるWebアプリケーションがあるのですが、それがなかなか面白いです。

このリンクに対して、

http://tulip.kuee.kyoto-u.ac.jp/demo/jumanpp_lattice?text=%E3%81%A9%E3%81%86%E3%82%82%E3%80%81julialang%E7%95%8C%E3%81%AE%E9%A0%91%E5%9B%BA%E3%81%8A%E3%81%98%E3%81%95%E3%82%93%E3%81%A7%E3%81%99

こういうラティスを出力してくれます。

楽しい

JUMAN++とMeCabどっちがいいの?

冒頭のQiitaの記事に対してはRNNLMベースだからというよりは、辞書の改善によるものなのでは?という話はMeCab作者の工藤さんからも指摘があります。

> これってほとんど辞書による改善だと思う…https://t.co/NnbXreOR48 > > — Taku Kudo (@taku910) October 13, 2016

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

@overlast さんが精力的に更新をしているneologdとの比較をしているため、MeCab側としては現在普通に入手可能なMeCabの辞書としては最も良いものを使っていると思います。 なので、neologd以前に良く問題とされていた「最近の用語が入っていない」という部分に関しては議論の対象にはなっていませんね。

表記ゆれや長音記号のハンドリングに関してはJUMANの頃からやっていたことです。 JUMANの頃からWikipediaを使った語彙獲得やオノマトペの処理など、未知語獲得を黒橋研として頑張っている印象がありました。

また、部分アノテーションか辞書かという話に関しては、以前から議論が分かれている所です。

<iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fplus.google.com%2F107334123935896432800%2Fposts%2FVayh8mndSZi" title="形態素解析の分野適応は、「点推定+(部分)アノテーション」と「品詞付き単語追加」でどう違うのかという疑問を持ったので、それをつぶやいたところ、@zzzelch…" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://plus.google.com/107334123935896432800/posts/Vayh8mndSZi">plus.google.com</a></cite>

JUMAN++(の前のJUMAN)とMeCabの比較は以下が詳しいのですが、使っている文法が違ったりなど癖が違うので注意が必要です。

<iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Frekken.g.hatena.ne.jp%2Fmurawaki%2F20140402%2Fp1" title="JUMAN メモ - murawaki の雑記" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://rekken.g.hatena.ne.jp/murawaki/20140402/p1">rekken.g.hatena.ne.jp</a></cite>

個人的にはneologdが頻繁に辞書を更新してリリースし続けている状況に対して、JUMAN++の側がどれだけの頻度で更新されたモデルが出せるというところが実用的な差になるのではないでしょうか。普通のエンジニアが部分アノテーションのためのコーパスを作り続けるのは、正直かなり厳しいと思います。*1JUMAN++の論文でも、4万5千文を再学習することで性能がMeCabを越えたと言っています。

現段階では、実際に比較をしてみてどちらが用途に合うのかを判断するのが良いと思います。

なお、読み推定がしたい場合はKyteaを使うといいと思います :)

homebrew-coreに入っていない理由

この記事を書いている段階では、upstream(v1.01)のMakefileにあるバグのため、make-jオプションを付与して並列でビルドすると失敗する問題があります。

このパッチを当てれば大丈夫です。<script src="https://gist.github.com/chezou/076cb9c407de729ad2e2d04749f07f3e.js"> </script><cite class="hatena-citation"><a href="https://gist.github.com/chezou/076cb9c407de729ad2e2d04749f07f3e">gist.github.com</a></cite>

で、何故これがcoreに入っていないかというと、

  • 特定のワークアラウンドが必要(並列ビルドを抑える ENV.depararelize を使う)な場合は、upstreamのissueを立ててそこへのリンクを貼る必要がある
  • juman++は2016/10/15現在レポジトリが公開されておらず*2、publicなissueがない
  • homebrew-coreにはupstreamにマージされないパッチを当てるFormulaは受け入れられない

つまり、 homebrewでビルド時のバグが有り、かつpublicなレポジトリ(正確にはpublicなticketやissueなど)がない という条件下ではcoreに登録することはできないようです。 気持ちはわからなくもないけど、すべてGithubにissueがある(あるいは公開MLがある)という前提はちょっと不寛容じゃないかと思います。 Githubで公開されていることしか考えていないんでしょうかね…。

<iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2FHomebrew%2Fhomebrew-core%2Fpull%2F5875" title="Create formula of jumanpp, RNNLM based Japanese morphological analyzer by chezou · Pull Request #5875 · Homebrew/homebrew-core" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/Homebrew/homebrew-core/pull/5875">github.com</a></cite>

はじめての、新規Formula作成でしたがちょっと疲れました。。。

*1:sugyanさんのアイドルコーパスも好きだから続けられると思っているし、それくらいコーパス作るの大変

*2:じきにgithubかbitbucketに公開される予定とのこと

Avatar
Aki Ariga
Machine Learning Engineer

Interested in Machine Learning, ML Ops, and Data driven business.