TinySegmenter:Javascriptだけで書かれたコンパクトな分かち書きソフトウェア


TinySegmenterはJavascriptだけ書かれた極めてコンパクトな日本語分かち書きソフトウェアです。 わずか25kバイトのソースコードで、日本語の新聞記事であれば文字単位で95%程度の精度で分かち書きが行えます。 Yahoo!の形態素解析のように サーバーサイドで解析するのではなく、全てクライアントサイドで解析を行うため、セキュリティの 観点から見ても安全です。分かち書きの単位はMeCab + ipadicと互換性があります。

デモ

日本語の文章を入力し、解析ボタンをクリックしてください。

ダウンロード

使い方

<script type="text/javascript" src="tiny_segmenter.js" charset="UTF-8"></script>
<script>

var segmenter = new TinySegmenter();                 // インスタンス生成

var segs = segmenter.segment("私の名前は中野です");  // 単語の配列が返る

alert(segs.join(" | "));  // 表示

</script>

技術的な話

TinySegmenterはコンパクトな設計にするために、辞書を使っていません。辞書無しの分かち書きソフトウェアといえば マリモがありますが、 マリモとは異なり、TinySegmenterは機械学習のみを使って分かち書きを行います。TinySegmenterは入力文すべての文字について、 文字の前が単語境界かどうかを、文字、文字N-gram、ひらがな・カタカナといった文字種情報とその組み合わせを特徴量として使いながら、 学習・分類しています。学習データにRWCPコーパスを使っているので、新聞記事には強いですが チャットやブログといったくだけた文、ひらがなだけの文の解析精度は高くありません。 しかし、辞書を使っていないぶん、未知語の解析精度はMeCabより良い場合があります。 基本的に言語非依存な分かち書きなので、正しく分かち書きされた文が大量にあれば、言語を問わず分かち書きの モデルを構築することができます。

機械学習を使うえでも、できあがったモデルのコンパクトさが重要になります。 SVMNaive Bayes(ベイジアンフィルター)といった機械学習アルゴリズムを使うことは可能ですが、 これらが出力するモデルはコンパクトではありません。一方、冗長な特徴量を極力使わずにモデルをコンパクトに表現できるトリックにL1ノルム正則化があります。 L1ノルム正則化もいろいろなアルゴリズムがありますが(たとえばLog-Linearだとこれ)、 TinySegmenterは、実装も容易でモデルの圧縮率もいいBoostingを使っています。

TODO