美文网首页
NGram prune

NGram prune

作者: 期望最大化 | 来源:发表于2019-01-07 16:44 被阅读5次

    Reference

    https://blog.csdn.net/xmdxcsj/article/details/50321613
    https://arxiv.org/pdf/cs/0006025.pdf

    前置问题:

    • 为什么要做模型裁剪?哪些NGram会被裁剪?裁剪的准则是什么?
      模型裁剪原因:在保证效果影响不大的情况下,尽可能减小模型规模,这样可以节省模型加载内存大小和计算时间。
      模型裁剪准则:相对熵。实际工具中设置的阈值是ppl相对变化门限。
      哪些NGram会被裁剪:对于每一个NGram,计算裁剪前后模型相对熵,然后转换成ppl相对变化值,和阈值进行比较,小于阈值,裁掉。

    • 没被裁剪的NGram是否需要改变?
      没被裁剪的NGram概率值(条件概率)不变,backoff值重新计算。

    • 为什么裁剪不需要其他任何外置文件?(难点与重点)
      重点在于模型本身也有ppl值(或者更严格的说,会有ppl相对值)。
      首先来说,如果我们提供了一个测试集,那我们一定可以得到一个模型在这个测试集上的ppl。我们回想一下每句话ppl的计算过程,然后假设我们提供了一个通用的测试集。那么ppl值计算为:
      ppl = e^{-\Sigma _{h,w} p(h,w)logp(w|h)}
      ppl' = e^{-\Sigma _{h,w} p(h,w)logp(w|h')}
      注意上述两个公式中都是p(h,w),那个代表的是语料中ngram出现的概率,裁剪前后不变。同样的可以和测试集上ppl计算公式比较一下:ppl = 10^{-\frac{1}{N} logp(S)}

    理解重点

    • 相对熵:D(p||p') = −\Sigma _{w_i,h_j}p(w_i, h_j )[log p′(w_i|h_j) − log p(w_i|h_j )]
    • ppl相对变化:\cfrac{ppl'-ppl}{ppl} = e^{D(p'||p)} - 1
    • 相对熵计算过程:对于每一个NGram(二阶以上),计算裁剪它前后的相对熵:
      D(p||p') = −\Sigma _{w_i,h_j}p(w_i, h_j )[log p′(w_i|h_j) − log p(w_i|h_j )]
      = −p(w,h)[logp′(w|h)−logp(w|h)]−\Sigma _{w_i\in BO(w_i,h)} p(w_i,h)[logp′(w_i|h)−logp(w_i|h)]
      上面公式转换是重点,裁剪一个NGram以后,发生变化的值只有只有两部分:
    • 历史词,h_{j\in all h} 固定到h,当前hbackoff值发生了变化。
    • 当前词,w_{i\in V} 固定到w_{i\in V'},所有以当前NGram的h为历史的NGram backoff概率都发生了变化,另外裁剪的NGram概率也发生了变化,裁掉以前直接获取,裁掉以后需要backoff到低阶获取。

    示例如下,如果删除NGram 中的3gram:我 爱 你 ,那么整个模型概率发生变化的有:
    p(你|我 爱)
    bo(我 爱 w),所有以我 爱为历史词的NGram其backoff值都发生了变化。
    bo(我 爱),我 爱backoff值也发生了变化。

    裁剪流程

    1. 给定一个ppl相对变化的门限threshold
    2. 计算删除单独一条ngram,模型困惑度的相对变化
    3. 挑选出那些低于门限值的ngram,删除,然后重新计算回退权重。

    相关文章

      网友评论

          本文标题:NGram prune

          本文链接:https://www.haomeiwen.com/subject/wtpurqtx.html