コンピューターが言葉を使えた:統計的言語モデル
天馬「今まで話してきた自然言語処理のアプローチ方法は、言ってみれば『ルールベース』だ。英単語を英文法どおりに並べれば英語になるはずという、中学校の英作文のやり方だった。しかしこのルールベースだと、曖昧な自然文を相手にした場合、例外ばかりになってしまうことはすぐに分かるだろう」
猿田くん「さっきも話に出た『フレーム問題』と似た話ですね。世の中のすべての事象を記述することはできない、というジレンマ」
天馬「そうだ。しかし統計的言語モデルというアプローチ方法がある。これは文章に含まれる文字や単語の種類、特徴的な表現を統計的に評価する計量言語学という研究分野から生まれた。伴くん、言語を統計処理する方法として最初に思いつくことは何かね?」
伴くん「そうですね。言葉の使用頻度かな。検索キーワードトップ10なんかWebでよく見ますからね」
天馬「あれは知りたい言葉のランキングだが、似たようなものか。単語を取り出して、出現頻度順に並べるだけだから簡単だ。単語の出現頻度が分かると、何に使えそうかね?」
伴くん「え~と、かな漢字変換するときに『かんじ』と入力されたら、最も出現頻度の高い漢字から候補として出せば便利なはずです」
天馬「ま~大昔というか、最初期のワープロはそんなレベルだったな。しかしそれでは毎回同じ漢字が最上位になってしまい使いづらい。もう少し高度な手法として n-gram処理が古くからある」
天馬「このn-gramとは、文章の構成要素を連続するn個の要素に分解したものだ。この構成要素とは、文字でも単語でもよい。例えば、上図のように文章を単語単位に分割して2文字ずつ組み合わせたものを作るのが、『単語の2-gram』となる。文章から単語を切り出すのは、形態素解析をすればできる」
愛さん「そんなことをして、なんの意味があるのですか?」
天馬「この単語n-gramを用いると、単語どうしのつながりやすさが分かる。膨大な量の文章で『単語の2-gram』を調べると、どの単語とどの単語が連続しているかが統計的にわかる。例えば愛さん、百花(ひゃっか)と言えば?」
愛さん「繚乱(りょうらん)ですか。百花繚乱ですね」
天馬「そうだ。百花という言葉だと、ほとんど繚乱とセットで使われるだろう。これを統計的にデータで保持していると、『ひゃっか』と入力した段階で『百花繚乱』と予測ができる」
猿田くん「百貨店かもしれないですよ」
天馬「猿田、そういうのを『遠慮会釈』がない、と言うんだ!」
猿田くん「それをいうなら『軽妙洒脱』だ、と言ってもらいたいですね」
愛さん「先生、いちいち相手にしないで進めてください」
天馬「うむ、同じ文章内に一緒に現れることを『共起』と呼ぶのだが、このn-gramは、前の単語によって次の単語が共起する確率が決まるという考えをもとにしている」
伴くん「このn-gramの『n』は、2ではなくてもよいのですね?」
天馬「そうだ。3でも4でもかまわないが、『n』が大きくなるほど統計データの作成が大変になる。だからこのn-gram統計データはWebで公開されていて、日本語なら言語資源協会がn=7 まで公開しているから、誰でも利用可能だ」
伴くん「n-gramは他にどのような用途がありますか?」
天馬「そうだな。n-gramは欧米で考えられたもので、本来は文章の特徴量を数値で表現するものだ。これを説明すると、多少難しい数式が出てくるので止めておこう。簡単な例なら、例えば紙に書いてある文字をOCRで読み込む際の文字認識で使える。君たちOCRは知っているな?」
伴くん「もちろん知ってます。光学的文字認識装置ですね。紙にある活字や手書き文字をスキャンして、文字として抽出する装置です」
天馬「そうだ。数字のOCRならかなり昔から使われてきた。郵便番号の読み取り装置がそうだ。しかし日本語の漢字となると何万種類もあるので、文字の印字品質やスキャナーの精度などで誤認識が多くなる。しかしn-gramのデータを持っていると、『二×三脚』と一部読めない字があっても『二人三脚』とキチンと認識してくれる」
愛さん「猿ちゃん、『二足三文』と言いたかったでしょうけどダメね」
猿田くん「そんなつまらないことは言わないよ。愛ちゃん『×肉×食』なら?」
愛さん「どうせ『弱肉強食」と言わせて、『焼肉定食』と言いたいのでしょう』
天馬「はいはい、次にいくぞ。この統計的手法はなかなか便利で、先ほど説明したルールベース、つまり自然言語の文法を手作業で書き出さなくてもよくなったのだ。つまり、文法とは単語をどのように並べるかだから、単語の並べ方を統計的に解析すれば、文法に相当する統計情報の取得が可能となる。インターネットの普及で、大量の文字資源を簡単に収集できるようになったことも、研究の進展に大きく役立った」