前回の概念編では、NLPの全体像を掴みました。今回は実践に入る前の重要な基礎知識として、形態素解析と係り受け解析の違いを徹底解説します。
「どっちも文章を分析するんでしょ?」って思うかもしれませんが、実はこの2つ、やっていることも目的も全然違うんです。
形態素解析 - 文章を最小単位に「分解」する
形態素解析とは?
形態素解析とは、対象言語の文法や単語の品詞等の情報にもとづき、文法的な情報の注記の無い自然言語のテキストデータ(文)を単語の列に分割し、各単語の品詞や活用などを判別することで形態素(おおまかにいえば、言語で意味を持つ最小単位)の列を得る作業です。
つまり、文章をバラバラにして、各パーツに品詞のラベルを貼る作業ってこと。
具体例で理解しよう
例えば「すもももももももものうち」という文を形態素解析すると、「すもも/も/もも/も/もも/の/うち」に分解されます。
MeCabで形態素解析した結果は以下のようになります:
- すもも: 名詞,一般
- も: 助詞,係助詞
- もも: 名詞,一般
- も: 助詞,係助詞
- もも: 名詞,一般
- の: 助詞,連体化
- うち: 名詞,非自立,副詞可能
日本語は英語と違ってスペースで単語が区切られていないので、コンピュータにとっては「どこで区切るか」が最初の難関。形態素解析はこの問題を解決してくれるんです。
形態素解析の主な処理
形態素解析では、次の3つの処理を行います:
- 文字列を単語に分割
- 各単語の品詞を特定
- 単語の活用を特定
例: 「機種変にすればよかった」
| 表層形 | 品詞 | 原形 |
|---|---|---|
| 機種変 | 名詞 | 機種変 |
| に | 助詞 | に |
| すれ | 動詞 | する |
| ば | 助詞 | ば |
| よかっ | 形容詞 | よい |
| た | 助動詞 | た |
形態素解析が活躍する場面
活用事例として、検索エンジン、仮名漢字変換、ロボットの音声認識、スマートフォンの音声アシスタント、スマートスピーカー、翻訳システム、SNSのトレンド分析などがあります。
特にGoogle日本語入力やATOKなどの日本語IMEは、形態素解析なしには成立しません。「きょうはいいてんきですね」と入力したとき、適切に「今日はいい天気ですね」に変換できるのは、形態素解析のおかげなんです。
係り受け解析 - 単語の「関係」を理解する
係り受け解析とは?
係り受け解析は、各単語(or文節)の係り先を決定する処理です。「係り受け」(かかりうけ)とは、文を文節に分けてそれぞれの文節の関係を調べることです。
形態素解析が「分解」なら、係り受け解析は**「関係性の把握」**です。どの言葉がどの言葉を修飾しているのか、文の構造を理解します。
具体例で理解しよう
例えば「僕のランチ代はおおよそ200円でした。」という文章があるとします。
係り受け関係は:
- 僕の → ランチ代は
- ランチ代は → 200円でした
- おおよそ → 200円でした
これをツリー構造で表すと:
僕の----------D
ランチ代は---D
おおよそ-D
200円でした
形態素解析の次の段階として扱われることが多く、形態素解析の解析結果をもとにして文の構造を解析するものです。
係り受け解析の重要性
形態素解析では「部屋/蒸し/風呂/暑い」と分割されますが、部屋が暑いのか特定できません。しかし係り受け解析まで行うと「部屋が→蒸し→風呂のように→暑い」という関係が分かり、部屋が暑いことが特定できます。
つまり、形態素解析だけでは単語のリストしか得られませんが、係り受け解析によって初めて文の意味構造が理解できるようになるんです。
形態素解析 vs 係り受け解析 - 徹底比較
| 項目 | 形態素解析 | 係り受け解析 |
|---|---|---|
| 目的 | 文を最小単位に分割 | 単語間の関係を把握 |
| 入力 | 生の文章 | 形態素解析の結果 |
| 出力 | 単語 + 品詞 | 修飾・被修飾の関係 |
| 処理順序 | 1段階目 | 2段階目 |
| 主な用途 | 検索、IME、単語頻度分析 | 文の意味理解、機械翻訳 |
| 難易度 | 比較的簡単 | より高度 |
形態素解析と係り受け解析の曖昧性問題
どちらの解析にも「曖昧性」という共通の課題があります。
形態素解析の曖昧性
例えば「機種変にすればよかった」という文を、コンピュータは「機種を変にすればよかった」の意味だと間違えることがあります。それは、名詞「機種」と「変だ」という物の状態を表す形容動詞が存在するためです。
係り受け解析の曖昧性
例文「長い髪の黒い眼の大きな少女」では、何が曖昧なのかというと、「黒い」のは「髪」なのか「眼」なのか、「大きな」のは「眼」なのか「少女」なのかということです。実はこの曖昧性は人間でも(この文だけでは)解消できません。
解釈1: 「黒い」のは「髪」、「大きな」のは「眼」
解釈2: 「黒い」のは「眼」、「大きな」のも「眼」
こうした曖昧性を解消するために、統計的手法や機械学習が活用されています。最近の解析器は大量のコーパス(学習データ)から確率的に「もっともらしい」解析結果を選択するんです。
どちらを使うべきか? - ユースケース別ガイド
形態素解析だけで十分な場合
- 単語頻度分析: ブログ記事で頻出単語を抽出
- キーワード抽出: SEO対策のためのキーワードリスト作成
- テキストの前処理: 機械学習の入力データとして
- 辞書検索: 単語単位での検索機能
係り受け解析が必要な場合
- 質問応答システム: 「誰が何をした?」を理解する必要がある
- 機械翻訳: 文の構造を保ったまま翻訳
- 文書要約: 重要な関係性を抽出
- 感情分析: 「何に対して」ポジティブ/ネガティブなのか
多くの実用的なNLPアプリケーションでは、まず形態素解析を行い、必要に応じて係り受け解析を追加する、という2段階アプローチが一般的です。
実装上の注意点
形態素解析と係り受け解析を実装する際、知っておくべきポイント:
1. 処理の順序
係り受け解析は形態素解析の結果を入力として使うので、必ず形態素解析が先です。
2. 計算コスト
形態素解析は比較的高速ですが、係り受け解析は計算量が多く、処理時間がかかります。
3. 精度のトレードオフ
処理速度を優先するか、精度を優先するかで、使うツールやモデルを選択する必要があります。
次回予告
次回は「形態素解析の主なライブラリとデータセット編」として、実際に手を動かせる内容に入っていきます。
- MeCab: 日本語形態素解析のデファクトスタンダード
- Sudachi: 複数粒度での分割が可能な現代的な解析器
- Janome: Pure Pythonで動く手軽なツール
それぞれの特徴、インストール方法、使い分けのコツまで、実践的に解説します。
「どのライブラリを使えばいいの?」という疑問に、しっかり答えていきますよ!