久保です。
前回から1ヶ月以上空いてしまいました。
自然言語処理のStanford大学の講座シリーズの続きです。
今回はSentence Segmentation、文章中からどのようにして文を分割して取り出すか、という話です。
講義の映像は下記から見られます。
Sentence Segmentation (5:31)
Sentence Segmentation
ここではどのように文章を文(Sentence)に分けるか、という問題を取り上げます。
文末を示す!や?は曖昧ではなく、基本的に文末に置かれます。
一方.(ピリオド)は曖昧です。
ピリオドは文章の終わりにも現れますが、それ以外にもDr.などの略称、0.45などの小数点、などに現れることがあります。
ではどうやって文末の.(ピリオド)を見分けるかというと、これに対応する2値分類器を作ります。
この分類器は、ピリオドを含む文章を与えると、そのピリオドが文末を意味するのか、そうでないのか、の2値に分類します。
分類器の作り方には下記の通りいくつか考えられますが、本講義では決定木による機械学習が取り挙げられます。
- 自分でルールを記述する
- 正規表現を使う
- 機械学習を使う
Determining if a word is end-of-sentence: a Decision Tree
決定木の説明はこちらに譲るとして、
ここでは4つのノードからなる決定木を作っています。
- 後段に多くの空行があるか?
- 文の最期は「?」「!」「:?」のいずれかで終わっているか?
- 文の最期はピリオドで終わっているか?
- etcまたは別の略称(Dr.など)か?
Sentence Segmentation (5:31)より決定木の例を引用
質問にYES/NOで答えていくと、文末かどうかが判定できるようになっています。
More sophisticated decision tree features
今度は先ほどの4つの質問よりもより洗練された決定木の素性(future)を考えてみます。
- ピリオドと一緒に出てくる単語のCase(大文字/小文字)はUpper(すべて大文字), Lower(すべて小文字)、Cap(先頭が大文字), Number(数字)のどれか。
- ピリオドの後に出てくる単語のCase(大文字/小文字)はUpper(すべて大文字), Lower(すべて小文字)、Cap(先頭が大文字), Number(数字)のどれか。
- ピリオドと一緒に出てくる単語の長さは?
- コーパスにおいて、ピリオドと一緒に出てくる単語が文末に現れる確率は?
- コーパスにおいて、ピリオドの後に出てくる単語が文頭に現れる確率は?
これらを上手く素性として使えれば、よりよい分類ができるということですね。
Implementing Decision Trees
決定木の各ノードはif-then-elseによる判定に過ぎませんが、手でこれを作り上げるのは容易ではありません。
手で作ることが出来るのは、よほど簡単な素性やドメインに限られますし、特に数値の素性はしきい値を決めるのが大変難しいです。
そのような理由から、多くの場合には学習用コーパスを使った機械学習により、決定木は作られます。
Decision Trees and other classifiers
決定木以外の分類器で同じ素性を使って分類することもできます。
例えばロジスティック回帰、SVM、ニューラルネットなどです。
感想
今回は短かったですね。
どのようにして、分類に有効でかつ実現(学習)可能な素性を選ぶか、ということが重要なポイントです。
ちなみに機械学習を行うためのツール群は数多くあります。
簡単に試すのであれば、以下のツールがオススメです。
また当ブログで馬場がStanford大学の機械学習の講義を解説しています。
こちらも是非参照ください。
- 機械学習(1) - スタンフォード大学の講義から | Synergy Marketing LAB BLOG
- 機械学習(2) - スタンフォード大学の講義から | Synergy Marketing LAB BLOG
- 機械学習(3) - スタンフォード大学の講義から | Synergy Marketing LAB BLOG
- 機械学習(4) - スタンフォード大学の講義から | Synergy Marketing LAB BLOG
- 機械学習(5) - スタンフォード大学の講義から | Synergy Marketing LAB BLOG
さて、次回は次は『Defining Minimum Edit Distance』、最短編集距離の定義についてです。
Defining Minimum Edit Distance (7:04)