人工無脳は考える 人工無脳は考える | 掲示板 | 資料 | アーカイブ

2005/03/07 revised 2005/03/09

学習ブロック入門編

next:計画ブロック入門編 >> Next Session:人工無脳の条件

人工無脳はチャットの内容を記憶し、それを再構成することで会話を行なうふりをする。近年では自分が属しているチャットだけでなく、ニュースサイトのテキストなども収集して学習する人工無脳も多い11こうさぎ酢鶏など。チャットやRSSから得られた文字列を必要な形式で記憶することが学習ブロックの目的である。人工無脳の学習アルゴリズムは文の再構成アルゴリズムと一体になっている場合が多いのだが、あえて切り離して議論することで組み合わせの自由などを考えることができるようになる。そこで、ここでは学習、すなわち入力文字列を記憶に変換するアルゴリズムについてのみ考えよう。

マルコフ連鎖

以前から注目されているアルゴリズムに、C. Shannonによって1948年に発案されたマルコフ連鎖によるテキスト生成(Markov text generator)22C. E. Shannon, A Mathematical Theory of Communication", The Bell Sys. Tech. J., 27, 379-423(1948)がある。これを採用して上手く日本語に適用した人工無脳もすでに存在し、いくつかのサイト(Markov1.pm Markov2.pm, マルコフ連鎖による文章の自動生成) では分かりやすく解説されている。マルコフ連鎖による文の生成は文字の並びを簡単な確率過程とみなして扱う方法である。例えばFig.1のような文には、日本語で用いられるあらゆる語句がランダムに使われているわけではなく出現する形態素は限られているし、その中でも繰り返し使われているものがある。
Fig. 1 元になるテキストの例(形態素解析済み)
夏/猫/は/全然/旅行/に/適さ/ず/。/
冬/猫/も/また/細心/の/注意/を/要す/。/
特に/黒/猫/は/黒/狐/と/誤認/さ/れ/、/本気/で/追跡/さ/れる/こと/あり/。/
ある/時/、/(かま)/猫/は/運/わるく/風邪/を/引い/て/、/とうとう/一/日/やす/ん/で/しま い/まし/た/。/
今日/は/(かま)/猫/君/が/まだ/来/ん/ね/。/

そこで、これらの形態素を元のテキストの出現率に従ってランダムに並べてみると、日本語らしき文字列を近似的に生成することができると考えられる。この方法を、マルコフ連鎖による一階の近似( First order approximation )という。

さらに元のテキストをよく観察すると、「夏」という文字の次には「猫」しかこない。「猫」の次には場所によって「は」や「も」、「君」などが現れる、など前後関係によって規則性があるのがわかる。このルールを逆に用いれば、「夏」の次には必ず「猫」を選び、その次には「は」「も」「君」のなかからランダムにひとつを選ぶ、といった方法で、日本語の文法を全く知らなくても「夏猫は」や「夏猫君」という正しい文字の並びを作り出すことができる。与えられたテキストの中からこのような組み合わせを全て拾い集めると、Perlで言うところの配列のハッシュが得られる。ひとつの文を生成するには、文頭に現れる文字から順番にハッシュをたどって候補を選択しながら並べればよい(Fig. 3)。
Fig. 3 配列のハッシュを使った文の生成

このような、ひとつの形態素とひとつの形態素の間のつながりを利用した方法をマルコフ連鎖によるニ階の近似(Second order approximation)という。ここでFig.2で格助詞である「は」に注目すると、「は」の次には「全然」「黒」「竃」「運」というように様々な候補がある。取り上げた例文は限られた単語のみからなっているから良いが取り扱う文の量が多くなるとさらに候補の数が増えてゆき、次第に文としての体裁をなさなくなっていってしまう。 サンプルプログラム(一階のマルコフ連鎖ニ階のマルコフ連鎖) に手元にあるテキストをいろいろ食わせて、生成された文の品質を調べてみよう。
Fig. 2 一階のマルコフ連鎖による生成文
の/綿密/。/――/て/怒り/た/を/た/に/彫っ/し/あっ/の/細工/に/こと/の/白い/の/
性質/な/穴蔵/眼/あっ/の/的/つけ/。/た/仲間/若い/た/もと/すてき/近づい/し/、
で/去っ/も/ある/いれ/前/が/は/あっ/やさしい/は/叫び声/それ/ /せ/し/。/だ/
獣/が/たち/取り出し/ある/その/と/だ/私/た/う/う/かえって/たり/う/以前/い/の/
/生きもの/おき/し/は/を/へ/を/の/単なる/ /さかん/なか/自分/利口/て/不完全/
Fig. 3 ニ階のマルコフ連鎖による生成文
私/の/上/に/、/死骸/を/控え/て/みる/と/なっ/た/の/つか/ない/本源/的/な/、 そこ/の/だ/。
しかし/私/は/私/は/妻/は/――/その/漆喰/の/心持/を/すりつけ/、/近所/の/理由/で/ あっ
――/それ/まで/自分/の/こと/を/私/は/その/あいだ/私/は/打つ/と/なっ/て/拾い上げ/ た/!

