20

我尝试了谷歌,发现我能理解的很少。

我对马尔可夫链的理解非常基本:它是一个数学模型,只依赖于先前的输入来改变状态......所以是一种带有加权随机机会而不是不同标准的 FSM?

我听说您可以使用它们来生成半智能的废话,给定现有单词的句子以用作各种字典。

我想不出搜索词来找到这个,所以任何人都可以链接我或解释我如何能产生一些给出半智能答案的东西吗?(如果你问它关于派,它不会开始谈论它听说过的越南战争)

我计划:

  • 让这个机器人在 IRC 频道中闲置一段时间
  • 从字符串中删除任何用户名并存储为句子或其他内容
  • 随着时间的推移,以此为基础。
4

3 回答 3

32

是的,马尔可夫链是具有概率状态转换的有限状态机。使用简单的一阶马尔可夫链生成随机文本:

  1. 从语料库(文本集合)中收集二元组(相邻词对)统计信息。
  2. 制作一个每个单词一个状态的马尔可夫链。为文本结尾保留一个特殊状态。
  3. 从状态/单词x跳到y的概率是紧跟在x之后的单词y的概率,是根据训练语料库中的相对二元组频率估计的。
  4. 从一个随机词x开始(可能取决于该词作为语料库中句子的第一个词出现的频率)。然后选择一个状态/词y随机跳转,同时考虑到y跟随x的概率(状态转移概率)。重复直到到达文本结尾。

如果你想从中获得一些半智能的东西,那么最好的办法就是在大量精心收集的文本上对其进行训练。“lots”部分使其以高概率产生正确的句子(或似是而非的 IRC 说话);“精心收集”部分意味着您可以控制它所谈论的内容。引入高阶马尔可夫链在这两个领域也有帮助,但需要更多的存储空间来存储必要的统计数据。您还可以研究诸如统计平滑之类的东西。

然而,让你的 IRC 机器人真正响应所说的内容,需要的不止马尔可夫链。可以通过对所说内容进行文本分类(也称为主题定位),然后选择特定领域的马尔可夫链来生成文本来完成。朴素贝叶斯是一种流行的主题发现模型。

Kernighan 和 Pike 在The Practice of Programming 中探讨了马尔可夫链算法的各种实现策略。Jurafsky 和 ​​Martin 在《语音和语言处理》中对这些以及一般的自然语言生成进行了深入介绍。

于 2011-03-31T16:15:22.860 回答
0

您想查找 Ian Barber 文本生成 (phpir.com)。不幸的是,该网站已关闭或离线。我有他的文本副本,我想把它寄给你。

于 2011-03-31T16:08:01.380 回答
0

在我看来,您正在同时尝试多种事情:

  1. 通过在 IRC 中闲置来提取单词/句子
  2. 建立知识库
  3. 听一些聊天,解析关键字
  4. 生成一些关于关键字的句子

这些基本上是非常不同的任务。马尔可夫模型通常用于机器学习。不过,我在您的任务中没有看到太多的学习。

larsman 的回答显示了如何从基于单词的马尔科夫模型生成句子。您还可以训练权重以支持其他 IRC 用户使用的那些词对。但尽管如此,这不会生成与关键字相关的句子,因为构建/改进马尔可夫模型与“驱动”它不同。

您可以尝试隐藏马尔可夫模型 (HMM),其中可见输出是关键字,隐藏状态由这些词对构成。然后,您可以动态地偏爱更适合特定关键字的句子。

于 2011-03-31T16:22:52.270 回答