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

11
马尔可夫链是一种(几乎标准的)方法,用于生成对未经训练的眼睛看起来聪明的随机无意义语言。您如何确定马尔可夫生成的文本与人类编写的文本之间的区别?
如果您指向的资源是Python友好的,那将非常棒。
6个回答

8
一种简单的方法是让大量人类阅读输入文本,并查看文本是否有意义。我只是半开玩笑,这是一个棘手的问题。
我认为这是一个困难的问题,因为马尔科夫链生成的文本在词频和单词顺序之间具有很多与真实人类文本相同的属性。
真实文本和马尔科夫链生成的文本之间的区别在于语法和语义含义的更高级规则,这些规则很难以编程方式进行编码。另一个问题是,马尔科夫链足够擅长生成文本,以至于有时会提出语法和语义上正确的陈述。
例如,这里是一个 kantmachine的格言
“今天,他会确信人类的意志是自由的;明天,考虑到自然的不可分割的联系,他会把自由看作是一种纯粹的幻觉,并宣称自然是唯一的。”
虽然这个字符串是由计算机程序编写的,但很难说人类永远不会这样说。

我认为,除非你能提供更具体的细节,揭示计算机和人类生成的文本之间更明显的差异,否则将难以使用计算机编程来解决这个问题。


5
实际上这相当令人不安。我读过《纯粹理性批判》(是我唯一自己读懂的康德作品),我从来不会说这个格言是机器生成的。 - shylent
@shylent - 这是页面上的第四个搜索结果,我同意,它非常符合康德的风格。这将是涉及马尔可夫链的课程的一个很好的例子! - James Thompson

6
你可以采用“暴力”方法,将生成的语言与高于Markov模型的n-gram数据进行比较。例如,如果使用了二阶Markov模型生成语言,则三元组会有正确的频率,但四元组可能不会。您可以从Google的公共n-gram数据集中获取高达5个元组的频率。不过它非常庞大 - 压缩后为24G - 您需要通过邮寄DVD从LDC获取它。编辑:添加一些实现细节。n-gram已经被计算过了,所以你只需要以快速搜索的方式存储计数(或频率)。一个适当索引的数据库,或者也许是Lucene索引应该可以工作。
给定一段文本,扫描它并在您的数据库中查找每个5元组的频率,并查看它相对于以相同4个单词开头的其他5元组的排名。
实际上,更大的障碍可能是数据集的许可条款。在商业应用程序中使用它可能被禁止。

我喜欢这种方法,但我认为这在计算上是不可行的? - agiliq
看不出来,给答案添加了一些细节。 - pufferfish

5
我建议对Evan的回答进行概括:创建一个马尔科夫模型,并使用大量(非常大)的样本进行训练,将其余的样本保留为“测试数据”。现在,观察你已经训练的模型在测试数据上的表现,例如使用卡方检验,该检验将指出“拟合过于好”的情况(表明测试数据确实由该模型生成),以及拟合非常差的情况(表明模型结构存在错误--结构错误的过度训练模型在这种情况下表现不佳)。
当然,还有许多校准问题,例如模型的结构--你是否怀疑基于单词Ntuples和少量其他内容的简单模型,还是更复杂的具有语法状态等的模型。幸运的是,你可以通过使用大量已知为自然文本的语料库以及使用各种结构模型生成的文本来很好地校准这些问题。
另一种方法是使用nltk来解析给定的句子。即使在自然文本中(因为人类是不完美的,解析器也是如此--它可能不知道单词X可以用作动词,只将其分类为名词等等),少量错误解析是可以预期的,但大多数马尔可夫模型(除非它们基本上正在建模与您的解析器使用的相同语法结构--并且您可以使用几个解析器来尝试抵消这个问题!-)会导致比阅读困难的人更多的错误解析。再次根据自然文本和合成文本进行校准,您就会明白我的意思!-)

2
如果你有几个大型的马尔可夫生成的文本,你可以通过比较每个样本之间的词频来确定它们是这样生成的。由于马尔可夫链依赖于常数词概率,因此任何给定单词的比例应该在样本之间大致相等。

也许看一下基于Python的自然语言工具包会更有帮助:http://nltk.sourceforge.net/ - 话虽如此,如果你只是对单词频率感兴趣,那可能有点过度了。 - Markus
1
如果单词频率生成的文本看起来像真实文本,那么如果你处理像a这样的单词频率时可能会遇到问题... - Janusz
这种方法的问题在于,如果人工生成的文本和马尔可夫链生成的文本是由具有类似单词和单词转换频率的文本生成的,那么马尔可夫链生成的文本将看起来非常像人工生成的文本。 - James Thompson

2

0

如果您编写了一个程序,可以从任何符号序列生成马尔科夫转移概率,然后计算马尔可夫矩阵的熵率(见http://en.wikipedia.org/wiki/Entropy_rate#Entropy_rates_for_Markov_chains),这基本上是对文本使用只有马尔可夫链的预测难度的估计(熵越高表示难以预测)。因此,我认为马尔可夫矩阵的熵越低,样本文本就越可能受到马尔可夫矩阵的控制。如果您对如何编写此代码有疑问,我恰好在我的计算机上拥有一个用Python实现这个功能的程序,所以我可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接