アキネイターの仕組みを考えてみる。

今回はアキネイターをそのうち作りたいなと考えている僕がアキネイターのアルゴリズムを考えてみました。
プログラミングをしたことがない人でもアキネイターがどんな風にして動いているのか気になった人は多いかと思います。
アキネイターをやったことがない人はこれを機会に是非一度試してほしいです。

 

アキネイターとは?

サイトにアクセスするとランプの魔人が登場します。
アクセスしたユーザーが人物を連想します。アニメキャラだったり漫画キャラあったりスポーツ選手だったり歌手だったり
連想が終わったら魔人の質問が始まります。いくつかの質問に回答するとアキネイターがユーザーが連想した人物を回答してくれるというものです。
このアキネイターが正解率が凄い!なんでこんな人物まで知ってるんだ!!と評判なんです。

 

ランプの魔人”
Akinator can read your mind and tell you what character you are thinking of, as if by magic. Think of a real or fictional character, answer few questions, a...

質問方法

質問方法は「はい」「いいえ」「分からない」「たぶん部分的にそう」「たぶん違うそうでもない」の5つです。
 

どんな仕組みで動くのか

早速ですがどんな仕組みで動くのか考えていきたいと思います。アキネイターから出される質問ですが、
 
「実在する?」
「男性ですか?」
「ロボットですか?」
「キャラ名が作品のタイトルになっている?」
「あなたが想像しているキャラクターは、名前に「ー」がつく?」 といったようなものです。
「青い?」
 
例えばドラえもんというキャラをユーザーが想像していたとします。
ドラエモンという答えに至るには
実在しない、性別わからない、ロボット
 
アニメキャラでロボット、二回以上映画化されていてキャラ名が作品タイトルになっているからドラエモンという答えが出てきます。
今回の場合、先にドラエもんという答えが出ていましたので、質問が絞られていますがアキネイターもこのぐらい質問は絞ってきますね。
 

どのようにして質問を絞るのか?

まず最初の質問ですが、「実在する人物ですか?」という質問で次にするべき質問の多くが削られると思います。
例えば、芸能人や実在するスポーツ選手といった可能性は除外され
アニメキャラや漫画キャラに絞られてます。
 
「男性ですか?」という質問で、はいかいいえが選択された場合
さらに半分になります。
このようにして答えにたどり着くための質問は絞られていきますが
たまにフェイクでアキネイターの場合すっとんきょうな質問も混ぜてきます。
 

画像の青の部分がドラえもんとします。
 
 

実在する人物かという質問で実在しない人物の可能性が消えます。
 
候補としては沢山のアニメキャラ
漫画キャラが残ります。
 
 

実在しない場合、ロボットかという質問でさらに絞られます。

候補
マジンガーZ
ドラエもん
ガンダム
ゲッターロボ
エヴァンゲリオン

 

「二回以上映画化されている?」この質問でマイナーな多くの作品が消えたと思います。

候補
マジンガーZ
ドラエもん
ガンダム
ゲッターロボ
初音ミク
エヴァンゲリオン

 

「あなたが想像しているキャラクターは、名前に「ー」がつく?」
ここでドラえもんは「ー」は使わないのでマジンガーZとゲッターロボが消えます。

候補
ドラエもん
ガンダム
初音ミク
エヴァンゲリオン

 

青い?という質問でいよいよドラえもんのみに絞られます。
他にも「イメージカラーは紫?」とか
「赤い?」といったような質問もあります。

編集上の都合により、丸が2つ余計に残ってしまいましたが、このようにして、回答を出していると思います。

 

答えを考えてみる

今、計算で言うと1+1=2の1+1の部分を考えてみましたが、
2の答えの部分もコンピューターに教えてあげないといけないですよね?

エヴァンゲリオンなら紫で碇シンジがパイロットでスマートなロボットだと僕らは知っています
ドラえもんなら青くて丸くて猫型ロボットだと僕らは知っていますがコンピューターはしらないんで答えを用意しなければならないです。

 

どうやって正解を用意するのか?

どうやって正解を用意しているかというと、アキネイターが答えられなかったときです。
多くの人は自分が連想するキャラのプロフィールをある程度知っているメジャーな人を最初は思い浮かべると思います。
が、何度かやっていくうちにマイナーな人物を思い浮かべ始めると思います。
メジャーデビューしていないアーティストとか
誰も思い浮かべないようなマイナーな漫画とか

そういうのが出てくるとアキネイターでも答えられない場合があります。
その時は、ユーザーがどのような人物を想像していたか答えるんですが

ドラえもんの例を見てみると
「実在する?」+1
「男性ですか?」+0
「ロボットですか?」+1
「キャラ名が作品のタイトルになっている?」+1
「あなたが想像しているキャラクターは、名前に「ー」がつく?」 +1
「青い?」+1

 
という風にアキネイターが知らなくてユーザーが答えた場合
アンケートのようにして「はい」で答えた質問に点数を付けて、点数を足していっていると思います。

「はい」+1
「いいえ」-1
「分からない」0
「たぶん部分的にそう」+0.5
「たぶん違うそうでもない」-0.5

こんな感じでしょう。

また正解した場合もドラえもんに至るまでの質問で「はい」と答えた質問を記録してアンケートに足していっていると思います。

なぜアンケートなのかというとこの仕組みはユーザー任せにしているので
ドラえもんを連想していたにもかかわらずいいえを押す人
適当に入力してアンパンマンが出てきたが連想していた答えは違ったにもかかわらず
正解と答える人などなど色々ないたずらも予想されるからです。

一回の正解で答えを出していたらめちゃくちゃになってしまいますのでアンケート方式を取っているのではないかなと思います。

このような膨大な量繰り返していけば、アキネイターの完成です。
用意するのは質問だけでOKだと思います。
意外にも答えに至るまでの質問の種類って少ないです。出される質問も少ない

 

まとめ

実際のアキネイターがどうなっているかは僕は知りませんが、僕が考えたアキネイターはこのような感じで動きます。
今後、アキネイターのようなものを作りたいと考えた人がいれば参考になればなと思っています。

コメント

タイトルとURLをコピーしました