摘要: n元ngram模型本质上就是trie树的结构 ,逐层状态转移。在sun拼音中是采用的是逐层按照顺序用vector表示,查找的时候逐层二分查找。sun拼音的建立ngram模型的方法也是以按照字典序排好序的<ngram元组,次数>序列作为输入建立起来的。 利用顺序存储+二分查找应该是最节省空间的了。但是效率要受一定影响。其余的trie树实现包括可以利用map(hash_map更耗费空间一点),sun拼音也有一个基于map的trie树实现,sirlm是利用自己的一个LHash实现的类似。另外利用double array trie对于这种预先已经排好序不需要动态添加删除的情况也比较适合但是 阅读全文
posted @ 2011-03-09 16:11 阁子 阅读(4617) 评论(1) 推荐(0) 编辑
摘要: 由于语料不可能覆盖掉所有的情况,比如语料中有“小明读了一本书”, 那么“小李读了一本书”没有在语料中出现按照MLE最大似然估计其概率就是0,这显然是不合常理的。所以我们需要对模型进行光滑处理,就是要分一部分概率给语料中没有出现的部分。 问题是如何分配,应该分配多少呢。(下面的课件来自nhu的NLP课程) 这种情况看上去我们分给未知部分的概率太多了24/29 更多的观察更好的数据更小的光滑,分给未知部分23/326 一个极端的情况,这样add one广顺 其实会认为未知事物概率更大,看到我们训练中的数据的可能性很小。 可以看到对于大的词典,我们分配给未知事物的概率太大了。为了减少未知事物分配的概 阅读全文
posted @ 2011-03-09 16:10 阁子 阅读(4260) 评论(0) 推荐(0) 编辑