n-gram的原理解释

1. 共现矩阵

共现矩阵描述的是在一个固定大小的滑动窗口下,两个词同时出现的频次。假设共现矩阵用 X X X表示,半窗口大小为 m m m,则 X i , j X_{i,j} Xi,j表示在语料库中,以词 w i w_i wi为中心词时, w i w_i wi前后 2 m 2m 2m个词内 w j w_j wj出现的次数。举例说明如下图:

共现矩阵例子

假设语料库中的词典表示为 V V V,则共现矩阵的大小为 ∣ V ∣ × ∣ V ∣ |V| \times |V| V×V,词典的大小一般很大,因此共现矩阵也非 常巨大,这也是n-gram的一大弊端。

共现矩阵中是对称的,每一行或每一列都可以作为词向量,但是n-gram其实很少用到词向量,更多的是基于统计值预测序列的某个序列上是什么词。真用到词向量的一个例子是Glove ,在那里共现矩阵的每一行会归一化得到一个概率值 P ( i ∣ j ) P(i|j) P(ij),表示在窗口 2 m 2m 2m内,词 w j w_j wj出现时,词 w i w_i wi出现的概率。

以上的描述都是基于窗口的,还有一种方法是基于全篇文章(Word Document Maxtirx),可以理解为窗口为一整篇文章的大小,矩阵 X i , j X_{i,j} Xi,j表示在第 j j j篇文章中,词 w i w_i wi出现的频次,矩阵X的大小为 ∣ V ∣ × M |V| \times M V×M,其中 M M M为文章的篇数。

2. 数学描述

n-gram作为一种基于统计语言,应该可以用数学的语言描述。我们的目标是建立下面的模型:

p ( W ) = p ( w 1 T ) = p ( w 1 , w 2 , . . . , w T ) = p ( w 1 ) ⋅ p ( w 2 ∣ w 1 ) ⋅ p ( w 3 ∣ w 1 2 ) … p ( w T ∣ w 1 T − 1 ) p(W)=p(w_1^T)=p(w_1,w_2,...,w_T)=p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1^2) \dots p(w_T|w_1^{T-1}) p(W)=p(w1T)=p(w1,w2,...,wT)=p(w1)p(w2w1)p(w3w12)p(wTw1T1)

模型中的基本元素是 p ( w k ∣ w 1 k − 1 ) p(w_k|w_1^{k-1}) p(wkw1k1),只需要找到这个概率的表示方法即可,根据贝叶斯公式:

p ( w k ∣ w 1 k − 1 ) = p ( w 1 k ) p ( w 1 k − 1 ) p(w_k|w_1^{k-1})=\frac{p(w_1^k)}{p(w_1^{k-1})} p(wkw1k1)=p(w1k1)p(w1k)

再三注意, w 1 k w_1^k w1k上的k不是幂次, w 1 k w_1^k w1k表示是序列 w 1 , w 2 , . . w k w_1,w_2,..w_k w1,w2,..wk,这也解释了上面贝叶斯公式的分子为什么不是 p ( w 1 k , w 1 k − 1 ) p(w_1^k, w_1^{k-1}) p(w1k,w1k1),因为 w 1 k w_1^k w1k已经将 w 1 k − 1 w_1^{k-1} w1k1包含进去了,直接简写在一起就好了。

根据大数定理,上式可以表示为为:

p ( w k ∣ w 1 k − 1 ) ≈ c o u n t ( w 1 k ) c o u n t ( w 1 k − 1 ) p(w_k|w_1^{k-1})\approx\frac{count(w_1^k)}{count(w_1^{k-1})} p(wkw1k1)count(w1k1)count(w1k)

c o u n t ( w 1 k ) count(w_1^k) count(w1k)表示的是语料库中,序列 w 1 k w_1^k w1k出现的频次,这其实就是在计算一个共现矩阵,只不过这里没有限制窗口大小,如果k很大,那么分子和分母的统计将会消耗巨大的算力。n-gram的基本思想,是它做了一个n-1阶的Markov假设,即认为一个词出现的概率只与它前面的n-1个词相关,即

p ( w k ∣ w 1 k − 1 ) ≈ p ( w k ∣ w k − n + 1 k − 1 ) = p ( w k − n + 1 k ) p ( w k − n + 1 k − 1 ) ≈ c o u n t ( w k − n + 1 k ) c o u n t ( w k − n + 1 k − 1 ) p(w_k|w_1^{k-1}) \approx p(w_k|w_{k-n+1}^{k-1}) = \frac{p(w_{k-n+1}^k)}{p(w_{k-n+1}^{k-1})} \approx \frac{count(w_{k-n+1}^k)}{count(w_{k-n+1}^{k-1})} p(wkw1k1)p(wkwkn+1k1)=p(wkn+1k1)p(wkn+1k)count(wkn+1k1)count(wkn+1k)

这样在计算共现矩阵时,就只需要在大小为n的窗口内进行,不用统计一个长序列 w 1 k w_1^k w1k的频次,大大缩减了计算量。

至此,n-gram统计语言模型的关键概率 p ( w k ∣ w 1 k − 1 ) p(w_k|w_1^{k-1}) p(wkw1k1)计算完毕,基于这个概率可以对给定的序列预测下一个词最可能是什么。

3. 计算优化

即使做了Markov假设,n-gram依旧很耗费算力和存储,因为共现矩阵的大小与词典的大小有关,词典通常非常大,因为共现矩阵会非常大,推理速度也会很慢。下图给了一个共现矩阵参数量的参考值,n表示的是窗口大小,词典大小为20万(汉语词汇量的大致量级)。

n与模型参数的关系

为了进一步优化计算,在获得共现矩阵后,通常会对它进行降维,常见的方法比如PCA和SVD,用SVD降维还被讲成了故事,从多义词的角度来讲述,参考文献3、4。

此外,由于语料库中某些序列的频次为0,那么在计算概率是有可能出现分子或分母为0的情况,这不能说明这些序列的真的不存在,只能说语料库不够大没有覆盖到,所以通常是会进行平滑处理,最简单的方式是给频次+1。

4. 参考文献

  1. word2vec中的数学
  2. Stanford cs224n Lecture 2 - Word Vectors and Word Senses (slides-marginnote)
  3. https://www.cnblogs.com/sancallejon/p/4963630.html
  4. https://blog.csdn.net/qq_16633405/article/details/80577851
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值