自然言語処理って、どういう流れでテキストを処理するんですか?
人間が書いた文章をコンピュータが扱えるようにするには、段階的な処理が必要なんだ。まずは全体の流れを見てみよう。
形態素解析(単語に分ける)→ 構文解析(文の構造を見る)→ 意味解析(意味を理解する)→ 文脈解析(文脈を読む)
下に行くほど高度で難しい。現在のAIでも文脈解析は完全にはできていない。
形態素解析って具体的に何をするんですか?
文章を意味のある最小単位(形態素)に分割して、それぞれの品詞を判定するんだ。英語はスペースで単語が分かれているけど、日本語は分かち書きがないから、この処理が特に重要なんだよ。
形態素解析のツールにはどんなものがありますか?
日本語の形態素解析には代表的なツールが3つあるよ。G検定ではそれぞれの特徴を押さえておこう。
| ツール | 開発元 | 特徴 | 辞書 |
|---|---|---|---|
| MeCab | 京都大学・NTT | 高速・高精度。最も広く使われている | IPAdic、NEologd等の外部辞書 |
| JUMAN | 京都大学 | 意味情報も付与できる。研究用途に強い | 独自辞書(JUMAN辞書) |
| Janome | 個人開発(OSS) | Pythonのみで動作し導入が簡単。辞書内蔵 | IPAdic内蔵 |
MeCabが最もよく使われる日本語形態素解析エンジン。名前と「日本語の形態素解析ツール」であることを覚えておこう。
N-gramって何ですか?形態素解析とどう違うんですか?
N-gramは文を連続するN個の単位で機械的に切り出す手法だよ。形態素解析のように「意味のある単位」で分けるのではなく、文字やテキストを一定の長さで区切るのが特徴なんだ。
| N | 名前 | 例(「自然言語」を文字N-gram) |
|---|---|---|
| 1 | ユニグラム | 「自」「然」「言」「語」 |
| 2 | バイグラム | 「自然」「然言」「言語」 |
| 3 | トライグラム | 「自然言」「然言語」 |
形態素解析の次のステップについて教えてください。
形態素解析で単語に分けたあと、さらに深い理解をするために3つの解析があるよ。
形態素解析で分割した単語間の係り受け関係を解析し、構文木(Parse Tree)を作成する。
例:「大きな犬が走った」
→「大きな」は「犬」に係る(修飾)
→「犬が」は「走った」に係る(主語-述語)
構文構造がわかっても、意味を正しく理解するには追加の解析が必要。
多義語の解消が代表的な課題。
例:「bank」→「銀行」か「土手」か?文脈から判断する
例:「crane」→「鶴」か「クレーン」か?
1つの文だけでなく、前後の文脈を考慮して理解する。最も高度な解析レベル。
照応解析:「太郎は走った。彼は疲れた。」→「彼」=「太郎」
省略の補完:「太郎はカレー、花子はパスタ(を食べた)」→ 省略された述語を補う
テキストデータって、そのまま機械学習に使えるんですか?
そのままでは使えないよ。テキストをコンピュータが扱える数値に変換する必要があるんだ。その前に、まずデータをきれいにする前処理が大事なんだよ。
生のテキストデータには不要な情報が含まれていることが多い。分析の精度を上げるために事前に除去する。
ストップワードとは、文章中に頻繁に出現するが、文の意味を判別する上であまり役に立たない語のこと。
日本語の例: 「は」「の」「が」「を」「に」「です」「ます」
英語の例: 「the」「is」「a」「in」「of」「and」
これらを除去することで、本当に重要な単語だけを残し、分析の精度を向上させる。
前処理が終わったら、次はどうするんですか?
機械学習はテキストを直接扱えないから、数値ベクトルに変換する必要があるんだ。代表的な方法がBoWとTF-IDFだよ。
文章を「単語の袋」とみなし、語順を無視して、各単語の出現回数だけでベクトルを作る。
| 文書 | 猫 | 犬 | 好き | 嫌い | 走る |
|---|---|---|---|---|---|
| 「猫が好き」 | 1 | 0 | 1 | 0 | 0 |
| 「犬が嫌い」 | 0 | 1 | 0 | 1 | 0 |
| 「猫も犬も好き」 | 1 | 1 | 1 | 0 | 0 |
メリット: シンプルで実装が簡単
デメリット: 語順の情報が失われる(「犬が猫を追う」と「猫が犬を追う」が同じベクトルになる)
また、どの文書にも頻出する語(「する」「ある」等)の影響が大きくなりすぎる → TF-IDFで改善
BoWの出現回数をそのまま使うのではなく、「どれだけ特徴的な単語か」を考慮して重み付けする。
BoW: 単純に出現回数を数える。シンプルだが頻出語の影響が大きい
TF-IDF: BoWに「レアさ」の重み付けを加えたもの。文書の特徴語を見つけるのに有効
どちらも語順の情報は失われる。語順を考慮するにはRNNやTransformer等が必要。