题
马尔科夫连锁是一个(几乎标准)的方式以产生 随机的胡言乱语 它看起来聪明,未受过训练的眼睛。你会如何去关于标识马尔科夫产生的文本,从人类书面文本。
这将是真棒,如果你指的是蟒蛇友好。
解决方案
您可以使用“蛮力”的方法,因此你比较产生语言上收集的n-gram比生成它的马尔可夫模型为了更高的数据。
即。如果用一个2阶马尔可夫模型生成的语言,高达3克,将有正确的频率,但4 - 克可能不会。
您最多可以得到来自谷歌的公开的 n元数据集的这是巨大的,但 - 24G的压缩的 - 你需要通过邮寄得到它从的 LDC 。
编辑:添加一些实现细节
在正克已经被计算在内,所以你只需要计数(或频率)存储的方式,可以快速地搜索。一个正确索引的数据库,或者一个Lucene索引应该工作。
给定一段文字,扫描越过它并查找每个5克的频率在数据库中,并看看它行列相比,具有相同的4个字开始其它5-克。
实际上,一个更大的障碍可能是数据集的许可条款。使用它的商业应用程序可能会被禁止。
其他提示
一个简单的方法是将有一大群人看你输入文本,看看文字是有道理的。我只是半开玩笑的,这是一个棘手的问题。
我相信这是一个困难的问题,因为马尔可夫链生成的文本都将有很多真正的人类文字的相同性质的词频和词的顺序之间的简单关系的条款。
由马尔可夫链产生真正的文本和文本之间的差异是在语法的更高级别的规则和在语义的意义,这是很难编程进行编码。另一个问题是,马尔可夫链是生成文本不够好,他们有时会拿出语法和语义正确的语句。
作为一个例子,这里的从kantmachine 一个格言:
今天,他会觉得确信 人的意志是自由的;明天, 考虑不可分割的链条 自然,他看起来对自由的 单纯的幻想,并宣布性质是 所有功能于所有
虽然这个字符串被写了一个计算机程序,很难说一个人会不会说这一点。
我认为,除非你可以给我们介绍一下,揭露更明显的差异计算机和人类生成的文本更具体的细节将很难解决这个使用计算机编程。
我建议埃文的回答的概括:让你自己的马尔可夫模型,并与你给出的(非常大的)样品的一大块训练它,保留样品的其余部分作为“测试数据”。现在,看到你已经训练模型如何以及是否对测试数据,例如用卡方检验,将建议的情况中,“配合是太好”(暗示的测试数据确实是由该模型产生),以及那些在其中配合是非常糟糕的(建议在模型结构错误 - 过用错误的结构-trained模型确实在这种情况下,一个众所周知的不良作业)。
当然,仍然有许多校准问题,如模型的结构 - 你怀疑基于词的n元组简单的模型,更小,或更复杂的一个以语法状态等。幸运的是,你可以通过使用已知的对是自然的文字,也那些大型语料库你自己生成各种结构的模型校准东西相当不错。
有一个不同的方法是使用 NLTK 来分析你给出的句子 - 少数错误解析是,即使在自然的文本预期(如,人无完人,所以是解析器 - 它可能不知道这个词X可以被用作动词,只有它归类为一个名词,等等,等等),但最马尔可夫模型(除非他们基本造型相同的语法结构解析器碰巧使用 - 您可以使用多个解析器,试图抵消 - !)将使得多错误解析甚至比人类的阅读障碍。再次,校准是天然VS合成的文本,你会明白我的意思 - - !)
如果你有几个大的马氏产生的文本,你能确定,他们所通过比较字频率之间的每一个样品。由于马尔科夫链上取决于常数字概率,该比例的任何特定词应大致相等离样品样品。
众包。使用机械土耳其人和得到一定数量的人投票。甚至有一些图书馆帮你把这个关闭。例如:
这里是个博客从O'Reilly的雷达对使用提示机械土耳其人来得到你的工作完成:
如果你写从符号的任意序列产生马尔可夫转移概率,然后计算马氏矩阵的熵速率的程序。 (请参见 http://en.wikipedia.org/wiki/Entropy_rate#Entropy_rates_for_Markov_chains )这基本上是如何容易地将文本可以仅使用马尔可夫链(更高的熵装置更难来预测)来预测的估计。因此我认为,马尔可夫矩阵的低熵是,越有可能是文字的样品是由马氏矩阵控制。如果您有关于如何写这个代码的问题,我曾经有在Python这正是这一点我计算机上的程序,所以我可以帮你。