思い浮かべたキャラを言い当てるサイト

Akinator, the Web Geniusというサイトが今話題。実在・架空問わず何かのキャラクター・人物を思い浮かべて、質問に答えていくと、見事言い当てられてしまうというもの。英語のサイトだけど、難しくないので大丈夫。*1
昔からこういうのはあったけど、これは言い当てられるキャラ・人物の数と、その正確さが全然違う。やってみた限りだと、東方やアニメのキャラはほとんど一発正解され、映画のキャラでは唯一BTTFのドク以外は(何回か間違ったが最後には)的中。すごい。

仕組みをちょっと考えた

一通り遊んでみて、仕組みを考えてみた。たぶん、使われているのはベイズ推定
ベイズ推定は簡単に言うと、「AであるときBである確率」が分かっているとき、「BであるときAである確率」を求めること。ここでは、各キャラクターごとに「質問の答えがAであったとき、そのキャラが思い浮かべられている確率」を毎回計算しているんだと思う。
事前確率はすべて均等でもいいだろうけど、最初に年齢と性別のデータがあるから、ある程度頻度の高そうなキャラには事前確率をちょっと高めに振っておく。
次に質問をぶつけて、その答えから各キャラの確率を更新する。「そのキャラが思い浮かべられていたときに、質問の答えがAである確率」は過去のデータベースから分かる。それをベイズ推定でひっくり返せばいい。
質問と更新を繰り返して、あるキャラの確率が閾値を超えたら表示する。


原理はたぶんこれなんだけど、問題は色々ある。
まず、探索範囲をどう絞るか。これは確率が一定値未満になったら、以降ではそこは探索しないことで解決できる(はず)。
一番難しいのが、「ぶつける質問」をどう選ぶか。探索範囲を効果的に絞れる質問は、どうやったら見つかるのか、これがムズい。先読みが必要になると思うんだけど、素直にやると計算量が増えすぎるかもしれない。


ともあれ、推定に必要なデータベースを作るのには相当な努力が要ったはず。外人すげぇ!

*1:Operaだとうまく動かなかったり、崩れたりしたのでFirefoxIE推奨