MeCab日本語形態素解析
日本語には区切りが無い
英語は空白で単語が分かれますが、日本語は連続しています。「東京都に住む」を機械に扱わせるには、まず単語へ区切る必要があります。この処理が形態素解析です。
$ echo "東京都に住む" | mecab
東京 名詞,固有名詞,地域,一般
都 名詞,接尾,地域
に 助詞,格助詞,一般
住む 動詞,自立,*,*,五段・マ行
区切るだけ(分かち書き)でなく、品詞や活用形、読みまで付くのが形態素解析器です。[[全文検索]] の索引作成や、頻度集計、要約の前処理に使われます。
辞書が結果を決める
MeCab 本体は仕組みで、精度を決めるのは辞書です。
| 辞書 | 特徴 |
|---|---|
| IPAdic | 標準。古く、新語に弱い |
| UniDic | 言語研究向け。単位が細かく、揺れが少ない |
| NEologd | Web由来の新語・固有名詞に強い。更新が要る |
同じ文でも辞書で結果が変わります。「機械学習」は辞書によって1語にも「機械」+「学習」の2語にもなります。索引を作り直さずに辞書だけ差し替えると、検索が静かに壊れます — 索引時と検索時で切り方が変わり、一致しなくなるためです。
未知語の扱い
辞書に無い語(新製品名、社内用語、人名)は未知語として推測で処理されます。カタカナの連続は1語にまとめる、といった規則が働きますが、当たらないこともあります。
対策は2つです。
- ユーザー辞書を足す — 業務で使う固有名詞を登録する。最も効果が大きい
- 正規化を先にかける — 全角半角、カタカナの長音、異体字を揃えてから解析する
正規化を怠ると、「サーバ」と「サーバー」が別語として集計されます。解析の前段が精度を決める、という点は見落とされがちです。
LLM時代における位置づけ
[[生成AI・LLM]] は形態素解析を使わず、[[トークンとトークナイザ]] という別の単位で文を扱います。用途は分かれます。
- 形態素解析が要る場面 — 語の頻度を数える、品詞で絞る、[[全文検索]] の索引を作る、辞書で結果を制御したい
- LLM/[[埋め込みとベクトル検索]] が向く場面 — 意味の近さで探す、要約する、表記が違っても同じ意味として扱いたい
併用が現実的です。 検索では、語の一致(形態素解析)と意味の近さ(ベクトル)を組み合わせると、どちらか一方より取りこぼしが減ります。
実務での注意点
- 辞書の版を固定する — 環境ごとに辞書が違うと、同じ入力で違う結果が出ます
- 速度は十分速い — 数万文でも実用範囲です。ボトルネックになるのは通常、前後の処理です
- 代替も知っておく — Sudachi(正規化と分割単位の切り替えが強い)、Janome([[Python]] のみで動きインストールが容易)。導入の手間と精度で選びます
- 品詞で絞る — 名詞だけを取り出すと、頻度集計や検索索引の質が上がります。助詞や助動詞は数だけ多く意味を持ちません
関連技術とのつながり
- [[全文検索]] — 索引を作る前段。切り方が索引と検索で揃っている必要がある
- [[Python]] — 解析結果を集計・変換する実装言語
- [[トークンとトークナイザ]] — LLMが使う別の分割単位。目的が異なる
- [[埋め込みとベクトル検索]] — 語の一致ではなく意味の近さで探す手法。併用が有効
- [[生成AI・LLM]] — 前処理として形態素解析を必要としないモデル
Q: 形態素解析器が分かち書きに加えて出力するものはどれ?
- [ ] 文の要約
- [x] 品詞・活用形・読み
- [ ] 文の感情
解説: 品詞で絞ることで、頻度集計や検索索引の質を上げられます。
Q: 索引を作り直さずに辞書だけ差し替えると何が起きる?
- [ ] 何も変わらない
- [x] 索引時と検索時で語の切り方が変わり、一致しなくなる
- [ ] 索引の容量が増える
解説: 「機械学習」が1語にも2語にもなるなど、辞書で結果が変わります。
Q: 未知語への対策として最も効果が大きいのはどれ?
- [x] 業務で使う固有名詞をユーザー辞書へ登録する
- [ ] 解析を2回実行する
- [ ] 品詞情報を無視する
解説: あわせて全角半角や長音の正規化を先にかけると、表記ゆれによる別語化も防げます。