日本語係り受け解析システム「係ろっと」
				v0.2  11/5/2012


0. 変更履歴

11/ 5/2012 v0.2 解析精度向上
10/15/2012 v0.1 初版


1. 係ろっととは／特徴

係ろっとは、全域木探索を行う日本語係り受け解析システムです。決定的な動作をするcabocha等と異なり、大域的な最適解を見つけることが可能です。

係ろっとでは、形態素解析および文節分割ではcabochaのモジュールをそのまま使用します。文節分割後の係り受け解析では独自のコードになっています。

係ろっと（の係り受け解析部）では、辞書やモデル等の外部データはアクセスしません。そのためメモリ使用量は最小限で、軽快な動作をします。また、外部データを見ないということは、すべての情報がソースコードに含まれているということでもあります。係り受け解析のソースコード(kakarot.h、v0.1で約1000行)をきちんと読めば、動作を理解することはそう難しくないでしょう。

係ろっとは、すべての文節の係り受けを割り当てた時点でその係り受け方の評価を行い、点数づけします。そしてその点数（コスト）が最小になるような係り受け方を選びます。したがって、原理上評価の要素（特徴）には任意の複雑な特徴を使用するように拡張することができます。今後係り受けの精度を上げていこうとすると、より複雑な特徴を考慮していくことが必須になると予想されますが、係ろっとはそのような拡張に対応できる柔軟性を持っています。


2. 権利関係、ライセンス、免責事項

Copyright (c) 2012, yu_hatva

係ろっとは GPL に従ったフリーソフトウェアです。
いかなる保証もありません。作者は一切責任を負いません。
その他詳細は下記URLを参照ください。
http://www.gnu.org/licenses/gpl.html


3. インストール手順

2012/10月現在、作者が使っている環境について以下に書きます。これ以外の環境でも動くかもしれませんが、作者は試していません。Ubuntu Linux 12.04 と Mac OS X 10.7 で動作を確認しています。

インストールするもの（この順に）：
 mecab-0.994
 mecab-ipadic-2.7.0-20070801
 CRF++-0.57
 cabocha-0.64

以上はcabochaホームページ http://code.google.com/p/cabocha/ からたどって入手できます。

今のところ IPAdic + UTF8 の組み合わせしか対応していません。mecab, mecab-ipadic, cabocha は configure 時に --with-charset=utf8 をつけてビルドします。

cabochaをインストールする前に、係ろっとをcabochaソースに組み込みます。
以下、係ろっとを展開したディレクトリを $KAKAROT, cabochaを展開したディレクトリを $CABOCHA とすると、

cd $CABOCHA/src
patch < $KAKAROT/patchfile
cp $KAKAROT/kakarot.h .
cp $KAKAROT/postkak.h .

dep.cpp, parser.cpp が一部修正されます。新たに kakarot.h, postkak.h が追加されます。
こうしておいてから普通に cabocha をビルド・インストールします。バイナリ名もcabochaとなりますので、通常のcabochaとの混同を避けるには、係ろっとのインストール先はどこか別のディレクトリにして(--prefix=$LOCALDIR)、実行時はフルパスを指定するとよいでしょう。

なお、係ろっととは関係なくcabocha一般の話ですが、ビルドの時に以下の点が要注意でした：

・/usr/local以外にインストールしたいとき(--prefix=$LOCALDIR)、crfのインクルードファイルが見つからないとエラーになります。configureしたあと、$CABOCHA/src/Makefile に以下の変更が必要でした。

98c98
< DEFAULT_INCLUDES = -I. -I$(top_builddir) 
---
> DEFAULT_INCLUDES = -I. -I$(top_builddir) -I$(LOCALDIR)/include

・Mac OS X 10.7(Lion) では、リンクのときに 関数iconv_*** が見つからない、とエラーになります。同じくconfigureしたあとの $CABOCHA/src/Makefile に以下の変更が必要でした。(Ubuntu 12.04ではこのエラーは出ませんでした）

175c175
< LIBS = -lcrfpp -lmecab  -L$(LOCALDIR)/lib -lmecab -lstdc++
---
> LIBS = -lcrfpp -lmecab  -L$(LOCALDIR)/lib -lmecab -lstdc++ -liconv


4. 使用法

入力の与え方はcabochaと同じです。１行に１文ずつ入力します。
(v0.2) kakeval.txt を実行するディレクトリに置いておくか、環境変数
KAKAROT_EVAL_INIT_FILE をkakeval.txtのパスに設定します。

出力形式は、基本的にcabochaとまったく同じです。"-f1"のようなオプションも使えます。

オプション "-g2" を与えると、係ろっととcabochaの係り受けの比較結果を表示します。その後通常のcabochaの出力を出します。たとえば次の例は、結果が一致した例です。

$ cat cab.txt
太郎は花子が読んでいる本を次郎に渡した
$ cabocha -g2 < cab.txt
#### Parse ended. nodecnt=7
#### Parse Results Matched.
<PERSON>太郎</PERSON>は---------D
  <PERSON>花子</PERSON>が-D     |
                 読んでいる-D   |
                         本を---D
                         次郎に-D
                           渡した
EOS
$ 

結果が不一致だと、次のようにどの文節で不一致があったかを表示します。
nodecntは探索ノード数を示します。

$ cat bad.txt 
それで大学では、あいつは策士だなんて不当な非難を浴びたりもした。
$ cabocha -g2 < bad.txt 
#### Parse ended. nodecnt=15
#### Parse Results Unmatched. i=3
cab:
  6   6   6   6   5   6   7  -1 
  -           *         
kak:
  1   6   6   4   5   6   7  -1
          それで-----------D  
        大学では、---------D  
            あいつは-------D  
          策士だなんて-----D  
                  不当な-D |  
                    非難を-D  
            浴びたりもした。-D
                             
EOS
$ 

cab: はcabochaの結果、kak: は係ろっとの結果。
数字は文節番号で、最初（この例では「それで」）がゼロ番です。「1 6 6 …」は、最初の「それで」は１番の「大学では」に係り、次の「大学では」は６番の「浴びたりもした。」に係り、…ということを示しています。'*'があるのは不一致の文節。'-'は、現状接続詞や感動詞のみから成る文節は係ろっとでは解析対象としていない（便宜的に直後の文節番号を割り振るだけ）ので、「不一致だがとりあえず気にしない」ことを示します。その後の係り受け図はkakarotでなくcabochaの方のものです。(-g2がなければ出力はkakarotの結果です。）


5. 制限事項

(特になし)


6. 連絡先

質問、感想、バグレポート等歓迎しますので、何かありましたら作者のブログ：

http://yu-hatva.hatenablog.com

へコメントお願いします。質問やバグ等は、できる範囲で対応するつもりです。

