我正在阅读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的新值在源文本中没有后继的情况的标准方法是什么?
非常感谢提前!
答案 0 :(得分:1)
这是您的选择:
我可能会尝试一次#2或#3,然后再回到#1 - 这将始终有效。
答案 1 :(得分:1)
您描述的情况考虑3-grams,即给定数据集中3元组的统计频率。要创建一个没有adsorbing states的马尔可夫矩阵,这不是f_2(w1,w2) -> w3
和f_2(w2,w3) = 0
的点,您必须扩展可能性。 @ ThomasW答案的一般扩展是:
f_2(w1,w2) != 0
从f_1(w2) != 0
从f_0() != 0
从也就是说,正常情况下从3克组中抽取,而不是2克组,而不是1克组。在最后一步,你只需按照统计频率随机抽取一个单词。
答案 2 :(得分:0)
我认为这是NLP中的一个严重问题,没有一个简单的解决方案。一种方法是除了实际的单词之外还标记词性,以便概括映射。使用词性,如果单词序列没有先例,则程序至少可以预测单词W2和W3应该跟随哪个词性。 “一旦对训练样例进行了这种映射,我们就可以在这些训练样例上训练一个标记模型。给定一个新的测试句子,我们就可以从模型中恢复标记序列,并且可以直接识别由模型。”来自哥伦比亚notes。