关于使用马尔科夫链算法生成文本的应用

3

我正在阅读Brian W. Kernighan和Rob Pike的《编程实践》一书。第三章提供了一个马尔科夫链方法的算法,它读取源文本并使用它生成“读起来不错”的随机文本(这意味着输出比乱码更接近于正确的英语):

set w1 and w2 to the first two words in the source text
print w1 and w2
loop:
   randomly choose w3, one of the successors of prefix w1 and w2 in the source text
   print w3
   replace w1 and w2 by w2 and w3
   repeat loop

我的问题是:当w2和w3的新值在源文本中没有后继时,处理这种情况的标准方法是什么?非常感谢!
3个回答

1

以下是您的选项:

  1. 随机选择一个单词?(始终有效)
  2. 随机选择一个新的W2?(可能仍会循环)
  3. 返回到上一个W1和W2?(可能仍会循环)

我可能会尝试第二或第三个选项一次,然后回退到第一个选项-这总是有效的。


1
您所描述的情况考虑了3-grams,即给定数据集中3元组的统计频率。要创建一个没有吸收状态的马尔科夫矩阵,即没有f_2(w1,w2) -> w3f_2(w2,w3) = 0的点,您需要扩展可能性。对@ThomasW答案的一般化扩展如下:
  1. 如果设置预测器f_2(w1,w2) != 0从中选择
  2. 如果设置预测器f_1(w2) != 0从中选择
  3. 如果设置预测器f_0() != 0从中选择
也就是说,像通常一样从3元组集合中进行选择,然后从2元组集合和1元组集合中进行选择。在最后一步,您将仅按其统计频率加权随机选择一个单词。

@ThomasW 没问题,欢迎来到 Stack Overflow!通常这里的想法是给有帮助的答案点赞并接受最好的答案。这有助于我们“关闭”问题,以便我们可以回答更多的问题。此外,没有必要说谢谢,点赞也能表达同样的意思,我们试图在这个网站上隐藏“杂乱无章”的内容 - FAQ 中有很多关于良好网站礼仪的信息。 - Hooked

0

我相信这是自然语言处理(NLP)领域一个严重的问题,没有直接的解决方案。一种方法是除了实际单词外,还标记词性来推广映射。使用词性,程序至少可以预测在单词W2和W3后面应该跟随哪个词性,如果该单词序列没有先例。"一旦这些训练示例上执行了此映射,我们就可以在这些训练示例上训练标记模型。对于给定的新测试句子,我们可以从模型中恢复标记序列,很容易确定模型所识别的实体。" 来自哥伦比亚大学注释


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