【问题标题】:Regarding the use of the Markov chain algorithm for generating text关于使用马尔可夫链算法生成文本
【发布时间】:2013-05-06 02:13:30
【问题描述】:

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

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 的新值在源文本中没有后继的情况的标准方法是什么?

非常感谢!

【问题讨论】:

    标签: algorithm markov-chains


    【解决方案1】:

    这里有你的选择:

    1. 随机选择一个词? (总是有效)
    2. 随机选择一个新的W2? (可以想象仍然循环)
    3. 备份到以前的 W1 和 W2? (可以想象仍然循环)

    我可能会尝试 #2 或 #3 一次,然后回退到 #1 - 这将始终有效。

    【讨论】:

      【解决方案2】:

      您描述的情况考虑3-grams,即给定数据集中三元组的统计频率。要创建没有adsorbing states 的马尔可夫矩阵,即没有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-gram 集合中绘制,而不是 2-gram 集合而不是 1-gram 集合。在最后一步,您将简单地根据统计频率随机加权绘制一个单词。

      【讨论】:

      • @ThomasW 没问题,欢迎来到 Stack Overflow!通常,这里的想法是对有助于并接受最佳答案的答案进行投票。这有助于我们“关闭”问题,以便我们可以回答更多问题。另外,不用说谢谢,点赞也是一样,我们试图在这个网站上隐藏“混乱”——常见问题解答中有很多很好的网站礼仪。
      【解决方案3】:

      我相信这是 NLP 中的一个严重问题,没有直接的解决方案。一种方法是标记除了实际单词之外的词性,以便泛化映射。使用词性,如果词序列没有先例,程序至少可以预测词 W2 和 W3 后面应该有什么词性。 “一旦在训练示例上执行了这种映射,我们就可以在这些训练示例上训练一个标记模型。给定一个新的测试语句,我们可以从模型中恢复标记序列,并且可以直接识别由模型。”来自哥伦比亚notes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多