MeCab: Yet Another Part-of-Speech and Morphological Analyzer
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
MeCab (和布蕪)とは
MeCabは
京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所
共同研究ユニットプロジェクト を通じて開発されたオープンソース
形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を
基本方針としています。 パラメータの推定に Conditional Random Fields (CRF ) を用
いており, ChaSen が採用している
隠れマルコフモデルに比べ性能が向上しています。また、平均的に
ChaSen , Juman ,
KAKASI より高速に動作します。
ちなみに和布蕪(めかぶ)は, 作者の好物です。
目次
辞書, コーパスに依存しない汎用的な設計
条件付き確率場(CRF )に基づく高い解析精度
ChaSen や KAKASI に比べ高速
辞書引きアルゴリズム/データ構造に, 高速な TRIE 構造である
Double-Array を採用.
再入可能なライブラリ
各種スクリプト言語バインディング(perl/ruby/python/java/C#)
MeCab
ChaSen
JUMAN
KAKASI
解析モデル
bi-gram マルコフモデル
可変長マルコフモデル
bi-gram マルコフモデル
最長一致
コスト推定
コーパスから学習
コーパスから学習
人手
コストという概念無し
学習モデル
CRF (識別モデル)
HMM (生成モデル)
辞書引きアルゴリズム
Double Array
Double Array
パトリシア木
Hash?
解探索アルゴリズム
Viterbi
Viterbi
Viterbi
決定的?
連接表の実装
2次元 Table
オートマトン
2次元 Table?
連接表無し?
品詞の階層
無制限多階層品詞
無制限多階層品詞
2段階固定
品詞という概念無し?
未知語処理
字種 (動作定義を変更可能)
字種 (変更不可能)
字種 (変更不可能)
制約つき解析
可能
2.4.0で可能
不可能
不可能
N-best解
可能
不可能
不可能
不可能
MeCab に至るまでの形態素解析器開発の歴史等はこちら をご覧ください
メーリングリスト
2013-02-18 MeCab 0.996
configure script の不備によりiconvへのリンクに失敗する問題を修正
ユーザ辞書用CSVファイルのコストと左/右文脈IDを付与し, 新たなCSVファイルを生成する機能の追加
解析結果からLattice を作成する Lattice::set_result() メソッドを追加. 単体テスト時のスタブの作成等に利用可能
2013-01-24 MeCab 0.995
部分解析機能 の再実装
部分解析機能 のためのAPI (Lattice:set_boundary_constarint,
Lattice::set_feature_constraint) の追加
2012-06-03 MeCab 0.994
再学習機能 の追加 (少量のコーパスと既存モデルを使ったCRFパラメータの更新)
ユーザ辞書の単語コストの自動推定機能の追加 (CRFモデルが必要)
2012-01-27 MeCab 0.993
MeCab::Tagger::formatNode()が正しく動いていなかった問題の修正
スタックの消費を抑えるため、ほとんどのローカル変数(配列)をヒープ上に退避
2012-01-14 MeCab 0.992
2012-01-14 MeCab 0.991
空文字列もしくは空白文字列を解析した時に解析エラーとなる問題を修正
ユーザ辞書の作成に失敗する場合がある問題を修正
2011-12-24 MeCab 0.99
MeCab::Model, MeCab::Lattice クラスを追加
マルチスレッド環境でのユーザビリティの向上。複数スレッドが同一辞書を共有しながら解析可能に
同一辞書を参照する場合、辞書へのリファレンスを自動的に共有する機能の削除。
(MeCab::Model を使って同一のことが可能なため)
解析中にアトミックに辞書をアップデートする機能の追加 Model::swap()
Windows版のバイナリを Unicodeバイナリに変更
online learning, HMM, EM learning の各実験コードを削除
MeCab::Node:(begin|end)_node_list メンバの削除
細かいバグの修正
2009-09-27 MeCab 0.98
UTF16のサポート(実験的)
Windows版での文字コード変換に MutlByteToWideChar等の Native APIを使うように変更
ソースコードを Google coding style に変更
フォーマット指定で EON (end of N-best) の追加 (-S or --eon-format)
Shift-JIS環境で半角カタカナの扱いに問題があったのを修正
online learning のサポート (実験的)
Wno-deprecatedをつけなくてもコンパイルできるようにした
細かいバグの修正
2008-02-03 MeCab 0.97
マルチスレッド環境で辞書を開くときの排他制御がうまくいっていなかったバグの修正
Windows版でインストール時に辞書の文字コードを指定できるようになった
一部のコンパイラで正しくコンパイルできなかった問題の修正
部分解析モードを変更するAPI の追加 (Tagger::set_partial())
ラティスの生成レベルを変更するAPI の追加 (Tagger::set_lattice_level())
温度パラメータを変更するAPIの追加 (Tagger::set_theta())
全候補出力モードを変更するAPIの追加 (Tagger::set_all_morphs())
2007-06-10 MeCab 0.96
バッファオーバフローのバグを修正
常にPOS-IDを作成するようにした (-p オプションの廃止)
ユーザ辞書のデリミタを : から , (CSV) に変更 (Windows対策)
charsetの判定にバグがあり, ある条件でユーザ辞書とシステム辞書が非互換になるバグを修正
ユーザ辞書ファイルの文字コードとシステム辞書ファイルの文字コー
ドが異なる場合, 辞書の構築がうまくいかなかった問題の修正
コマンドラインオプションをダンプする --dump-config オプションの追加
EMベースのHMM学習をサポートできるような学習ルーチンの追加
(experimental)
2007-03-11 MeCab 0.95
古いコンパイラでコンパイルできない問題を修正
csvのエスケープの不具合で ","を含む単語が追加できなかった問題を修正
UTF8辞書が一部正常に作成できなかったバグの修正
recall/precisionの表示が反対になっていたバグの修正
コマンドライン解析の不具合の修正
その他細かなバグの修正
2007-02-24 MeCab 0.94
多くのバグフィックス
HMMによる学習をサポート (実験的)
解析結果の全情報を取得できるAPIを追加 (begin_node_list, end_node_list)
char.def, unk.def, matrix.def が未定義の場合でも辞書が作成できるよう変更
Windows版の iconv.dllへの依存を廃止
コードのクリーンアップ
2006-07-30 MeCab 0.93
ライセンスをLGPLからBSD,LGPL,GPLのトリプルライセンスに変更
2006-07-10 MeCab 0.92
辞書コンパイラ等, 一部Perlで実装されていたコードをC++で再実装. Perlへの依存性の排除
辞書コンパイラ (mecab-dict-index) の高速化
rewrite.def のシンタックスの変更
-x "未知語品詞" オプションの追加: 未知語推定を行わず,
ユーザが指定した "未知語品詞" を出力
品詞 id のサポート
文字種情報が一部学習できていなかったバグの修正
学習の際, 頻度による足切りができていなかったバグの修正
その他細いバグの修正
2006-04-30 MeCab 0.91
Windows 環境で文字列の最後が半角スペースの時に落ちるバグの修正
連接表の前件と後件のサイズが異なるときに正しく解析できないバグ
の修正
mecab-dict-index に -f オプションを追加し, CSV の文字コードをユー
ザが指定できるようにした
一部の API関数が export されていない問題の修正
CRFの学習を pthread を使って並列に行えるようにした
(experimental)
ユーザ辞書が作成できない問題の修正
example ディレクトリに MeCabの応用例を追加 (unittest)
その他細いバグの修正
2006-03-26 MeCab 0.90
MeCab はフリーソフトウェアです.GPL (the GNU General Public
License), LGPL (Lesser GNU General Public License), または BSD
ライセンスに従って本ソフトウェアを使用,再配布することができます。
詳細は COPYING, GPL, LGPL, BSD各ファイルを参照して下さい.
MeCab 本体
mecab-0.996.tar.gz:ダウンロード
辞書は含まれていません. 動作には別途辞書が必要です。
mecab-0.996.exe:ダウンロード
Windows 版には コンパイル済みの IPA 辞書が含まれています
MeCab 用の辞書
IPA 辞書
IPA 辞書, IPAコーパス に基づき
CRF
でパラメータ推定した辞書です。 (推奨) ダウンロード
Juman 辞書
Juamn 辞書, 京都コーパスに基づき
CRF
でパラメータ推定した辞書です。 ダウンロード
Unidic 辞書
Unidic 辞書, BCCWJコーパスに基づき CRF
でパラーメータ推定した辞書です。ダウンロード
perl/ruby/python/java バインディング
% tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
% mecab-ipadic-2.7.0-XXXX
% ./configure
% make
% su
# make install
バイナリをインストールする場合は,
自己解凍インストーラ (mecab-X.X.exe)
を実行してください. 辞書も同時にインストールされます。
mecab を起動して,
生文を標準入力から入力してみてください.MeCab では, 一行一文を前提として解析を行ないます。
% mecab
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
出力フォーマットは, ChaSen のそれと大きく異なります。
左から,
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音
となっています。
引数にファイルを与えると,
そのファイルが解析対象となります。 また, -o
オプションにて,
別のファイルに結果を出力することも可能です。
% mecab INPUT -o OUTPUT
以下のように -O オプションを使います。
% mecab -O wakati
太郎はこの本を二郎を見た女性に渡した。
太郎 は この 本 を 二郎 を 見 た 女性 に 渡し た 。
以下のように -O オプションを使います。
% mecab -Oyomi (ヨミ付与)
% mecab -Ochasen (ChaSen互換)
% mecab -Odump (全情報を出力)
これらの出力フォーマットは, /usr/local/lib/mecab/ipadic/dicrc
に定義されています。 さらに,
ユーザがこれらのフォーマットを自由に定義することが可能です。
こちら をご覧ください.
特に指定しない限り, euc が使用されます。 もし,
shift-jis や utf8 を 使いたい場合は, 辞書の configure オプションにて charset を変更し,
辞書を再構築してください. これで, shift-jis や,
utf8 の辞書が作成されます。
% tar zxfv mecab-ipadic-2.7.0-xxxx
% cd mecab-ipadic-2.7.0-xxxx
% ./configure --with-charset=sjis
% make
% tar zxfv mecab-ipadic-2.7.0-xxxx
% ./configure --with-charset=utf8
% make
また, mecab-dict-index の -t オプションを使って直接文字コードの異なる
辞書を再構築できます。 -f オプションはオリジナルのテキスト辞書の文字コードです。
% cd mecab-ipadic-2.7.0-xxxx
% /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8
# make install
configure option で --enable-utf8-only を指定すると. MeCab が扱う
文字コードを utf8 に固定します。 euc-jp や shift-jis をサポートする場合,
MeCab 内部に変換用のテーブルを埋めこみます。 --enable-utf8-only を
指定することでテーブルの埋めこみを抑制し, 結果として実行バイナリを
小さくすることができます。
MeCab は, 辞書に単語が未登録の場合でも適当にその品詞を推定します。
ホリエモン市
ホリエモン 名詞,固有名詞,地域,一般,*,*,*
市 名詞,接尾,地域,*,*,*,市,シ,シ
EOS
ホリエモンさん
ホリエモン 名詞,固有名詞,人名,一般,*,*,*
さん 名詞,接尾,人名,*,*,*,さん,サン,サン
ただし, その精度は正確ではありません. 品詞推定をやめ, 未知語は常に
"未知語" 品詞を出力したい場合は -x (--unk-feature) オプションを使います。
オプションで指定された文字列が品詞として使われます。
%mecab --unk-feature "未知語"
ホリエモンさん
ホリエモン 未知語
さん 名詞,接尾,人名,*,*,*,さん,サン,サン
-N #NUM オプションを使うことで, 確からしいものから#NUM 個解析結果を出力
します。 理論的にはすべての可能な解析解を出力することが
可能ですが, 出力バッファのかねあいから, -N の最大値を 512 に制限しています。
% mecab -N2
今日もしないとね。
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も 助詞,係助詞,*,*,*,*,も,モ,モ
し 動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
と 助詞,接続助詞,*,*,*,*,と,ト,ト
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
もし 副詞,一般,*,*,*,*,もし,モシ,モシ
ない 形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ
と 助詞,接続助詞,*,*,*,*,と,ト,ト
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
EOS
CRF のパラメータ推定に Jorge Nocedal 氏が考案した L-BFGS
と同氏が公開している FORTRAN 実装を使わせていただいております。ありがとうございます。
http://www.ece.northwestern.edu/~nocedal/lbfgs.html
J. Nocedal. Updating Quasi-Newton Matrices with Limited Storage
(1980), Mathematics of Computation 35, pp. 773-782.
D.C. Liu and J. Nocedal. On the Limited Memory Method for Large Scale
Optimization (1989), Mathematical Programming B, 45, 3, pp. 503-528.