文節区切り判定器の実装を公開

一年ほど前に構文解析器を公開したが,(文節区切りされたデータを入力する仕様で)単体では使えない状態のままずっと放置していた.ところが最近になって,幾つかの共著論文で公開した構文解析器を引用する機会があり,このままではマズイと思ったので,現時点で使っている文節区切り - ny23の日記で書いた200行弱のシンプルな文節区切りの実装を同梱してみた.文節区切りの入出力がパイプ経由の文字列渡しなのは明らかに無駄なのだけど,気にしないことにしよう.
MeCab と組み合わせる場合,解析速度は新聞記事だと入出力(UTF-8)込みで12,000文/秒,ブログ記事なら21,000文/秒程度(3.2 Ghz CPU; MeCab だけだと,新聞記事で22,000文/秒程度(入出力込み)なので,そんなに悪くない速度ではないかと)*1係り受けのところだけで評価すると(デフォルトのパラメタで)解析精度は91.8%ぐらい.文節区切りのところだけだと99.7%ぐらい.ただし,ライセンス周りがややこしそうなので,相変わらず学習したモデル(パラメタ)は含めていない.パイプライン的に使う場合には,前段の解析結果を入力して学習した方が良いかもしれない.パラメタの学習時間はそれぞれ,(上記と同じ環境で)200秒/15秒ぐらいなので(データさえあれば)気軽に試せるはず.
文節区切りの実装は,以前粗末な(素性とモデルで)単語分割 - ny23の日記でも使ったように,少し変更すると系列ラベリング問題を解くのに使えるような仕様になっている(2,3次などの素性の組合せは学習器/分類器が自動列挙).以前,人手で頑張らない注釈付きデータの作成は可能か - ny23の日記 で取り上げた以下の論文のように,CRF などの(重い)構造分類の近似に使える.

でもその前に,肝心の学習器の方を多値分類に対応させないと(ダメじゃん).
[追記] さっそく,バグレポートを頂いたのでせっせと直しています.バグ取れて,ホームページも更新.インタフェースの一貫性がなさ過ぎで残念な感じなので,もう少し何とかしたいところだが・・・

*1:しかし,シングルマシン(もちろん,マルチコア)で並列に実行すると,入出力の方がボトルネックになってあっという間に遅くなる.困ったな.