Akinator.comおよびNaive Bayes分類器


12

コンテキスト:私は、uniコースの統計で(半分忘れられた)経験があるプログラマーです。最近、私はhttp://akinator.comにつまずき、それを失敗させようといくつかの時間を費やしました。そして、誰がそうではなかったのですか?:)

私はそれがどのように機能するかを調べることにしました。グーグルで関連するブログ投稿を読んで、結果のミックスに私の(限られた)知識の一部を追加した後、次のモデルを思いつきます(間違った表記法を使用することを確信しています。そのために私を殺さないでください):

サブジェクト(S)と質問(Q)があります。予測子の目標は、これまでに収集された質問と回答が与えられると、ユーザーが考えている主題である最大の事後確率を持つ主題Sを選択することです。

ゲームGを質問と回答のセットとします:{q1,a1},{q2,a2}...{qn,an}

次に、予測子はP S | G = P G | S P S )を探しますP(S|G)=P(G|S)P(S)P(G)

被験者の事前確率()は、被験者が推測された回数をゲームの総数で割ったものになります。P(S)

すべての回答が独立しているという仮定を立てると、ゲームGが与えられた場合に被験者Sの尤度を次のように計算できます。

P(G|S)=i=1..nP({qi,ai}|S)

使用者が与えられた主題を持っているときにどの質問と回答が与えられたかを追跡すれば、計算できます。P({qi,ai}|S)

P(q,a|S)=answer a was given to question q in the game when S was the subjectnumber of times q was asked in the games involving S

ここで、は被験者の確率分布を定義し、次の質問を選択する必要がある場合、この分布のエントロピーの予想される変化が最大になるものを選択する必要があります。P(S|G)

