【语言模型】n-gram

简介

n-gram模型也称为n-1阶马尔科夫模型,它有一个有限历史假设:当前词的出现概率仅仅与前面n-1个词相关。因此(1)式可以近似为:

当n取1、2、3时,n-gram模型分别称为unigram、bigram和trigram语言模型。n-gram模型的参数就是条件概率

假设词表的大小为100,000,那么n-gram模型的参数数量为

n越大,模型越准确,也越复杂,需要的计算量越大。最常用的是bigram,其次是unigram和trigram,n取≥4的情况较少。

n-gram中的back off

backuoff penalty

bigram模型的计算

bigram的最大似然估计:

$$P_{MLE}(w_i|w_{i-1})={count(w_{i-1},w_i) \over count(w_{i-1})}$$

这其中需要统计bigram词频$count(w_{i-1},w_i)$和unigram词频$count(w_{i-1})$。

示例

通过统计9222个句子,得到:

bigram统计量(词频)

bigram概率

unigram统计量(词频)

根据unigram统计量进行归一化得到概率

这个例子中,i一共出现了2533次,其中i want 出现827次。归一化后的概率为827/2533=0.33

模型怎么存?

模型存的是什么?

  • n-gram概率?还是原始的n-gram词频?
  • 按照稀疏矩阵存?还是全矩阵?

实践技巧

所有的操作在log空间

  • avoid underflow
  • (also adding is faster than multiplying)
  • 回退 backoff
  • smooth

回退

revisit

ngram是基于统计的还是基于学习的?优化

  • 因为ngram的最大似然估计,最优解是解析解,因此无需优化。统计和学习不冲突?

参考