Stanford大学の自然言語処理講義(1-5) - Word Normalization and Stemming(単語の正規化と語幹抽出)


久保です。
自然言語処理のStanford大学の講座シリーズの続きです。

前回はWord Tokenazionをやりました。
今回は『Word Normalization and Stemming』、単語の正規化(Normalization)と語幹化(Stemming)です。

講義の映像は下記から見られます。
Word Normalization and Stemming (11:47)

Normalization

例えば情報検索(IR)においては、インデクシングされたものとクエリの単語が同じform(形式)である必要があるので、単語の正規化が必要になります。
今「USA」と「U.S.A」を考えてみると、対応の仕方として

  • U.S.Aのピリオドを削除する
  • 検索の単語を展開する(window -> window, windows)

という方法があります。

Case folding

情報検索のようなアプリケーションではユーザは小文字で入力する傾向があるので、文字を小文字(lower case)に置き換えることで検索しやすくします。
しかし小文字に変換すると、本来大文字/小文字が持つ情報が抜け落ちてしまうという問題があります。
例えば「Fed」と先頭を大文字にすると、「連邦準備制度」を示すことになりますが、「fed」になってしまうとそれは分かりません。

また

  • sentiment analysis(感情分析)
  • Machine Translation(機械翻訳)
  • Information extraction(情報抽出)

という分野では、大文字小文字の違いは大きく役に立ちます。
例えばUS(国)とus(代名詞)は全然違います。
安易に大文字・小文字を統一していいわけではなく、タスクの目的に合った対応をしましょう、ということですね。

Lemmatization

lemmatizationとは、単語を見出し語(lemma)化するプロセスです。
このプロセスにより、例えば

  • book, books -> book
  • go, went, gone -> go

というふうに、基本形/活用形の動詞や、複数形/単数形の名詞などを、同一とみなすことができます。

Morphology(形態論)

Morphologyは形態論の意味で、Morphemeとは形態素です。
形態素は単語を成立させる小さな意味のある固まりのことで、意味を持つコアの部分であるStemと、それに付随する文法的な意味を持つ部分であるAffixeからなります。
例えば「Stems」のStemが「Stem」で、Affixeが「s」です。
その他形容詞のxxxxfulの「ful」もAffixeです。

Stemming(語幹抽出)

Stemmingとは、単語から(Affixeを切り離して)Stemを切り出すことです。
例えばautomate(s)もautomaticもautomationも、すべてstemはautomatです。
これは語形の変化を低減させ、関連する単語を同じ語幹にマッピングすることを目的としています。
そのためStemmingはLemmatizationとは異なり、品詞は関係がありません。

講義で出てくるサンプル文書では、compressedもcompressionも共にcompressにstemmingされていますし、exampleから末尾のeが取られ、examplとなっています。

Stemmingにより、末尾が変化します

areが[be]ではなく[ar]にしている理由はよくわかりません。

Porter's algorithm

英語のStemmerの中で最も一般的な『Porter's algorithm』の説明です。
このアルゴリズムはいくつかのヒューリスティックなルールから成っています。

例えばstep1bは、末尾のingやedの前に母音が含まれる場合、ingやedを取る、というルールです。

  • (*v*)ing -> ∅
  • (*v*)ed -> ∅

これに従うと、
walingはwalkとなります。
一方singはsingであって、sにはなりません。
これはingの前に母音が無いからです。

Viewing morphology in a corpus

ここからはUnix toolを使って、「Porter's algorithm」のstep 1bを確認しています。

tr -sc 'A-Za-z' '\n' < shakes.txt | grep ’ing$' | sort | uniq -c | sort -nr

これだと、「ing」の前は特に指定していないため、抽出した単語の中には「king」や「thing」など、末尾の「ing」を取るのは不適当な単語が沢山あります。

tr -sc 'A-Za-z' '\n' < shakes.txt | grep '[aeiou].*ing$' | sort | uniq -c | sort -nr

一方こちらの場合、ingの前に母音が1文字+任意の文字が0文字以上という抽出の仕方なので、kingやthingは出てこなくなっています。
しかしそれでもnothingやsomethingなど、不適当な単語を抽出してしまっています。
やはり自然言語処理はそう簡単には行きません。

Dealing with complex morphology is sometimes necessary

先ほどの例は非常に単純なものでしたが、実際にはより複雑な形態素解析を行う必要が出てきます。
例としてトルコ語の非常に長い単語「UygarlasGramadiklarimizdanmissinizcasina」が挙げられています。

感想

今回も前回以上に、自然言語処理の基礎の基礎となる重要な回でした。
また例えば複数の単語が同一のlemmaの場合に同一として扱うべきかどうか、逆に扱うべきでないか、などについて、
自分たちのゴールに最適なものを選択する必要があります。

さて、次回は『Sentence Segmentation』、文章中からどのようにして文を分割して取り出すか、という話です。
Sentence Segmentation (5:31)


This entry was posted in 自然言語処理(NLP) and tagged , , . Bookmark the permalink.