argmaxj(H[P(S|G)]a=yes,no,maybe...H[P(S|G{qj,a})]

私はこれを実装しようとしましたが、動作します。しかし、明らかに、被験者の数が上がると、パフォーマンスは低下による再計算する必要があるためそれぞれの動きと計算更新配信後P S | G { のq jを} 質問選択のための。P(S|G)P(S|G{qj,a})

私は単に間違ったモデルを選択し、自分の知識の限界に縛られているのではないかと疑っています。または、おそらく、数学に誤りがあります。私を啓発してください:何百万もの主題と何千もの質問に対処できるように、私は何に慣れるか、または予測子をどのように変更するべきですか?


4
私はナイーブベイズではなく、誰かを認識できないたびに拡張された決定木です。

1
このような決定木は更新するには扱いにくいのではないでしょうか?プラス、私は誤って、間違った/正直、間違いの答えをアカウントに簡単な方法を見ていないし、まだ決定木と右端にそれを得る
ADEPT

5
今では20歳の20の質問を推測、の生まれ変わりのように見えます20q.netmentalfloss.com/blogs/archives/13725
Yaroslav Bulatov

5
すみませんが、「人工知能」と「ニューラルネットワーク」をコンテキストなしで使用することは、説明としてカウントされると思います。そして、この種のことに対してどのようにニューラルネットを使用できるかわかりません。たとえば、出力関数はどうなるでしょうか。
-ADEpt

こんにちは@ADEpt、質問されてからしばらく経ちましたが、以前の実装のソースコードを共有できますか?
プリカ14年

回答:


10

このゲームはhttp://20q.netの 20の質問に似ていますが、作成者はニューラルネットワークに基づいていると報告しています。概念記述ベクトルと20問のゲームで説明したニューラルネットワークに似た、このようなネットワークを構築する1つの方法を次に示し ます。

あなたが持っているだろう

  1. 質問の固定数。「最終」質問としてマークされた質問もあります。
  2. 質問ごとに1つの入力ユニット。ここで、回答を0/1表しno/yesます。最初に設定0.5
  3. シグモイドが0..1の範囲に押し込まれた質問ごとに1つの出力単位
  4. すべての入力ユニットをすべての出力ユニットに接続する非表示レイヤー。

回答済みの質問の入力単位は0または1に設定されます。また、既存の回答セットに対して「はい」の回答がある質問の出力単位が1に近い値を出力するようにニューラルネットワークがトレーニングされていることが前提です。

各段階NNで、最も信頼性の低い質問を選択します。つまり、対応する出力ユニットがに近い0.5、質問をし、対応する入力ユニットを回答に設定します。最後の段階で、「最終質問」リストから値に最も近い出力単位を選択します1

20問の各ゲームはNN、逆伝播で重みを更新するために使用できる20個のデータポイントを提供します。つまり、現在のニューラルネットワークの出力を、以前のすべての質問が与えられた真の答えに一致するように更新します。


7

私はそれが本当に分類の問題だとは思わない。20の質問は、多くの場合、圧縮の問題として特徴付けられます。これは、エントロピーについて話す質問の最後の部分と実際によく一致します。

のChapter 5.7(Google books)を参照

カバー、TMおよびジョイ、AT(2006)情報理論の要素

また、ハフマン符号化。arXivで見つけたこの論文も興味深いかもしれません。

Gill、JTおよびWu、W.(2010)「20の質問ゲームは常にYesで終わる」 http://arxiv.org/abs/1002.4907

簡単にするために、yes / noの質問を想定します(akinator.comで許可されている場合、多分、わからない)。可能性のあるすべての主題(akinator.comが知っていること)は、yes / noの一連の質問と回答(本質的にはバイナリベクトル)によって一意に識別できると仮定します。

尋ねられる質問(およびその回答)は、被験者の空間の再帰的分割を定義します。このパーティションは、ツリー構造にも対応しています。ツリーの内部の頂点は質問に対応し、葉は被験者に対応します。葉の深さは、対象を一意に識別するために必要な質問の数とまったく同じです。すべての可能な質問をすることで、既知のすべての主題を(簡単に)識別できます。潜在的に何百もの質問があるので、それは面白くありません。

ハフマンコーディングとの関係は、平均深度が(ほぼ)最小になるようにツリーを構築する最適な方法(特定の確率モデルの下)を提供することです。言い換えれば、質問の順序を平均化して(ツリーを構築して)質問する必要がある質問の数を平均的に少なくする方法を示しています。貪欲なアプローチを使用します。

もちろん、これよりもakinator.comの方が多くありますが、基本的な考え方は、ツリーの観点から問題を考え、その葉の平均深さを最小化しようとすることです。


これは良いスタートですが、問題にはもっと多くがあると思います。たとえば、質問に対する回答をどのように取得しますか?おそらく、彼らは以前のプレイヤーによって与えられた答え(強化学習問題)を使用します。その場合、(a)現在のプレイヤーの問題を解決し、(b)将来のプレイヤーに情報を提供する質問を選択するトレードオフに直面します。
サイモンバーン

一見したところ、20の質問とハフマンコーディングの類似性を引き出す能力は、「範囲の質問」を尋ねる能力にかかっています。つまり、「あなたはキャラクターを宇宙に行ったことはありますか?」「彼は今まで宇宙に行ったことがありますか、それとも男性ですか、それともはげていますか、映画に出ていましたか、...(他の100500のオプション)」などの「毛布」の質問をしています。私は正しいですか?もしそうなら、私はおそらくそれは私が様々な「一つ一つを頼む」に興味を持っていることを明確にする私の質問を編集する必要があります
アデプト

さらに、ハフマンコードを20の質問のモデルとして使用する記事のほとんどは、質問者が自由に自分の質問を作成できることを意味しています。 オブジェクトのコードワードは 0「?しかし、私の場合(または、むしろakinator.comの場合)、一連の質問は事前定義されており、(明らかに)ハフマンコードワードとは何の関係もありません。現在、質問から移行する方法がわかりません。ハフマン符号におそらく、あなたは手の込んだことができます。?
アデプト

@vqv:Re:「それは本当に分類の問題だとは思わない。20の質問はしばしば圧縮の問題として特徴付けられる。」統計的推論と情報圧縮は直接関連しているか、同じ問題ではありませんか?
ヤン

@Yangヨルマ・リサネンの議論について言及していますか?統計的推論と情報圧縮はどちらも不確実性を説明するために確率モデルを使用しますが、それらの観点とそれらの分野の研究者が一般的に非常に異なっている場合。上記で私が言いたいのは、20の質問は分類問題ではなく、圧縮(具体的にはソースコーディング)問題としてより自然に定式化できるということです。…以下に続く
vqv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.