MeCab: Yet Another Part-of-Speech and Morphological
Analyzer
$Id: index.html,v 1.34 2005/03/20 13:18:57 taku-ku Exp $;
MeCab (和布蕪)とは
MeCab は, 奈良先端科学技術大学院大学自然言語処理学講座の開発する形態素解析器
ChaSenを基に開発された高速な形態素解析器です.
現在 ChaSen とは独立に,
フルスクラッチから開発されています. 解析精度は, ChaSen
と変わらないにもかかわらず, 平均的に ChaSen
の3-4倍のスピードで動作します.
以前は, ChaSenTNG という名前でしたが,
オリジナルの ChaSen と方向性が変わってきており,
これ以上 ChaSen
の名前を借り続ける事は不適切と感じたので, MeCab
に名前を変えました. ちなみに
和布蕪(めかぶ)は, 作者の好物です.
目次
- ChaSen や KAKASI よりも
3-4倍程度 高速.
PentiumIII 1Ghz の Linux で, 1Mbyte/Sec
(10000文/sec) の解析速度
(出力にかかる時間は除く)
- 解析モデルとして可変長 マルコフモデル採用.
- 解析精度は, 現行 ChaSen と同一.
- 辞書引きアルゴリズム/データ構造に, Double-Array
を採用.
Double-Arrayはトライ構造を表現するデータ構造で,
空間使用率, 検索速度のバランスが極めて良い.
- 多国語(英語,中国語など)対応予定.
(現在は日本語のみ)
- 再入可能なライブラリ
- 各種スクリプト言語バインディング
(perl/ruby/python/java)
メーリングリスト
mecab の
メーリングリストを作りました. 参加したい方は,
mecab-ctl@tahoo.orgあてに
subscribe
のみを書いたメールを送信してください.
過去記事は, こちらから入手
できます. ML に質問する前に同様の内容が投稿されていないか事前にチェック
していただけると幸いです.
- 2005-03-20: mecab 0.81
- mecab_sparse_tostr3()で buffer overflow が返るバグを修正
- 2004-10-17: mecab 0.80
- 2004-8-27: mecab 0.79
- 一部の環境でライブラリ (libmecab) を用いた場合, getCost ()
で SIGSEGV が発生する環境する点を修正した.
- mecab_new, mecab_new2 に失敗した場合,
4byte ずつメモリーリークするバグを修正
- Windows 版インストーラの変更.
Administrator でインストールした場合, HKEY_LOCAL_MACHINE に
レジストリ情報を書きこむようにし, ユーザ全員がmecab を使用可能にした.
(インストール時のオプションにて変更可能)
- 2004-6-22: mecab 0.78
- -Oyomi を用いたとき, 未知語処理の読みが出力されなかったのを修正.
(単純に入力の文字列をそのままの形で表示する)
- -Oyomi を用いたとき, 入力の半角スペースが出力時に消去される問題を修正
- 出力フォーマットの命令に %M, %pS, %pL を追加. 詳細は こちら
- 出力フォーマットの指定に unk-format を追加した. 詳細は こちら
- pImpl イディオムを使い, libmecab.so の独立性が高まった.
- デフォルトで pthread を(mutex) 使わないようにした.
マルチスレッド環境で使う場合は configure option で --enable-mutex
を指定してください.
- 2004-1-3: mecab 0.77
- 入力文が長い時は解析エラーになるように修正した.
(入力文が長い時にはノード数を管理するインデックスのオーバフローが発生していた)
- stringbufferのメソッドのオーバーロードがうまくいかない場合を修正した.
- Java bindings 修正 (package 名を追加)
- 2003-7-3: mecab 0.76
- N-Best 解が出力できるようになった. 詳しくは こちら
- N-Best 解を得るための API の追加. 詳しくは こちら
- 出力バッファを strstream から, 自作の StringBuffer クラスに変更した.
(環境によっては, 若干高速になった)
- perl/ruby/java/python パッケージを別配布にした.
- Windows 版の辞書を ipadic-2.6.0 に変更
- 2003-4-15: mecab 0.75
- ipadic 2.4.4/2.5.0/2.5.1 のそれぞれで辞書が正しくコンパイルできるようにした.
- Windows 版のインストーラを
Inno Setup に変更した.
アップグレードする場合は, 旧 version を削除する必要がある.
- Shift-JIS 環境で ASCII 文字列に対する未知語処理がうまくいかないバグを修正
- 2003-3-14: mecab 0.74
- UTF-8 環境での未知語処理ルーチンが少しまともになった.
- extconf.rb (ruby binding) の修正
- Darts 0.1に対応
- 2003-1-27: mecab 0.73
- win32 dll の mecab_sparse_tostr () が常に NULL
を返すバグを修正
- 2003-1-26: mecab 0.72
- Windows binary の作成環境を mingw から Visual
Studio .NET に変更
- Windows (Shift-JIS)
環境での未知語処理ルーチンが少しまともになった.
- -u オプションの廃止.
自動的に出力バッファのサイズを変更できるようにした.
- MeCab::Param クラスのメモリリークバグの修正
- Kylix3 Open Editon (Borland C++ 5.7 Open Edition)
のサポート
- Intel(R) C++ Compiler のサポート
- 2003-1-3mecab 0.71
- 2002-11-9: 0.7
- 辞書(ipadic) 中の重複エントリを削除することにより,
5%程度の高速化
- Document 中の typo の修正
- Microsoft Visual Stduio .NET 用の
ソリューションファイルを添付した.
- 辞書追加への単語登録方法に関する簡単なドキュメントを付与
- Perl/Ruby/Python/Java のバイディングに関する簡単なドキュメントを付与
- Perl/Ruby/Python/Java にて,
各形態素を表現するクラス(Node),
ラティスを自由にアクセスするクラス
(Path)を追加した.
- 設定ファイル中の unkown-* パラメータを unk-*
に変更
- -w width option の廃止
(使い方を説明してなかったので, 問題ないと思う)
コスト幅の明示的な調節は廃止し. 全
ラティスを作るか, 作らないか(default)
を切りかえるオプション -a (--build-all-lattice)
を付与した.
ラティス を扱う処理は, perl
等の外部プログラムに任せる方針に変更
- 上記の理由により, フォーマットも簡略化,
最小限のもののみを残し, %b %u %v %P %C %D %d %w
の廃止
- 2002-09-17: mecab 0.6
- ChaSenTNG 改め, mecab になる.
- 出力フォーマットの変換機能を付与, 詳細は ココ
- API の変更
- マルチスレッド対応 (実験的)
- インスタンス開放時のメモリリークのバグの修正
- 2002-03-22: 0.54
- Windows 版に インストーラを付けた.
- Tagger class のインターフェイスの若干の変更
- 2002-03-17: 0.53
- 入力のバッファサイズを変更できる API を付けた
- Java モジュールを作成した
- Perl/Ruby/Python/Java
モジュールに例外処理のルーチンを付けた
- UTF8 の辞書が作成できるようにした ./configure
--with-charset=utf8
(かなり実験的)
- その他細い修正
- Windows Version を更新した.
- 2002-03-14: 0.52
- mecabrc の読みこみがうまくいかないバグを修正
- Perl/Ruby/Python
モジュールを配布パッケージに付与するのを忘れていた
ので付与した.
- Perl/Ruby/Python モジュールに、traditional interface
をつけた.
- 2002-01-13: 0.51
- Perl/Ruby/Python モジュールの提供
- 2001-12-25: 0.5
- 設定ファイルの path 等の全面的な変更
- 辞書ファイルの拡張子を *.tng から *.cha
に変更
- 形態素の切り出し位置を表示する option (-O detail)
を追加
- MeCab ライブラリの公開
- Windows 版の公開 (実験的)
- 2001-12-23: 0.4
- 設定ファイルのフォーマットの変更 (section
の廃止)
- 辞書用 設定ファイルと
システム用設定ファイルの独立 (include
という形で実現)
- コマンドラインオプションの充実
- 若干の高速化 (5%程度)
- STL 互換の NodeIterator の提供. STL Algoritm
が活用できる
- 2001-12-11: 0.3
- 2001-12-10:
- Tagger class の導入, chasentng.h の提供
- 2001-12-4: 0.1
バイナリをインストールする場合は,
自己解凍インストーラ (mecab-X.X.exe)
を実行してください. 辞書も同時にインストールされます.
ソースからコンパイルする場合.
- Microsoft Visual Studio .NET C++ 7 の場合
ソースパッケージの vcc というディレクトリに,
ソリューションファイルがあります. それを用いて
ビルドしてください.
コマンドラインからも以下のような方法で作成できます.
ただし cygwin
が必要です.
> cd mecab-X.X.X
> ./configure
> cd src
> nmake -f Makefile.msvc
- Borland C++ (Free
Compilerも含む) の場合 (make は, BCC32
付属のものを使用). ただし, cygwinが必要です.
> cd mecab-X.X.X
> ./configure
> cd src
> make -f Makefile.bcc32
- cygwin の場合
> cd mecab-X.X.X
> ./configure --enable-shared=no
> make
- mingw の場合
> cd mecab-X.X.X
> env CXX="g++ -mno-cygwin -I/usr/include/g++-3" ./configure --enable-shared=no
> make
公開している Windows binary package は, Visual Studio .NET C++
上でビルドしています.
- Redhat 7.2 (gcc 2.9.6, gcc 3.0.1, gcc 3.1, gcc 3.2, Borland C++
5.7 Open Edition, Intel(R) Complier)
- Solaris8 sun4u sparc SUNW,Ultra-30 (gcc 2.95.3)
- FreeBSD 4.2-RELEASE (gcc 2.95.2)
- Windows NT4.0, Windows 2000, Windows XP (Borland C++ 5.6 for
Win32)
- Windows NT4.0, Windows 2000 (Microsoft Visual C++ Ver.6)
- Windows XP (Microsoft Visual .NET/C++, Microsoft(R) 32-bit
C/C++ Optimizing Compiler Version 13.00.9466)
- Windows NT4.0, Windows 2000, Windows XP (gcc 2.5.3)
- Windows NT4.0, Windows 2000, Windows XP (g++ -mno-cygwin
option)
- Mac OS X (gcc 2.95.2 with --disable-shared)
mecab を起動して,
生文を標準入力から入力してみてください.
MeCab では, 一行一文を前提として解析を行ないます.
% mecab
太郎はこの本を二郎を見た女性に渡した。
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
この 連体詞,*,*,*,*,*,この,コノ,コノ
本 名詞,一般,*,*,*,*,本,{ホン/モト},{ホン/モト}
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二郎 名詞,固有名詞,一般,*,*,*,二郎,ニロウ,ニロー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
出力フォーマットは, ChaSen のそれと大きく異なります.
左から,
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
となっています.
引数にファイルを与えると,
そのファイルが解析対象となります. また, -o
オプションにて,
別のファイルに結果を出力することも可能です.
% mecab INPUT -o OUTPUT
以下のように -O オプションを使います.
% mecab -O wakati
太郎はこの本を二郎を見た女性に渡した。
太郎 は この 本 を 二郎 を 見 た 女性 に 渡し た 。
以下のように -O オプションを使います.
% mecab -Oxml (XML)
% mecab -Ochasen (ChaSen互換)
% mecab -Ocsv (csv)
% mecab -Oyomi (ヨミ付与)
これらの出力フォーマットは, /usr/local/lib/mecab/ipadic/dicrc
に定義されています. さらに,
ユーザがこれらのフォーマットを自由に定義することが可能です.
こちらをご覧ください.
-N #NUM オプションを使うことで, 確からしいものから#NUM 個解析結果を出力
します. 理論的にはすべての可能な解析解を出力することが
可能ですが, 出力バッファのかねあいから, -N の最大値を 512 に制限しています.
% mecab -N2
今日もしないとね。
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も 助詞,係助詞,*,*,*,*,も,モ,モ
し 動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
と 助詞,接続助詞,*,*,*,*,と,ト,ト
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
もし 副詞,一般,*,*,*,*,もし,モシ,モシ
ない 形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ
と 助詞,接続助詞,*,*,*,*,と,ト,ト
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
EOS
N Best 解は, いったん 前向きに viterbi 探索を行なった後,
後ろ向きに, A* 探索を行なうことで実現できます.
ただし, A* といっても, heruristic 関数の値は, 前向き探索
時に厳密解を取得できているので, 厳密な N-Best 解を出力する
ことができます.
特に指定しない限り, euc が使用されます. もし,
shift-jis や utf8 を 使いたい場合は, configure
オプションにて charset を変更し,
辞書を再構築してください. これで, shift-jis や,
utf8 の辞書が作成されます.
辞書の構築の際の文字コードの変換に iconv
が使用されます. iconv
を前もってインストールしておく必要があります. 最近の
Linux や, cygwin はインストールされているようです.
% ./configure --with-charset=sjis
% make
% ./configure --with-charset=utf8
% make
コンパイル後でも, 以下の手順で文字コードの異なる辞書を再構築できます.
-d オプションを使うことで, それぞれのコードの辞書を使い分けることが可能
です.
% cd mecab-X.X.X/dic
% vi dicrc
# charset を utf8 に変更
charset = utf8
% make clean
% make charset=utf8
% make dicdir=/somewhere/dic/ipadic-utf8 install
% mecab -d /somewhere/dic/ipadic-utf8 FILES ..
テストコーパス: RWCP コーパス(毎日新聞
94年), 約 35000文 3MByte
テスト環境: RedHat Linux 7.2, DELL , XEON 2.4Ghz dual, Memory
4Gbyte
分かち書き出力の結果 (juman
のみ標準のフォーマット)
| MeCab |
2.21s user 0.04s system 99% cpu 2.269 total |
| ChaSen |
7.22s user 0.06s system 98% cpu 7.358 |
| JUMAN |
25.93s user 0.07s system 99% cpu 26.055 total |
| kakasi |
7.03s user 0.05s system 99% cpu 7.124 total |
デフォルトの出力フォーマット(kakasi
は分かち書き)
| MeCab |
2.72s user 0.04s system 98% cpu 2.793 total |
| ChaSen |
8.22s user 0.06s system 100% cpu 8.278 total |
| JUMAN |
25.93s user 0.07s system 99% cpu 26.055 total |
| kakasi |
7.03s user 0.05s system 99% cpu 7.124 total |
ChaSen 互換をうたうには, まだまだ遠い..
|
ChaSen |
MeCab |
進行状況,予定など |
| 連結品詞機能 |
○ |
× |
CaboChaが使うのでサポートしたい |
| 複合語機能 |
○ |
× |
|
| 出力フォーマットの柔軟な変更 |
○ |
○ |
|
| すべての解析解の表示 |
○ |
○ |
|
| n-best 解 |
× |
○ |
|
| 多言語形態素解析 |
△ |
△ |
英語, 中国語の tokenizer
を
tokenizer class から継承して書くだけ |
| わかち書き位置の外部指定 |
○ |
× |
研究目的として重要な機能なので実装予定 |
| 再入可能ライブラリ |
× |
○ |
|
| マルチスレッド対応 |
× |
○ |
|
| 文字コード非依存 |
△ (動的に変更) |
○ |
SJIS/EUC/UTF-8 の辞書で動作確認 |
| 連接コストの推定精度の向上 |
△ (単純な最尤推定) |
△ (左に同じ) |
CRF
等を使って推定
|
自然言語処理,
特に形態素解析を知ってる人向けの技術資料
誤りがあればお知らせください.
|
MeCab |
ChaSen |
JUMAN |
KAKASI |
| 解析モデル |
可変長マルコフモデル |
可変長マルコフモデル |
bi-gram マルコフモデル |
最長一致 |
| コスト推定手法 |
コーパスから学習 |
コーパスから学習 |
人手 |
コストという概念無し |
| 辞書引きアルゴリズム |
Double Array |
パトリシア木 |
パトリシア木 |
Hash? |
| 解探索アルゴリズム |
Viterbi |
Viterbi |
Viterbi |
決定的? |
| 連接表の実装 |
3次元 Table |
オートマトン |
2次元 Table? |
連接表無し? |
| 品詞の階層 |
無制限多階層品詞 |
無制限多階層品詞 |
2段階固定 |
品詞という概念無し? |
$Id: index.html,v 1.34 2005/03/20 13:18:57 taku-ku Exp $;
taku-ku@is.naist.jp