コンテンツへスキップ

形態素解析とは?仕組み・使いどころをPythonの実例で解説

POSII COLUMN

形態素解析とは?
仕組み・使いどころを実例で解説

MeCabからSudachiまで。生成AI時代に「まだ必要なのか」という疑問にも答えます

形態素解析とは、文章を「意味を持つ最小の単位」に分割し、それぞれの品詞や原形を判定する処理のことです。日本語は英語と違って単語が空白で区切られていないため、コンピュータが日本語を扱うときの最初の関門になります。

この記事の要点:①形態素解析は「分割」「品詞判定」「原形化」の3つをまとめて行う処理 ②結果は使う辞書で変わるため、エンジン選びより辞書選びのほうが重要なことが多い ③生成AIが主流になった今も、検索エンジンやテキスト集計の現場では現役

形態素解析とは何か

形態素とは、それ以上分割すると意味を失ってしまう、言語の最小単位です。形態素解析は、文章をこの単位に切り分けたうえで、各要素が何であるかを判定します。

有名な例文で見てみましょう。「すもももももももものうち」という、ひらがなだけの文です。人間でも一瞬迷いますが、形態素解析にかけると次のように分解されます。

表層形 品詞 原形
すもも 名詞 すもも
助詞
もも 名詞 もも
助詞
もも 名詞 もも
助詞
うち 名詞 うち

このように、形態素解析は次の3つを同時に行っています。

  • 分かち書き:どこで区切るかを決める。「すもも/も/もも/も/もも/の/うち」
  • 品詞タグ付け:各要素が名詞なのか助詞なのかを判定する
  • 原形化(見出し語化):「走っ」→「走る」のように活用を元の形に戻す

なぜ日本語には形態素解析が必要なのか

英語は I have a pen のように、単語が空白で区切られています。そのため空白で切るだけで単語の列が得られます。

一方で日本語は「私はペンを持っています」のように切れ目がありません。この状態では、コンピュータは「私」という語が何回出てきたかを数えることすらできません。だからこそ、日本語処理では形態素解析が長らく必須の前処理でした。

さらに厄介なのが切り方が一意に決まらないことです。「東京都」は「東京都」という1語なのか「東京」+「都」なのか。「くるまでまつ」は「車で待つ」なのか「来るまで待つ」なのか。形態素解析エンジンは、辞書と統計モデルを使って、最も自然な区切り方を選んでいます。

形態素解析エンジンの比較

日本語でよく使われる主要なエンジンを整理します。

エンジン 特徴 向いているケース
MeCab 最も広く使われている定番。動作が非常に高速で、資料や事例が豊富 迷ったらこれ。大量テキストの処理
Sudachi 分割の粒度をA・B・Cの3段階から選べる。表記ゆれの正規化に強い 「東京都」を1語にも2語にも切り分けたい、検索用途
Janome Pure Python製で辞書を内蔵。pip install だけで動く 環境構築でつまずきたくない、学習・試作用
JUMAN++ 言語モデルを使い、文脈を考慮した精度の高い解析 精度を最優先したい研究用途

選び方の目安:まずJanomeで試して、速度が足りなくなったらMeCab、表記ゆれや検索用途で困ったらSudachi、という順序が実務では現実的です。いきなり環境構築の重いものから始める必要はありません。

結果を左右するのはエンジンより「辞書」

意外に見落とされがちですが、同じエンジンでも辞書が違えば結果は変わります

辞書 性格
IPAdic MeCabの標準辞書。バランスが良いが、収録語彙がやや古い
UniDic 国立国語研究所による辞書。単位が細かく統一されており、言語研究や集計に向く
NEologd 新語・固有名詞に強い。人名や商品名、ネット用語を1語として認識できる

たとえば標準辞書では「機械学習」が「機械」+「学習」に割れてしまうことがありますが、新語辞書を使えば1語として扱えます。集計結果が想定と違うときは、まず辞書を疑ってください。

Pythonで動かしてみる

実際に手を動かすのが一番早いので、環境構築が最も簡単なJanomeで試してみます。

pip install janome
from janome.tokenizer import Tokenizer

t = Tokenizer()
for token in t.tokenize("すもももももももものうち"):
    print(token)

# すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
# も      助詞,係助詞,*,*,*,*,も,モ,モ
# もも    名詞,一般,*,*,*,*,もも,モモ,モモ
# ...

分かち書きだけが必要なら、次のように書けます。

print(list(t.tokenize("私はペンを持っています", wakati=True)))
# ['私', 'は', 'ペン', 'を', '持っ', 'て', 'い', 'ます']

名詞だけを抜き出して頻度を数える、というのがテキストマイニングの定番処理です。

from collections import Counter

text = "AIの活用が進む。AI導入の相談が増えている。"
nouns = [tk.surface for tk in t.tokenize(text)
         if tk.part_of_speech.startswith("名詞")]
print(Counter(nouns))
# Counter({'AI': 2, '活用': 1, '導入': 1, '相談': 1})

生成AI時代に、形態素解析はまだ必要か

ここが最も多い疑問だと思います。ChatGPTのような大規模言語モデルは、実は形態素解析を使っていません。代わりに「サブワード分割」という別の方式で文字列を切っています。

形態素解析 サブワード分割
切る単位 意味を持つ最小単位 統計的に出現しやすい文字の並び
辞書 人が整備した辞書が必要 データから自動で学習
未知語 辞書にないと苦手 細かく分割して必ず処理できる
結果の解釈 品詞が付くので人が読める 意味の区切りとは限らない

では形態素解析はもう不要かというと、そんなことはありません。現場では今も次の場面で使われています。

  • 全文検索エンジンのインデックス作成:日本語検索の精度を出すには、今も形態素解析ベースの分割が標準です。
  • テキストマイニング・集計:「どの単語が何回出たか」を数えるには、意味の単位で切れている必要があります。サブワードでは集計になりません。
  • 軽量・高速・説明可能:LLMを呼べばコストも時間もかかります。品詞で絞り込むだけの処理なら、形態素解析のほうが桁違いに速く、結果の理由も説明できます。

実務での使い分け:意味を理解させたいならLLM、数えたり絞り込んだりしたいなら形態素解析。この2つは競合ではなく、役割が違う道具です。RAGの前処理でも、検索対象を絞る段階で形態素解析を併用することがあります。

よくある質問

Q. 形態素解析と構文解析はどう違いますか?

A. 形態素解析は「単語に切って品詞を付ける」ところまでです。構文解析はその先で、「どの語がどの語にかかっているか」という文の構造を判定します。順序としては形態素解析が先に来ます。

Q. 精度が出ないときは何を疑えばいいですか?

A. まず辞書です。専門用語や固有名詞が割れているなら、新語辞書に変えるか、ユーザー辞書に登録すれば大きく改善します。エンジンを乗り換えるのは、その後で構いません。

Q. 英語には形態素解析は不要ですか?

A. 分かち書きは不要ですが、活用を原形に戻す処理(見出し語化)は英語でも行います。runningrun にまとめる、といった処理です。

Q. どの言語処理技術から学ぶべきですか?

A. 形態素解析は、日本語処理の土台であり、結果が目に見えるので学習効率が良い題材です。ここからベクトル表現へ進むと、技術の流れがつかみやすくなります。詳しくは形態素解析からベクトル解析へ:この20年で起きた言語処理技術の大革命でも解説しています。

POSIIは、自然言語処理を活用した業務効率化システムやRAGによる社内文書検索AIの受託開発を行っています。「自社のテキストデータをどう活かせるか」の相談から承ります。サービス詳細お問い合わせ

最後までお読みいただき、心より感謝申し上げます。

大河原潤

大河原 潤

AI開発専門家

ブーム以前からAI研究に携わる、本物の専門家。「AIに使われる」のではなく、「AIを使いこなす」確かな技術力を提供します。

【アカデミックな裏付け】

  • カリフォルニア大学リバーサイド校 博士前期課程修了(研究分野:測度論、経路積分)
  • アメリカ数学会のジャーナルに論文発表

【社会的に認められた専門性】

  • AI関連書籍:『誤解だらけの人工知能』(2018年)、『AI×Web3の未来』(2023年)
  • プログラミング専門書:実務的な技術書を2冊出版(確かな実装力の証明)
  • 100社以上のAI導入コンサルティング実績、特許売却経験あり