传统的N-gram backoff模型,提升性能的两条主要路径是增加阶数和增加语料,两者带来的共同副作用是增加了模型的大小,进而增加了语音识别解码器的内存占用。为了减少模型的大小,同时保证性能最大化,引入了prune。
为了实现剪枝选取的准则需要满足以下三个条件:
soundness
The criterion should optimize some wellunderstood information-theoretic measure of language
model quality.
efficiency
高效、快速
self-containedness
从实用性角度考虑,只有当前的语言模型可用,没有其他多余的信息可用
srilm采用了基于相对熵的剪枝方法(N-gram pruning based on relative entropy)。
剪枝的主要目的是为了删除已有ngram,同时保证未删除的ngram不变,还需要重新计算回退概率。
那么怎么样衡量剪枝以后语言模型性能的改变呢?
一个想法就是去最小化剪枝前后两个模型之间概率分布的距离。自然的,我们会选择相对熵或者KL距离,定义参考链接:
所以,裁剪语言模型的流程如下:
1. 给定一个困惑度相对变化的门限threshold
2. 计算删除单独一条ngram,模型困惑度的相对变化
3. 挑选出那些低于门限值的ngram,删除,然后重新计算回退权重
如果删除一条ngram(h,w),h表示历史词,w表示当前词,h’表示历史词去掉第一个词,那么将会带来两方面的影响:
h的回退概率 α(h) ,将变为 α′(h) ;与此同时,所有历史是h对应的回退概率将会改变,统一将这些ngram表示为 BO(wi,h)
p(w|h) 将变为 p′(w|h)=α′(h)p(w|h′)
对于历史词不是h的所有ngram,概率值不变,所以这里只需要考虑:
1. 历史词 hi :
h
2. 当前词 wi
一个是 w ;另外一个是涉及回退概率h对应的w( BO(wi,h) )
所以相对熵可以写成:
Entropy-based Pruning of Backoff Language Models