サマリー
自然言語処理(Natural Language Processing: NLP)は、人間が使う自然言語を機械的に処理する技術の総称で、テキスト分類、文書要約、機械翻訳、感情分析、質問応答など、多岐にわたるアプリケーションに応用されるものとなる。
この技術は、人工知能の分野に属し、機械学習、統計学、言語学、コンピュータ科学など様々な分野の理論や技術がクロスオーバーしたものとなる。NLPの基本的なタスクには、単語分割、形態素解析、品詞タグ付け、構文解析、意味解析、固有名詞認識、照応解析などがあり、これらのタスクは、テキストをより機械的に処理し、機械学習アルゴリズムを適用するために必要な前処理の一部となっている。またNLPでは、単語埋め込み、品詞タグ付け、名前エンティティ認識、構文解析、分類、回帰等の技術が用いられ、更に近年では深層学習に基づく手法が主流となっている。
ここではこのNLP技術技術に関して、岩波データサイエンスシリーズVol2「統計的自然言語処理-ことばを扱う機械」をベースに様々な手法と応用事例について述べている。
今回はことばのモデル入門として確率的なユニグラムモデルとベイズ推定について述べる。
ことばのモデル入門(確率的なユニグラムモデルとベイズ推定)
言語処理の多くの分野では言語モデルというものが登場し、これが言語を処理する要諦になっている。この「言語モデル」とは教科書的な表現では「文字x∈Σの列からなる集合Σ*の部分集合Lを言語という」というような数学的な表現から始まるものがある。
もう少し具体的なイメージでいうと、言語モデルとはことばを話すすべての人の中にあり、それを無意識に使い続けているような身近なものでもある。
ここで例として以下のような文書を考えてみる。
「こんちには みさなん おんげき ですか? わしたは げんき です。」
上記は読もうと思えば普通に読めるものだが、よく見ると文字がところどころ入り変わっていて、明らかにおかしいが、内容は理解できる(読める)。これは頭の中にある言語モデルのおかげでもある。
ここで言語モデルを考える前に、「そもそもことばとは何なのか」について定義する。まず対象とする言葉を「書き言葉」と限定する。ソシュールに代表される言語学の世界では、話し言葉やその時発せられる音が対象となって理論が構築されているものもあるが、それらを含めてしまうと問題が複雑になってしまう為、単純化する目的で領域を限定する。
次に「書き言葉」は文字でできている。日本語の場合はひらがな、カタカナ、漢字がそれに当たる。ここでそもそも「文字」とは何かという定義に遡る。例えば「ワタナベ」という名字を考えた時「ナベ」という字は何十種類もあるが、これらは「同じ文字」と言えるのか「違う文字」と言えるのかを考えてみる。
この「文字」を使う目的が「宛名印刷システムを作る」のであれば、それらは異なる文字として扱われる必要がある。また「英語を日本語に翻訳するシステム」であればWatanbeが「渡辺」に変換されようが「渡邊」に変換されようが関係がない。しかしこれが文脈を見て「渡辺」と「渡邊」を見て正しく翻訳されるシステムを作りたいなら異なる文字として扱うことになる。
日本語以外でもペルシャ語やルーマニア語では環境によって同じ文字が複数の文字コードで表現されてしまったり、ヨーロッパの多くの言語はウムラウトなどアクセント記号を使うがTwitterやFacebookなどではそれらのアクセント記号が省略されていたり、文字のの問題は実世界に多々ある。
これが更に「単語」とは何かという定義に拡張すると、課題は更に複雑になっていく。「単語」は辞書的には、「意味を成す、ことばの最小単位」といった定義がある。たとえば「野球」を「野・球」と分けてしまうと、元の意味を失ってしまうようなものになる。
しかし「高校野球」は「高校・野球」という2つの単語が並んでいると考えるべきか、それとも「高校野球」という一つの単語と考えるべきか、2単語の考え方では「高校野球は「高校の野球」であり、分離しても意味は失われない」と解釈されるし、1単語での考え方では「野球には興味がないが高校野球は見るという人もおり、分離により失われる意味がある」という解釈もできる。何を単語とするかに絶対の正解はない。
これが更に「文」対する定義まで拡張するとそれらの課題が更に複雑になる。
「モデル」という用語には、そういった複雑な、立場などによって答えが違いうる要素に対して、無視したり、簡略な答えを与えたりして「目的に反しない範囲で問題を単純化したもの」であるという含みがある。ことばとは何か、文字とは何か、ということを考え始めた時点で様々な割り切りが必要になり、そこにすでにモデル化は始まっている。
今回のの自然言語の定義では、文字・単語とは「コンピューターで文字・単語として扱えるもの」(ユニコードや形態素解析器におまかせ)とし、文とは「単語の列であり、よって文字の列でもある」とする。
ここで以下はすべて「日本語の文字の列」(上記の定義だと文)となる。
- 今日はいい天気です
- 今日はいいペンキです
- 無色の緑の概念が眠る
- すは気今天でいい日
これらの中で誰もが自然な日本語だとうなずけるのは一番目の文だけとなる。こうした様々な文に対して、日本語話者であれば「非常に日本語らしい」「やや日本語」「日本語と言えなくもない」「日本語でない」という感覚を持ち、一眼見ただけで判定できる。これが言語モデルとなる。この人間のもつ感覚をコンピューターで扱える(数値で扱う)形にすることが自然言語処理となる。
言語モデルが出力する「日本語らしさ」として、どのような数値が適しているのか?たとえば日本語として正しければ1を、間違っていれば0を出力するのが一番単純そうだが、先述のように「日本語らしさ」には度合いがあるので2値にできるものではない。そこで0-1の間の度合いで示す確率としてモデリングするのが自然なアプローチとなる。
ここで音声を入力してテキストを出力する音声認識のケースを考える。例としてある入力音声に対して以下のような出力が候補として挙げられたと考える。
- 今日はいいペンキです
- 今日はいい天気です
ノイズや早口のために、音声を解釈する限りでは「ペンキ」の方が可能性が高かったとしても、「日本語らしさ」の観点からは「ペンキ」よりも「天気」の方が正解に近いと考えるのが常識的な解釈となる。
この「日本語らしい解釈に寄せる」振る舞いは人間の中の言語モデルが備える機能となる。そのようなモデルの機能を、確率を使ってモデリングすると、ベイズの公式を使って以下のように表現することができる。
\(\displaystyle P(今日はいい天気です|[音声])=\frac{P(今日はいい天気です)・P([音声]|今日はいい天気です)}{P([音声])}\\ \displaystyle P(今日はいいペンキです|[音声])=\frac{P(今日はいいペンキです)・P([音声]|今日はいいペンキです)}{P([音声])}\)
P([音声]|[文])は文を音声のように発音する確率であり、音響モデルと呼ばれる。この音響モデルに言語モデルP([文])を掛け算したものは、上式が示す通りP([文]|{音声])の定数倍となる。そこでP([文])・P([音声]|[文])を一番大きくなる文を、音声のテキストの最有力候補として出力することで、その音声の認織結果が「日本語らしさ」を考慮して与えられるようになる。
上記のように、言語モデルは、文に対して「日本語らしさ」の確率を与えるが、次に、これを具体的に入力文から遡って確率として求める方法について述べる。
前述で述べたが、文字をどう扱うか(モデル)は目的に応じて異なってくる。それらのモデルのうちシンプルながらも強力なモデルであるn-グラムモデルについて述べる。
ここで例として以下のような問題を考える。
<問題>次の( )に一番あてはまることばを1〜3の中から選べ。
太郎は しぶしぶ (. ) をした。
1. くしゃみ. 2.スキップ. 3.宿題
P(単語|しぶしぶ)を「しぶしぶ」の後ろに続く単語の確率とすると、上記は常識的に以下となる。
P(くしゃみ|しぶしぶ) = 0.1. ← 日本語的に少しおかしい
P(スキップ|しぶしぶ) = 0.2. ← 微妙におかしい
P(宿題|しぶしぶ) = 0.7. ← 妥当な答え
主観的に答えの確率を割り振ると上記のようになる。このような主観確率はベイズ確率の話の中でよく現れる。このようにn個以下の単語の並びに確率を与えることで言語モデルを考えるのがn-グラムとなる。上記の例は2単語ずつなので2-グラムとなる。(バイグムとも呼ばれる)
ここでn-グラムの中で最もシンプルなn=1の場合は、ユニグラムと呼ばれ、「1単語の並び方」、つまり単語がそれぞれ確率を持つだけとなる。これは各単語の出現確率に相当する。この確率を計算するには、最尤推定理論により以下のようなシンプルな式で求められる。
\[p(w)=\displaystyle\frac{[単語wの出現した回数]}{[文の総単語数]} \]
ここでユニグラムモデルでは語順を考慮しないので「今日はいい天気です」と「です今日はいい天気」が同じ確率になる。これは日本語らしさという観点では不自然に感じるが、モデルの特徴である「目的に反しない範囲で問題を単純化する」という観点で考えると、例えば「文の話題に応じてカテゴリに分類する」という問題では、仮に「ホームラン」という単語があればその文は「スポーツ」や「野球」などのカテゴリに属する確率が高いと考えられ、その文が「ホームランを打った○○選手は・・」とか「ホームランは値千金の一打だった」のようなことまで分かる必要はなく、ユニグラムでも十分に目的を果たせると考えられる。これが問題が「適当な文を生成する」といったものであれば、単語の順番は無視できず、ユニグラムモデルを使うことは不適当であるということになる。
ここで最尤推定のアプローチでは、上式のような割り算で計算をしているので、答えが一つしか得られない。従って確率pwはたった一つの値として推定される。これは集めた文の総単語数が100個のうち、単語wが3個出現してきた時の確率pw=0.03と、1000個集めた時にwが30個出現した時の確率pw=0.03と同じになる。
ここで3/100と30/1000とを比べ、2つの推定の間に違いを見つけようとするアプローチがベイズ統計のアプローチとなる。これは「確率Pwがどういう値を取るかの確率P(Pw)」を見るというもので、ベイズの公式を用いて以下の式で表される。
\[P(p_w|y)=\displaystyle\frac{P(p_w)P(y|p_w)}{P(y)}\]
この式は「分布P(pw)をyという条件の元に新しい分布P(pw|y)に更新できる」ということを意味し、パラメータpwは「一つの値」ではなく「ブレを持つ値」として推定されていく。
とある条件のもとで、単語wが「100個のうち3個」出現した場合(実線)と、「1000個のうち30個」出現した場合(破線)のそれぞれのpwの分布を上式のベイズの公式を使って推定したものを以下に提示する。
どちらも0.03辺りが分布のピークになるが、実線(100個)の方が分布の広がりが大きく「ブレている」ことを示す。このようなベイズ化した確率分布を用いることで、ユニグラムモデルの精度を上げることができる。
ここで、上式のベイズの公式では、更新前の事前の確率分布(初期値)をどうするか?という課題が生じる。この事前確率分布としてよく用いられるものは、その計算の容易性から、更新前と更新後の分布の形が同じもの(共役事前分布)となる。
この観点から、ユニグラムを考える。ユニグラムの分布はサイコロの目と同じ形である「複数の事象がそれぞれ起こる確率を持つ」形(多項分布)であり、イメージ的には面の数がものすごく沢山あり、各面に単語が書いてあるサイコロになる。
これに対して、ユニグラムの事前分布として使われるユニグラムの共役事前分布の一つである”ディリクレ分布の概要と関連アルゴリズム及び実装例について“で述べているディリクレ分布は、イメージ的には、上記のようなサイコロを製造する考え、品質が不安定で重心がずれたり、立方体の形がくずれることで、サイコロの目が出る確率がばらつくようなサイコロ製造機の出口で、サイコロの各目が出る確率を正確に測っているようなものになる。
上記のイメージを3面サイコロの場合の確率分布して示したものを以下に示す。
このようなディリクレ分布やその発展形は、言語モデルをベイズ化する上でよく使われる。それらの中には、CRF等で使われるディリクレ過程やピットマン・ヨー過程等がある。
次回は、トピックモデルについてもう少し詳細に述べる。
コメント
[…] ことばのモデル入門 […]
[…] ここで、事前分布に利用した確率の分布である「カテゴリ分布」と「ディリクレ分布」について述べる。 […]
[…] 岩波データサイエンスシリーズVol2「統計的自然言語処理-ことばを扱う機械」より。前回は言語のモデルとして、モデルとは何かから確率的なユニグラムモデルまでを述べた。今回は、トピックモデルについて述べる。 […]
[…] ことばのモデル入門 (確率的なユニグラムモデルとベイズ推定) […]
[…] ことばのモデル入門 (確率的なユニグラムモデルとベイズ推定) […]