AI個別技術と関連理論 11・確率4

前記事で書いたように、ベイズ推定は人工知能向けにうってつけの性格を持っています。ですから、機械学習や自動推論など、人工知能分野では広くさまざまな形で応用されています。具体的にいくつか見てみましょう。

 

スパムメールの識別

もっとも有名な応用例がスパムメールの識別でしょう。POP3のメールサーバーで自動的に実行される形で、多くのインターネット接続サービスプロバイダーが提供しているサービスです。「ベイジアンスパムメールフィルター」、あるいは単に「ベイジアンフィルター」と呼ばれます。

基本的な仕組みは簡単です。やはり、

という形の式を使います。

この式に代入できるように、スパムメールのいろいろな要素を定義します。

P(A) → スパムメールである確率

P(B) → スパムメールにありがちな単語、たとえば「無料」がメールに見られる確率

P(B|A) → スパムメールが「無料」という単語を含んでいる確率

P(A|B) → 「無料」という単語があればスパムメールである確率(これが求めたい確率です)

 

次に、とりあえず今は、それぞれの確率には適当な数値を当てます。

P(A) = 0.05

P(B) = 0.1

P(B|A) = 0.6

メール全体のうちスパムメールは100通に5通、全メールに「無料」の単語が入っている確率は10%、スパムメールに「無料」の単語が入っているものは60%ということです。

これを当てはめて計算すると、 となります。「無料」という単語が含まれているならばスパムという基準では、スパムである確率が6倍の30%にはね上がりました。

このほかに、「URLが張ってある」という基準や、「激安」、「必ず」、「100%」、「出会える」、「遊べる」など、いろいろな要素で同じようにP(A|B)を求めてやり、合算して出てきた確率が一定水準に達していればスパム認定してはじく……という処理を、ベイジアンスパムメールフィルターは行っています。

 

ベイジアンネットワーク

前記事の最後の方で触れた、ベイズ推定の柔軟性をフルに活かした推論が行えるアルゴリズムです。「主観的な確率」まで飲み込みつつ推論を進めることができ、そういう点では「本当に正しいかどうか」には怪しい部分が残りますが、しかし何も手がかりがないよりはずっとマシな情報が確保できます。

前の記事ではモンティ・ホールやガン検査を例題として挙げましたが、現実の事件にもあてはめて試してみましょう。

西暦643年、蘇我入鹿が山背大兄皇子を攻め、殺害した事件を取り上げます。

 

くわしいいきさつについてはこちらとかこちらご覧いただくとして、ざっと概略を見ます。641年に舒明天皇が没し、山背大兄皇子(やましろおおえのみこ)、古人大兄皇子(ふるひとおおえのみこ)、中大兄皇子(なかのおおえのみこ)の3者間で王位争いが起こります。その争いの「ヒートアップを避けるため」と称して、蘇我蝦夷(そがのえみし・入鹿の父)は皇極天皇という女帝(中大兄皇子の生母)を擁立しますが、これは山背大兄皇子の孤立を招き、ヒートアップを避けることには全然なりませんでした。

で、643年、蘇我入鹿は側近の巨勢徳多(こせのとこた)、大伴長徳(おおとものながとこ)らに100名の兵を率いさせて山背大兄皇子を攻め、その一族を全滅させました。「上宮王家滅亡事件」といいます。

この件につき、「実は入鹿の背後に、黒幕がいたのではないか」、もっと踏み込みますと、「中大兄皇子が黒幕だったのではないか」という可能性をベイズ推定で考えます。

 

中大兄皇子というと、小学校の社会科の教科書から登場しますので、みなさんたいていは覚えていらっしゃると思います。のちに天智天皇となる「大化の改新を進めた人」ですよね。

偉人ですから、「中大兄皇子が事件の首謀者だった」という事象Aの確率は10%としましょう。P(A) = 0.1。蘇我入鹿単独犯行、または蘇我入鹿と古人大兄皇子の共謀犯行の確率が90%です。主観的に仮に決めた確率です。

次に、「山背大兄皇子殺害に直接関わった者が出世する」という事象Bの確率を20%とします。巨勢徳多と大伴長徳という人物ですが、たぶん、知っている人はほとんどいませんよね。高校日本史の教科書でも書いてないだろうと思います。巨勢も大伴も古くからある名門の大豪族ですが、蘇我入鹿にアゴで使われているくらいですから、そんなに有力者じゃないです。ということで、P(B) = 0.2とします。これも主観的。

 

