MeCab日本語形態素解析

日本語には区切りが無い

英語は空白で単語が分かれますが、日本語は連続しています。「東京都に住む」を機械に扱わせるには、まず単語へ区切る必要があります。この処理が形態素解析です。

$ echo "東京都に住む" | mecab
東京    名詞,固有名詞,地域,一般
都      名詞,接尾,地域
に      助詞,格助詞,一般
住む    動詞,自立,*,*,五段・マ行

区切るだけ(分かち書き)でなく、品詞や活用形、読みまで付くのが形態素解析器です。[[全文検索]] の索引作成や、頻度集計、要約の前処理に使われます。

辞書が結果を決める

MeCab 本体は仕組みで、精度を決めるのは辞書です。

辞書特徴
IPAdic標準。古く、新語に弱い
UniDic言語研究向け。単位が細かく、揺れが少ない
NEologdWeb由来の新語・固有名詞に強い。更新が要る

同じ文でも辞書で結果が変わります。「機械学習」は辞書によって1語にも「機械」+「学習」の2語にもなります。索引を作り直さずに辞書だけ差し替えると、検索が静かに壊れます — 索引時と検索時で切り方が変わり、一致しなくなるためです。

未知語の扱い

辞書に無い語(新製品名、社内用語、人名)は未知語として推測で処理されます。カタカナの連続は1語にまとめる、といった規則が働きますが、当たらないこともあります。

対策は2つです。

  • ユーザー辞書を足す — 業務で使う固有名詞を登録する。最も効果が大きい
  • 正規化を先にかける — 全角半角、カタカナの長音、異体字を揃えてから解析する

正規化を怠ると、「サーバ」と「サーバー」が別語として集計されます。解析の前段が精度を決める、という点は見落とされがちです。

LLM時代における位置づけ

[[生成AI・LLM]] は形態素解析を使わず、[[トークンとトークナイザ]] という別の単位で文を扱います。用途は分かれます。

  • 形態素解析が要る場面 — 語の頻度を数える、品詞で絞る、[[全文検索]] の索引を作る、辞書で結果を制御したい
  • LLM/[[埋め込みとベクトル検索]] が向く場面 — 意味の近さで探す、要約する、表記が違っても同じ意味として扱いたい

併用が現実的です。 検索では、語の一致(形態素解析)と意味の近さ(ベクトル)を組み合わせると、どちらか一方より取りこぼしが減ります。

実務での注意点

  • 辞書の版を固定する — 環境ごとに辞書が違うと、同じ入力で違う結果が出ます
  • 速度は十分速い — 数万文でも実用範囲です。ボトルネックになるのは通常、前後の処理です
  • 代替も知っておく — Sudachi(正規化と分割単位の切り替えが強い)、Janome([[Python]] のみで動きインストールが容易)。導入の手間と精度で選びます
  • 品詞で絞る — 名詞だけを取り出すと、頻度集計や検索索引の質が上がります。助詞や助動詞は数だけ多く意味を持ちません

関連技術とのつながり

  • [[全文検索]] — 索引を作る前段。切り方が索引と検索で揃っている必要がある
  • [[Python]] — 解析結果を集計・変換する実装言語
  • [[トークンとトークナイザ]] — LLMが使う別の分割単位。目的が異なる
  • [[埋め込みとベクトル検索]] — 語の一致ではなく意味の近さで探す手法。併用が有効
  • [[生成AI・LLM]] — 前処理として形態素解析を必要としないモデル
Q: 形態素解析器が分かち書きに加えて出力するものはどれ?
- [ ] 文の要約
- [x] 品詞・活用形・読み
- [ ] 文の感情
解説: 品詞で絞ることで、頻度集計や検索索引の質を上げられます。

Q: 索引を作り直さずに辞書だけ差し替えると何が起きる?
- [ ] 何も変わらない
- [x] 索引時と検索時で語の切り方が変わり、一致しなくなる
- [ ] 索引の容量が増える
解説: 「機械学習」が1語にも2語にもなるなど、辞書で結果が変わります。

Q: 未知語への対策として最も効果が大きいのはどれ?
- [x] 業務で使う固有名詞をユーザー辞書へ登録する
- [ ] 解析を2回実行する
- [ ] 品詞情報を無視する
解説: あわせて全角半角や長音の正規化を先にかけると、表記ゆれによる別語化も防げます。