赞
踩
N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。
每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。
该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
对于bigram模型,单词出现的概率只与前一个词有关,即
P
(
w
i
∣
w
i
−
1
)
P(w_i |w_{i-1})
P(wi∣wi−1),整个句子的联合概率为:
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=1∏mP(wi∣wi−1)
对于每个词出现的概率
P
(
w
i
∣
w
i
−
1
)
P(w_i |w_{i-1})
P(wi∣wi−1)可以用最大似然估计法:
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(wi∣wi−1)=C(wi−1)C(wi−1,wi)
其中
C
(
w
i
−
1
,
w
i
)
C \left ( w_{i-1} , w_i \right )
C(wi−1,wi)为词
w
i
−
1
w
i
w_{i-1}w_i
wi−1wi 在语料中共同出现的次数。
同理,推广到ngram的情况,单词出现的概率只与前 n − 1 n-1 n−1个词有关,即 P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) P(w_i |w_{i-n+1},...,w_{i-1}) P(wi∣wi−n+1,...,wi−1),整个句子的联合概率为: 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=1∏mP(wi∣wi−n+1,...,wi−1)P(wi∣wi−n+1,...,wi−1)=C(wi−n+1,...,wi−1)C(wi−n+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=1∑mlogP(wi∣wi−n+1,...,wi−1)
而且实际情况中单词出现的概率
P
(
w
i
∣
w
i
−
1
)
P(w_i |w_{i-1})
P(wi∣wi−1)通常是很小的小数,取对数可以将数值放大。
在实际的处理中,我们通常会给每一个句子加上开始标记和结束标记,例如<s>
和</s>
,<s>
是为了让第一个词语有上下文,</s>
是为了制造一个更加真实的概率分布。
语言模型中经常使用困惑度来作为语言模型的评价,PPL越小句子完整性越好。
对于一段句子
S
=
w
1
w
2
⋅
⋅
⋅
w
m
S=w_1w_2 \cdot\cdot\cdot w_m
S=w1w2⋅⋅⋅wm:
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(w1w2⋅⋅⋅wm)−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(w1w2⋅⋅⋅wm)
对于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=1∑mlogP(wi∣wi−1)
参考:
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。