さて、話は少し飛びまして、西暦649年のことです。巨勢徳多が左大臣に、大伴長徳が右大臣に任じられます。孝徳天皇の時代、中大兄皇子が皇太子的な立場で政権を取っていた時のことですから、事実上、中大兄皇子が任じたことになります。

おや?

この人たちは、山背大兄皇子を攻める兵を率いていた人たちですね。それが左大臣、右大臣。左大臣といえば人臣の最高官位で、右大臣は2番目です。今で言えば首相と副首相。いやあ、大出世ですなあ。

ということで、「山背大兄皇子の殺害実行者が出世する確率」は2分の2で100%。P(B|A) = 1です。

 

では、P(A|B)、つまり「殺害実行者が出世したという事象が起きたとき、中大兄皇子が首謀者である確率」を計算します。毎度お約束の、

です。上記の数値を代入します。

出ました。0.5。50%です。事前確率のP(A) = 10%が、5倍にはね上がっています。

事実、山背大兄皇子一族を全滅させた蘇我入鹿や巨勢徳多、大伴長徳は誰も処罰されていません。また、中臣鎌足の伝記である『藤氏家伝』には、「入鹿はほかの王族と相談して、謀反のおそれがある山背大兄皇子を攻めた」と書いてあります。「ほかの王族」というと、古人大兄皇子と中大兄皇子、そして皇極天皇でしょうね。

 

ここで話を飛ばした間の出来事を簡単にご紹介しますと、

645年7月、中大兄皇子と中臣鎌足、蘇我入鹿を satsugai。(この時、巨勢徳多は入鹿をあっさり裏切り、中大兄皇子側に寝返っています。もしかして、最初から……?)

645年10月、中大兄皇子、古人大兄皇子を謀反のかどで satsugai。

649年、左大臣・阿倍内麻呂、病死。中大兄皇子は右大臣・蘇我倉山田石川麻呂を satsugai。(このあと、巨勢徳多と大伴長徳が左右の大臣になります。)

また、山背大兄皇子の件とは関係ないのですが、658年には有間皇子を、謀反の罪を着せて satsugai しています。

 

こうしたいきさつを見ますと、上宮王家滅亡事件について、

  1. 巨勢徳多と大伴長徳については、「山背大兄皇子殺害の実行者のうち、《さほど大物ではなく御しやすい者》を首謀者が出世させる確率」をP(B|A)とし、
  2. 蘇我入鹿、古人大兄皇子については別途、「殺害実行者のうち、《大物で力をもつ可能性が高い者》を首謀者が粛清する確率」をP(B|A) = 100%

として計算しますと、「中大兄皇子が上宮王家滅亡事件の首謀者だった確率」は合計で100になります。むろん、「中大兄皇子が上宮王家滅亡事件の黒幕である」とはっきり書いてある史料はありません。そう言っている学説も、たぶんありません。しかし、ベイズ推定を用いて試算してみると、かくも容疑濃厚となるのです(もちろん数値設定のさじ加減も影響しているのですが)。

この例のように、ベイズ推定は現実の犯罪捜査にも応用されており、医療の現場では診断に(症状の原因を探るのは犯人探しと似たようなプロセスです)、消息を絶った潜水艦の捜索に(米海軍の原潜スコーピオン号が実際に発見されています)……といったように、幅広く用いられています。

ただ、これまで例題として取り上げてきたものは何とか手計算でできるものでしたが、上の犯罪や医療、捜索という現実の例では、事象A→事象B→事象C……と、連鎖的に事象がつらなることもあります。さらには因果関係が分岐したり、逆に合流したりすることもあるわけです。そうなると手計算では無理です。そこで、複雑なケースにも対応できるベイズ推定アプリケーションとして「ベイジアンネットワーク」があります。

ベイジアンネットワークは、Bayonetなどの製品版もありますが、フリーウェアやオープンソースもあり、幅広い用途に利用可能です。上記のような犯罪捜査や医療などへの応用に加えて、イメージ認識、言語認識、動画認識などへの応用もあり、機械学習の手法のひとつにもなっています。

それでは、次の記事ではベイズ推定やベイジアンネットワークの機械学習への応用について見ていきます。