生成有意义随机的文本(学习文档的K阶马尔科夫链)。--- 编程珠玑

来源:互联网 发布:广联达预算软件官网 编辑:程序博客网 时间:2024/05/21 10:07

如何生成一个随机的文本? 这个简单,随机的从字母表里面取字母即可。或随机的从词典里取单词即可。(若字典长度未知?如何随机的选取K个单词?呵呵,扯远了,不过这个问题本blog也有答案。这也是被百度腾讯最经常面到的问题)

如何生成看起来有意义的文本?
即生成了一个单词后,其后面最可能出现的单词是谁(对应一阶马尔科夫链)?或者生成了一串单词后,其后面最可能出现的单词是谁(对应K阶马尔科夫链)?

只有我们知道了一阶或K阶马尔科夫链的状态转移参数,就可轻松的解决上上述问题。现在的问题是,如何知道马尔科夫链的状态转移参数?

我们可以从很多的文档里面训练学习到相应的马尔科夫链参数。如何训练?通过后缀数组!
对于一阶马尔科夫链,我们可以利用一阶后缀数组统计。一阶后缀数组即后缀数组里面的最前的两个单词。
对于K阶马尔科夫链,我们可以利用K阶后缀数组统计。一阶后缀数组即后缀数组里面的最前的K个单词。通过分析统计前K-1个单词和第K个单词出现的频率,可以得到K阶马尔科夫链的参数。


原创粉丝点击