使用马尔可夫链(或类似的东西)来生成IRC-bot

时间:2011-03-31 15:54:46

标签: artificial-intelligence nlp markov-chains

我试过google,发现我无法理解。

我理解Markov chains到一个非常基本的层次:这是一个数学模型,它只依赖于以前的输入来改变状态......那么一个加权随机机会而不是不同标准的FSM呢?

我听说你可以用它们来产生半智能废话,给出现有单词的句子用作种类词典。

我无法想到搜索条件来找到这个,所以有人可以链接我或解释我如何能够产生一些半智能答案吗? (如果你问过关于馅饼的问题,它就不会开始谈论它听过的越南战争)

我计划:

  • 让这个机器人在IRC频道中闲置一点
  • 从字符串中删除所有用户名并存储为句子或其他
  • 随着时间的推移,请将此作为上述基础。

3 个答案:

答案 0 :(得分:32)

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

  1. 从语料库(文本集合)收集二元语(相邻单词对)统计数据。
  2. 制作一个每个单词有一个状态的马尔可夫链。为文本结束保留一个特殊状态。
  3. 从州/字 x 跳到 y 的概率是 y 紧跟在 x 之后的概率,根据训练语料库中的相对二元组频率估算。
  4. 以随机单词 x 开头(可能取决于该单词作为语料库中句子的第一个单词出现的频率)。然后选择状态/单词 y 以随机跳转,同时考虑 y 跟随 x 的概率(状态转换概率)。重复,直到你点击文字结尾。
  5. 如果你想从中获得一些半智能的东西,那么你最好的方法是在很多精心收集的文本上进行训练。 “批次”部分使其产生适当的句子(或合理的IRC说话),概率很高; “精心收集”部分意味着你可以控制它所谈论的内容。引入高阶马尔可夫链也有助于这两个领域,但需要更多存储来存储必要的统计数据。您还可以查看统计平滑等内容。

    然而,让你的IRC机器人实际上对所说的内容做出响应需要比马尔科夫链更多批次。可以通过对所说的内容进行text categorization(又称主题定位),然后选择特定于域的马尔可夫链来生成文本来完成。 NaïveBayes是主题定位的流行模型。

    The Practice of Programming中的Kernighan和Pike探讨了马尔可夫链算法的各种实现策略。 Jurafsky和Martin,Speech and Language Processing深入介绍了这些以及自然语言生成。

答案 1 :(得分:0)

你想寻找Ian Barber Text Generation(phpir.com)。不幸的是,该网站已关闭或离线。我有他的文本副本,我想发给你。

答案 2 :(得分:0)

在我看来,你正在尝试同时做多件事:

  1. 在IRC中通过空闲提取单词/句子
  2. 建立知识库
  3. 听一些聊天,解析关键词
  4. 生成关于关键字的一些句子
  5. 这些基本上是完全不同的任务。马尔可夫模型通常用于机器学习。虽然我在你的任务中没有多少学习。

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

    您可以尝试使用隐藏的马尔可夫模型(HMM),其中可见输出是关键字,隐藏状态是从这些字对中产生的。然后,您可以动态地使用更适合特定关键字的句子。