このような有様である。論文などでは一文一義といって読者に分かりやすくする工夫をしたりするのだが、これはその対極にあって細切れの文をつぎはぎしたような状態になっている。文の流れをもう少し維持するには三階の近似(Third order approximation)を用いる。こちらは「猫-は」という2要素の関係ではなく「猫-は-全然」という連続した三要素についての関係を考える。ニ階および三階のマルコフ連鎖で学習された「猫」についての記憶をFig. 4に示す。Fig. 4(a)とFig. 4(b)を比べると、(a)で「は」が3回登場しているのが、(b)では一つにまとめられ、その先の選択肢まで記憶されている。
Fig. 4 ノードの構造の比較

教科書的には(b)のような表現になる。しかしこの場合は選ばれる確率を(「は」,「も」,「君」)=(0.5, 0.25, 0.25)と選択肢ごとに変える必要があってプログラムが無駄に複雑になる。簡単なロジックで元のテキストの確率を保存するならば(c)の方が分かりやすい。すなわち階数が大きくなっても配列のハッシュであることに変わりはないというわけである。同様にサンプルプログラム(三階のマルコフ連鎖)に上と同じテキストを食わせた結果を以下に示す。
三階のマルコフ連鎖による生成文
その/怪物/を/悔/む/よう/に/なり/、/兎/や/あらゆる/人/を/憎む/べき/凶行/の/罪
これ/まで/自分/が/もっと/論理/的/な/自己/犠牲/的/災害/の/点/を/ぶるぶる/震わせ/ た/。
そこ/を/塗り/こむ/こと/と/は/抑え/きれ/ぎ/れ/な/叫び声/で/あっ/た/。!

内容が猟奇的な気がするのは食わせたテキストがエドガー・アラン・ポーの『黒猫』だからである。それは置いておいて、文としての連続性が前の例と比べて改善しているのがわかる。無論n階のマルコフ連鎖を考えていけばより連続性が増し、文としての自由度が低下した出力を得ることができるだろう。一方、nを大きく取るほどひとつの文を重複して記憶することになるため相対的に文の終点が出現する確率が低下し、得られる文の長さの期待値が元のテキストのそれより長くなる傾向がある。

課題

マルコフ連鎖を使った場合の課題を以下に示す。まず、学習量が増大するにつれて以下の副作用が現れる。(1)生成文の質の低下、(2)生成文の長文化、(3)生成文の無個性化である。これらはいずれも人工無脳製作者の思惑とは逆ではないだろうか。さらに、形態素解析で文を細分化することもデータ量をふやすという意味で等価であり、実は副作用が大きい。

その他に日本語の構造に関係する疑問がある。それは係り受けの問題で、「コーヒー+吹いた」「ジュース+吹いた」「紅茶+吹いた」というような文があった場合、「( 飲み物)+吹いた」という一般化ができるわけで、上の例で取り上げたような前から後ろへ向かう連鎖よりも、文末から文頭に向かう連鎖の方が有効ではないか、というものである。これについては別の機会に検証したい。

ログ記憶

チャットで行なわれた会話を、その順番と全文を保存した状態で記憶する方法をログ記憶と呼ぶ。マルコフ連鎖とは逆に、元の文字列をできるだけ変形しないで利用するため、ここで述べるべきことはあまりない。1.形態素解析済みの状態で記憶する、2.一部の形態素をタグに置き換える、3.語尾を変える、などの処理をすればよいだろう。

next:計画ブロック入門編 >> Next Session:人工無脳の条件