当前位置:   article > 正文

自然语言处理之ngram模型

ngram

背景介绍

N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。

每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

公式计算

Bigram

对于bigram模型,单词出现的概率只与前一个词有关,即 P ( w i ∣ w i − 1 ) P(w_i |w_{i-1}) P(wiwi1),整个句子的联合概率为: P ( S ) = ∏ i = 1 m P ( w i ∣ w i − 1 ) P\left ( S \right )=\prod_{i=1}^{m} P \left ( w_i | w_{i-1} \right ) P(S)=i=1mP(wiwi1)
对于每个词出现的概率 P ( w i ∣ w i − 1 ) P(w_i |w_{i-1}) P(wiwi1)可以用最大似然估计法:
P ( w i ∣ w i − 1 ) = C ( w i − 1 , w i ) C ( w i − 1 ) P\left ( w_i |w_{i-1} \right )=\frac{C \left ( w_{i-1} , w_i \right )}{C \left ( w_{i-1} \right )} P(wiwi1)=C(wi1)C(wi1,wi)
其中 C ( w i − 1 , w i ) C \left ( w_{i-1} , w_i \right ) C(wi1,wi)为词 w i − 1 w i w_{i-1}w_i wi1wi 在语料中共同出现的次数。

Ngram

同理,推广到ngram的情况,单词出现的概率只与前 n − 1 n-1 n1个词有关,即 P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) P(w_i |w_{i-n+1},...,w_{i-1}) P(wiwin+1,...,wi1),整个句子的联合概率为: P ( S ) = ∏ i = 1 m P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) = C ( w i − n + 1 , . . . , w i ) C ( w i − n + 1 , . . . , w i − 1 ) P\left ( S \right )=\prod_{i=1}^{m} P \left ( w_i | w_{i-n+1},...,w_{i-1}\right ) \\ P\left ( w_i | w_{i-n+1},...,w_{i-1} \right )=\frac{C \left ( w_{i-n+1} ,..., w_i \right )}{C \left ( w_{i-n+1},...,w_{i-1} \right )} P(S)=i=1mP(wiwin+1,...,wi1)P(wiwin+1,...,wi1)=C(win+1,...,wi1)C(win+1,...,wi)

在实际应用时,通常会对上面的联合概率取对数,将连乘转化为累加的形式方便计算:
l o g P ( S ) = ∑ i = 1 m l o g P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) logP\left ( S \right )=\sum_{i=1}^{m} logP \left (w_i | w_{i-n+1},...,w_{i-1}\right ) logP(S)=i=1mlogP(wiwin+1,...,wi1)
而且实际情况中单词出现的概率 P ( w i ∣ w i − 1 ) P(w_i |w_{i-1}) P(wiwi1)通常是很小的小数,取对数可以将数值放大。
在实际的处理中,我们通常会给每一个句子加上开始标记和结束标记,例如<s></s><s>是为了让第一个词语有上下文,</s>是为了制造一个更加真实的概率分布。

困惑度(perplexity, PPL)

语言模型中经常使用困惑度来作为语言模型的评价,PPL越小句子完整性越好。
对于一段句子 S = w 1 w 2 ⋅ ⋅ ⋅ w m S=w_1w_2 \cdot\cdot\cdot w_m S=w1w2wm
P P L ( S ) = P ( w 1 w 2 ⋅ ⋅ ⋅ w m ) − 1 m PPL \left ( S \right )=P \left ( w_1w_2 \cdot\cdot\cdot w_m \right )^{-\frac{1}{m}} PPL(S)=P(w1w2wm)m1
两边取对数:
l o g P P L ( S ) = − 1 m l o g P ( w 1 w 2 ⋅ ⋅ ⋅ w m ) logPPL \left ( S \right )=-\frac{1}{m} logP \left ( w_1w_2 \cdot\cdot\cdot w_m \right ) logPPL(S)=m1logP(w1w2wm)
对于bigram:
l o g P P L ( S ) = − 1 m l o g P ( S ) = − 1 m ∑ i = 1 m l o g P ( w i ∣ w i − 1 ) logPPL \left ( S \right )=-\frac{1}{m} logP\left ( S \right )=-\frac{1}{m} \sum_{i=1}^{m} logP \left (w_i | w_{i-1}\right ) logPPL(S)=m1logP(S)=m1i=1mlogP(wiwi1)

参考:
https://blog.csdn.net/stupid_3/article/details/83184555
https://blog.csdn.net/sdu_hao/article/details/86893580
https://blog.csdn.net/ding_programmer/article/details/90141428

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/481457
推荐阅读
相关标签
  

闽ICP备14008679号