JavaScriptで実装された日中形態素解析エンジンRakuten MA

日本語と中国語(簡体字)に対応した形態素解析エンジンRakuten MAが公開されています。JavaScriptで実装されていてnode.jsでアプリケーションのように使うことも、ブラウザ上で実行することもできます。Apacheライセンスで公開されているので商用利用も可能です。

TinySegmenterJavaScriptの少ないコード量で日本語分かち書きを実現した先駆的なソフトだと思いますが、Rakuten MAは現代日本語書き言葉均衡コーパス(BCCWJ)Chinese TreeBank (CTB)などから学習したモデルを同梱していて、品詞情報も出力できます。オンライン学習モデルを採用していて、新たにコーパスを用意してモデルを作ったり、サンプルコーパスを追加して再学習した結果を即座に反映することも簡単にできます。

実行するにはGithubからコード一式をダウンロードしてnode.jsなどで実行します:

$ git clone https://github.com/rakuten-nlp/rakutenma.git
$ cd rakutenma
$ sudo port install nodejs
$ node demo.js
[ [ '彼', '' ],
  [ 'は', '' ],
  [ '新', '' ],
  [ 'し', '' ],
  [ 'い', '' ],
  [ '仕', '' ],
  [ '事', '' ],
  [ 'で', '' ],
  [ 'き', '' ],
  [ 'っ', '' ],
  [ 'と', '' ],
  [ '成', '' ],
  [ '功', '' ],
  [ 'す', '' ],
  [ 'る', '' ],
  [ 'だ', '' ],
  [ 'ろ', '' ],
  [ 'う', '' ],
  [ '。', '' ] ]
[ [ '彼', 'N-nc' ],
  [ 'は', 'P-k' ],
  [ '新し', 'V-c' ],
  [ 'い', 'P-k' ],
  [ '仕事', 'N-nc' ],
  [ 'で', 'P-k' ],
  [ 'きっ', 'N-nc' ],
  [ 'と', 'P-rj' ],
  [ '成功', 'N-nc' ],
  [ 'す', 'P-k' ],
  [ 'るだ', 'V-c' ],
  [ 'ろう', 'X' ],
  [ '。', 'M-p' ] ]
[ [ 'うらにわ', 'N-nc' ],
  [ 'に', 'P-k' ],
  [ 'は', 'P-rj' ],
  [ 'にわにわとり', 'N-nc' ],
  [ 'が', 'P-k' ],
  [ 'いる', 'V-dp' ] ]
{ ans: 
   [ [ 'うらにわ', 'N-nc' ],
     [ 'に', 'P-k' ],
     [ 'は', 'P-rj' ],
     [ 'にわ', 'N-n' ],
     [ 'にわとり', 'N-nc' ],
     [ 'が', 'P-k' ],
     [ 'いる', 'V-c' ] ],
  sys: 
   [ [ 'うらにわ', 'N-nc' ],
     [ 'に', 'P-k' ],
     [ 'は', 'P-rj' ],
     [ 'にわにわとり', 'N-nc' ],
     [ 'が', 'P-k' ],
     [ 'いる', 'V-dp' ] ],
  updated: true }
[ [ 'うらにわ', 'N-nc' ],
  [ 'に', 'P-k' ],
  [ 'は', 'P-rj' ],
  [ 'にわ', 'N-n' ],
  [ 'にわとり', 'N-nc' ],
  [ 'が', 'P-k' ],
  [ 'いる', 'V-c' ] ]

ここではMacPortsでnode.jsをインストールしています。demo.jsでは「彼は新しい仕事できっと成功するだろう。」と「うらにわにはにわにわとりがいる」の2つの例文を解析しています。まず、空のモデルを使って1番目の例文を解析して無意味が結果が出ていますが、正解コーパスで学習して再度解析して正しい結果が出ていることを確認しています。次に、同梱してあるモデルを使って2番目の例文を解析していますが、「にわにわとり」の部分に誤りがあり、正しい解析例を再学習して最終的に解析が成功している様子が分かります。