Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 识别马尔可夫生成内容的算法?_Python_Algorithm_Markov - Fatal编程技术网

Python 识别马尔可夫生成内容的算法?

Python 识别马尔可夫生成内容的算法?,python,algorithm,markov,Python,Algorithm,Markov,马尔可夫链是一种(几乎是标准的)生成方法,在未经训练的人看来,它是智能的。您将如何从人类书写的文本中识别马尔可夫生成的文本 如果您指向的资源是Python友好的,那就太棒了。如果您有几个大型马尔可夫生成的文本,您可以通过比较每个示例之间的词频来确定它们是否友好。由于马尔可夫链依赖于恒定的单词概率,因此每个样本中任何给定单词的比例应大致相等。一个简单的方法是让一大群人为您阅读输入文本,看看文本是否有意义。我只是半开玩笑,这是个棘手的问题 我认为这是一个很难解决的问题,因为马尔可夫链生成的文本在词频

马尔可夫链是一种(几乎是标准的)生成方法,在未经训练的人看来,它是智能的。您将如何从人类书写的文本中识别马尔可夫生成的文本


如果您指向的资源是Python友好的,那就太棒了。

如果您有几个大型马尔可夫生成的文本,您可以通过比较每个示例之间的词频来确定它们是否友好。由于马尔可夫链依赖于恒定的单词概率,因此每个样本中任何给定单词的比例应大致相等。

一个简单的方法是让一大群人为您阅读输入文本,看看文本是否有意义。我只是半开玩笑,这是个棘手的问题

我认为这是一个很难解决的问题,因为马尔可夫链生成的文本在词频和单词顺序之间的简单关系方面与真实人类文本有很多相同的特性

真实文本和由马尔可夫链生成的文本之间的差异在于更高层次的语法规则和语义意义,这很难通过编程进行编码。另一个问题是,马尔可夫链在生成文本方面非常出色,有时它们会给出语法和语义正确的语句

例如,以下是一个示例:

今天,他会确信 人的意志是自由的;明天, 考虑到不可解的生命链 自然,他将自由视为一种精神 仅仅是幻觉,宣称自然是真实的 总而言之

虽然这个字符串是由计算机程序编写的,但很难说人类永远不会这么说


我认为,除非你能给我们更具体的关于计算机和人类生成的文本的细节,这些文本暴露出更明显的差异,否则使用计算机编程将很难解决这个问题

众包。使用机械土耳其人,让一些人来投票。甚至有一些库可以帮助您实现这一点。例如:

这里有一篇来自O'Reilly Radar的博客文章,介绍使用Mechanical Turk完成工作的技巧:


我建议对埃文的答案进行一个概括:制作一个自己的马尔可夫模型,并使用所给的大量(非常大)样本对其进行训练,将样本的其余部分保留为“测试数据”。现在,看看你训练过的模型在测试数据上的表现如何,例如,卡方检验将表明“拟合太好”(表明测试数据确实是由该模型生成的)以及拟合非常差的情况(暗示模型结构存在错误——在这种情况下,一个训练过度、结构错误的模型做得非常糟糕)

当然,还有很多需要校准的问题,比如模型的结构——你是否怀疑一个简单的模型是基于N个单词或更多的单词,还是一个更复杂的模型,有语法状态等等。幸运的是,你可以通过使用大量已知的自然文本和其他文本进行校准您使用各种结构的模型生成自己

另一种不同的方法是用来解析给定的句子——即使在自然文本中也会出现少量的错误解析(因为人类是不完美的,解析器也是如此——它可能不知道单词X可以用作动词,而只将其归类为名词等),但大多数马尔可夫模型(除非他们建模的语法结构与你的语法分析器使用的语法结构基本相同——你可以使用几个语法分析器来尝试解决这个问题!-)将导致比阅读困难的人多得多的语法错误。再次,在自然文本和合成文本上进行校准,你就会明白我的意思!-

你可以使用“蛮力”方法,将生成的语言与在n-gram上收集的数据进行比较,n-gram的阶数高于生成语言的Markov模型

i、 e.如果语言是用二阶马尔可夫模型生成的,那么最多3克的语言将具有正确的频率,但4克的语言可能不会

你可以从谷歌的公共网站上获得高达5克的频率——虽然这是一个巨大的数字——24克的压缩视频——你需要从谷歌的DVD上获得它

编辑:添加了一些实现细节

n-gram已经被计算过了,所以您只需要以一种快速搜索的方式存储计数(或频率)。一个正确索引的数据库,或者Lucene索引应该可以工作

给定一段文本,扫描它并在数据库中查找每个5克的频率,然后查看它与以相同4个单词开头的其他5克相比的排名


实际上,更大的障碍可能是数据集的许可条款。将其用于商业应用程序可能会被禁止。

如果您编写一个程序,从任何符号序列生成马尔可夫转移概率,然后计算马尔可夫矩阵的熵率。(请参阅)这基本上是一个仅使用马尔可夫链预测文本的容易程度的估计(更高的熵意味着更难预测)。因此,我认为马尔可夫矩阵的熵越低,文本样本越有可能由马尔可夫矩阵控制。如果您对如何编写此代码有疑问,我碰巧有一个python程序在我的计算机上正是这样做的,因此我可以帮您解决此问题。

查看基于python的自然语言工具包:-也就是说,如果你只是对词频感兴趣,这可能有点过分。如果生成的词频看起来像真实文本,那么如果你使用像a这样的词频,你可能会遇到问题…这种方法的问题是,如果人类生成的文本和马尔可夫链生成的文本e由具有相似单词和单词转换频率的文本组成,马尔可夫链g