我尝试在 Google 上搜索,但找到的很多内容我都无法理解。
我对 马尔可夫链 的理解仅限于基本层面:它是一种数学模型,其状态变化仅取决于先前的输入……有点像具有加权随机概率而不是不同标准的有限状态机?
我听说你可以使用它们来生成半智能的胡言乱语,只需使用现有的单词句子作为一种词典。
我不知道该用什么搜索词来查找这个,所以有人能给我链接或者解释一下我该如何生成一个能给出半智能答案的东西吗?(如果你问它关于馅饼的问题,它不会开始谈论它听说过的越南战争)
我计划:
- 让这个机器人在 IRC 频道中闲置一段时间
- 从字符串中删除任何用户名并将其存储为句子或其他内容
- 随着时间的推移,以此作为上述的基础。
回答:
是的,马尔可夫链是一种具有概率状态转移的有限状态机。要使用简单的、一阶马尔可夫链生成随机文本:
- 从语料库(文本集合)中收集二元语法(相邻词对)统计信息。
- 创建一个马尔可夫链,每个单词对应一个状态。为文本结尾保留一个特殊状态。
- 从状态/单词 *x* 跳到 *y* 的概率是单词 *y* 紧跟在 *x* 之后的概率,该概率根据训练语料库中的相对二元语法频率估算得出。
- 从一个随机单词 *x* 开始(也许取决于该单词在语料库中作为句子首词出现的频率)。然后随机选择一个状态/单词 *y* 跳转,考虑到 *y* 跟在 *x* 后面的概率(状态转移概率)。重复此操作直到到达文本结尾。
如果你想从中得到一些半智能的东西,那么最好的方法是用大量精心收集的文本来训练它。“大量”部分使其高概率地生成正确的句子(或看似合理的 IRC 谈话);“精心收集”部分意味着你控制它谈论的内容。引入更高阶的马尔可夫链也有助于这两个方面,但需要更多的存储空间来存储必要的统计信息。你还可以研究统计平滑等内容。
但是,让你的 IRC 机器人实际响应对它说的话,需要的远不止马尔可夫链。可以通过对所说的内容进行 文本分类(又名主题识别),然后选择特定领域内的马尔可夫链进行文本生成来实现。朴素贝叶斯是主题识别的一种常用模型。
Kernighan 和 Pike 在 编程实践 中探讨了马尔可夫链算法的各种实现策略。这些内容以及一般的自然语言生成,在 Jurafsky 和 Martin 的 语音与语言处理 中有深入的介绍。