Jagger - C++ implementation of Pattern-based Japanese Morphological Analyzer

developed by Naoki Yoshinaga at Yoshinaga Lab., IIS, University of Tokyo
(English page is here)
Skip to [ Features | Download | History | Usage | Performance | Contributions | References ]

About

Jagger は、辞書に基づく単語分割のための最長一致法と、機械学習の分類器の事前計算に着想を得た、特徴パターンに基づく高速・高精度・省メモリの形態素解析器[1]です。Jagger は形態素解析辞書や学習コーパスから抽出したパターンを入力テキストの先頭から適用し、同時かつ決定的に単語の分割位置、切り出した単語の品詞、見出し語を決定します。最小コスト法や点推定などに基づく既存の効率的な形態素解析器[2,3]と遜色ない解析精度で、1CPUで100万文/秒を超える速度で形態素解析を行うことができます(M2 MacBook Air上)。

Jagger を学術・商用利用する方は以下の参考文献を引用ください。

Naoki Yoshinaga
Back to Patterns: Efficient Japanese Morphological Analysis with Feature-Sequence Trie
The 61st Annual Meeting of the Association for Computational Linguistics (ACL-23). Toronto, Canada. July 2023

取り急ぎ、開発の経緯や実装の詳細を知りたい人は Yahoo! JAPAN での招待講演の資料をどうぞ。

Features

License: GNU GPLv2, LGPLv2.1, BSD

Download & Setup

> wget http://www.tkl.iis.u-tokyo.ac.jp/~ynaga/jagger/jagger-latest.tar.gz
> tar zxvf jagger-latest.tar.gz
> cd jagger-YYYY-MM-DD

# 1) mecab-jumandic 形式の辞書を用意 (cf. mecab-jumandic-7.0-20130310.tar.gz)
> tar zxvf mecab-jumandic-7.0-20130310.tar.gz
> patch -p0 < mecab-jumandic-7.0-20130310.patch # 助動詞の文字化けを修正

# 2) 京都大学ウェブ文書リード文コーパスを用いる場合 (デフォルト)
> git clone https://github.com/ku-nlp/KWDLC
> configure

# 2') または、京都大学テキストコーパスを用いる場合
> git clone https://github.com/ku-nlp/KyotoCorpus
> cd KyotoCorpus; auto_conv -d PATH_TO_MAINICHI_NEWS_DIR; cd ..
> configure --with-corpus=kyoto

# 3) 標準分割からモデルを学習し、評価も行った上でインストール
> make model-benchmark && make install

# 3') 自分で用意した形態素解析辞書、注釈付き学習データ、評価データを用いて学習・評価を行う場合
> make install
> train_jagger -d DICT_FILE TRAIN_FILE_WITH_POS > PATTERN_DIR/patterns
> jagger -m PATTERN_DIR [-wf] < TEST_FILE > result.JAG
> eval.py result.JAG TEST_FILE_WITH_POS

言語資源の入手先:

ToDo

History

Usage

Tagging

コマンドラインで jagger -h とタイプすると、以下の usage を表示します。デフォルトではインストール時に指定した辞書とコーパスから学習したモデルを読み込みます。

jagger: Pattern-based Jappanese Morphological Analyzer
Usage: jagger -m dir [-wf] < input

Options:
 -m dir	pattern directory
 -w	perform only segmentation
 -f	full buffering (fast but not interactive)

-w オプションをつけて実行すると、単語分割のみを行います。-f は出力にブロックIOを用いる高速モードです。コマンドライン上でインタラクティブに解析を行いたい場合はつけないでください。

Training

コマンドラインで train_jagger とタイプすると、以下の usage を表示します。

train_jagger:  extract patterns for Jagger from dictionary and training data
Usage: train_jagger -d dict train > patterns

Options:
 -d dict	dictionary csv

dict は MeCab (jumandic) 形式の辞書ファイルです(コスト等は無視されます。フィールド数さえ合っていれば良く、0で埋めて良い)。train は Jagger (MeCab) の出力と同じ形式の品詞タグ付きデータです。

How to add user ditionaries in training

-dで指定するオプションで指定する辞書ファイルの末尾に辞書項目を直接追加して下さい。なお、追加した辞書項目の表層が学習データで別の品詞で観測される場合、追加した辞書項目は無視されます。

How to add user patterns (dictionaries) in testing

-mで指定するパターンディレクトリ内にコンパイル済みパターンpatterns.{c2i,da,fs,p2f}があれば削除後、同フォルダ内のパターンファイルpatternsを直接編集してパターンを追加してください。パターンのフォーマットは

パターン頻度\t後文脈表層\t前文脈品詞\t分割位置\t後文脈表層文字種別\t形態素情報
です(パターン頻度は0で良い。後文脈表層文字種別は1(数字), 2(アルファベット), 3(カタカナ), 4(その他)を指定)。なお、一致するパターン(前文脈品詞、形態素情報)が複数あるときは、末尾のパターンで上書きされます。

この辺りの仕様は将来的に改善する予定です。

Performance Comparison

参考文献 [1]を確認ください。

Third-Party Contributions

C++ 以外のプログラミング言語で Jagger を使いたい方のためのポートやバインディング(ラッパー)には以下があります。

Disclaimer

文献 [1] で提案したアルゴリズムを除き、他の高速化手法については、特許が取得されていないかどうかは未確認です。どの手法も既存の OSS で広く実装・利用されているものなので、問題はないだろうと思いますが、本ソフトウェアを商用利用する際は、各自の責任でご使用ください。

Acknowledgments

本研究は JSPS 科研費 JP21H03494 および JST CREST JPMJCR19A4 の助成を受けたものです。

References

  1. Naoki Yoshinaga. Back to Patterns: Efficient Japanese Morphological Analysis with Feature-Sequence Trie. ACL-23. 2023 (to appear)
  2. Taku Kudo and Yuji Matsumoto. Applying Conditional Random Fields to Japanese Morphological Analysis. EMNLP-04. 2004
  3. Graham Neubig, Yosuke Nakata, and Shinsuke Mori. Pointwise Prediction for Robust, Adaptable Japanese Morphological Analysis. ACL-11. 2011

Copyright © 2023 Naoki Yoshinaga, All right Reserved.
last-modified: Sep 01 12:55:37 2023, written by XHTML 1.1