Akinator.com和朴素贝叶斯分类器


12

上下文:我是一名程序员,在单门课程的统计方面有一些(被遗忘的)经验。最近,我偶然发现了http://akinator.com,并花了一些时间尝试使其失败。谁不是?:)

我决定找出它是如何工作的。在查阅并阅读了相关的博客文章并将一些(有限的)知识添加到结果组合中之后,我想到了以下模型(我确定我会使用错误的符号,请不要为此而杀了我):

有主题(S)和问题(Q)。预测器的目的是在给定的问题和答案的情况下,选择具有最大后验概率成为用户正在考虑的主题的主题S。

让游戏G为一系列问题和给出的答案:。{q1,a1},{q2,a2}...{qn,an}

然后,预测变量正在寻找。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)P(S|G{qj,a})

我怀疑我只是选择了错误的模型,而受我知识的限制。或者,也许是数学上有错误。请启发我:我应该使自己熟悉什么,或者如何更改预测变量,以便它可以应对数百万个主题和数千个问题?


4
我怀疑这是朴素的贝叶斯,而是每次无法识别某人时都会扩展一些决策树。

1
这样的决策树不会太笨拙以至于无法更新吗?另外,我认为没有简单的方法可以解释偶然的错误/诚实的错误答案,并且仍然可以通过决策树最终解决问题
ADEpt 2011年

5
看起来像是二十岁的二十个问题的猜测者的轮回,现在在20q.net。这是一个流行的解释,它是如何工作的mentalfloss.com/blogs/archives/13725
Yaroslav

5
打扰一下,但是我认为使用“人工智能”和“神经网络”没有任何上下文很难解释。而且我看不到如何将神经网络用于这种事情-例如,输出函数是什么?
ADEpt 2011年

嗨,@ ADEpt,问了问题已经有一段时间了,但是您可以分享在那儿实现的源代码吗?
2014年

Answers:


10

该游戏类似于http://20q.net上的20个问题,创作者报告该问题基于神经网络。这是构造这种网络的一种方法,类似于概念描述向量和20问题游戏中描述的神经网络 。

你会

  1. 固定数量的问题,有些问题标记为“最终”问题。
  2. 每个问题一个输入单位,其中0/1代表no/yes答案。最初设置为0.5
  3. 每个问题一个输出单位,S形压缩成0..1范围
  4. 将所有输入单元连接到所有输出单元的隐藏层。

已回答问题的输入单位设置为0或1,并且假设已经训练了神经网络,以使对于具有“是”答案的问题给出给定的一组现有答案,输出单元的输出值接近1。

在每个阶段,您都将选择NN最不确定的问题,即,对应的输出单位接近0.5,提出问题,并将对应的输入单位设置为答案。在最后阶段,您从“最终问题”列表中选择一个输出单位,其值最接近1

每个包含20个问题的游戏都提供20个数据点,您可以使用这些数据点NN通过反向传播来更新权重,即,您可以对权重进行更新,以使当前神经网络的输出与给定的所有先前问题都匹配真实的答案。


7

我认为这不是一个真正的分类问题。20个问题通常被描述为压缩问题。实际上,这与您讨论熵的问题的最后部分更好地匹配。

请参阅第5.7章(Google图书

Cover,TM和Joy,AT(2006)信息论要素

还有霍夫曼编码。我在arXiv上发现的这篇论文可能也很有趣。

Gill,JT和Wu,W.(2010年),《二十个问题游戏总是以肯定的结尾》, http://arxiv.org/abs/1002.4907

为了简单起见,假设是/否问题(而akinator.com允许,也许不知道)。假设每个可能的主题(akinator.com所知道的)可以通过是/否问题和答案序列(本质上是一个二进制向量)来唯一标识。

所提出的问题(及其答案)定义了主题空间的递归划分。该分区也对应于树结构。树的内部顶点对应于问题,叶子的内部对应于主题。叶子的深度恰好是唯一识别主题所需的问题数量。您可以(通过询问每个可能的问题)来识别每个已知的主题。这并不有趣,因为可能存在数百个问题。

与霍夫曼编码的联系在于,它提供了一种在某种概率模型下构造树的最佳方式,从而使平均深度(几乎)最小。换句话说,它告诉您如何安排问题的顺序(构造一棵树),以使您平均需要问的问题数量很少。它使用贪婪的方法。

当然,akinator.com不仅限于此,但基本思想是,您可以从树的角度考虑问题,并尝试最小化其叶子的平均深度。


这是一个好的开始,但是我认为这个问题还有更多。例如:他们如何获得问题的答案?假定他们使用以前的参与者给出的答案(强化学习问题),在这种情况下,我们面临的选择是(a)为当前参与者解决问题,(b)为未来参与者提供信息。
西蒙·伯恩

乍一看,在20个问题和霍夫曼编码之间进行类比的能力取决于提出“范围问题”的能力。也就是说,不是“您的角色曾经去过太空吗?” 我们在问“毯子”问题,例如“他去过太空,是男性,秃头,是在电影中还是……(其他100500种选择)?” 我对吗?如果是这样,那么我可能应该编辑我的问题,以明确说明我对“一个一个地问”的品种感兴趣
ADEpt 2011年

另外,大多数使用霍夫曼代码作为20个问题模型的文章,都暗示发问者可以自由地编写自己的问题,从本质上讲,这可以归结为“ 对象的代码字中的第位是否为 ”?但是,在我的情况下(或更确切地说,是akinator.com的情况),问题集是预定义的,并且(显然)与霍夫曼代码字无关。现在,我看不到如何从我的问题过渡到霍夫曼代码。也许您可以详细说明?0i0
ADEpt 2011年

@vqv:回复:“我认为这不是一个真正的分类问题。通常将20个问题归类为压缩问题。” 统计推断和信息压缩不是直接相关的/还是相同的问题?

@Yang您指的是Jorma Rissannen的论点吗?统计推断和信息压缩都利用概率模型来描述不确定性,但是它们的观点与那些领域的研究人员的观点通常大相径庭。我上面所说的意思是,可以更自然地将20个问题表述为压缩问题(特别是源编码),而不是分类问题。…继续以下
vqv 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.