赞
踩
机器是怎么识别语言的呢?语言是灵活的,语言也是有规律的。人们可以了解一门语言的人可以判断一句话是否”合理”。通俗来讲,语言模型评价一句话是否“合理”或“是人话”,也就是判断这句话的成句概率。目前语言模型在输入法和语音识别和手写识别都有很大的应用,输入法可以通过拼音对各个词句的概率,将所需要输入的词句优先排在更前面的位置。从而有更快的打字输入。目前语言模型的发展有统计语言模型、神经语言模型、预训练模型、大语言模型。
N-gram是一种统计语言模型,它是如何计算成句概率的呢?用
S
S
S代表句子,
w
w
w代表单个字或词
S
=
w
1
w
2
w
3
w
4
w
5
…
w
n
S = w_1w_2w_3w_4w_5…w_n
S=w1w2w3w4w5…wn
P
(
S
)
=
P
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
…
w
n
)
P(S) = P(w_1,w_2,w_3,w_4,w_5…w_n)
P(S)=P(w1,w2,w3,w4,w5…wn)
对句有着不同的程度切分就会有不一样的概率计算效果。如何计算这些概率呢?
如果以字为单位
P(今天天气不错) = P(今)*P(天|今) *P(天|今天) *P(气|今天天) *P(不|今天天气) *P(错|今天天气不)
如果以词为单位
P(今天 天气 不错) = P(今天)*P(天气|今天) *P(不错|今天 天气)
对于学过统计的同学来说,我们知道可以用频率来估计概率
P
(
今天
)
=
c
o
u
n
t
(
今天
)
c
o
u
n
t
(
a
l
l
)
P(今天)=\frac{count(今天)}{count(all)}
P(今天)=count(all)count(今天)
对于学过条件概率的同学来说知道
P
(
天气
∣
今天
)
=
c
o
u
n
t
(
天气
,
今天
)
c
o
u
n
t
(
天气
)
P(天气|今天)=\frac{count(天气,今天)}{count(天气)}
P(天气∣今天)=count(天气)count(天气,今天)
c
o
u
n
t
(
天气
,
今天
)
{count(天气,今天)}
count(天气,今天)代表天气和今天出现在一起的次数。
统计语言模型有着很明显的困难,就是句子太多了,对任意一门语言,N-gram数量都非常庞大,无法穷举,需要简化。
马尔可夫假设
P
(
w
n
∣
w
1
,
…
,
w
n
−
1
)
≈
P
(
w
n
∣
w
n
−
3
,
w
n
−
2
,
w
n
−
1
)
P(w_n|w_1,…,w_{n-1}) ≈ P(w_n|w_{n-3},w_{n-2},w_{n-1})
P(wn∣w1,…,wn−1)≈P(wn∣wn−3,wn−2,wn−1)假设第n个词出现的概率,仅受其前面有限个词影响。这里的n就代表着Ngram的N是多少。假如n=3,用字来计算概率
P
(
今天天气不错
)
=
P
(
今
)
∗
P
(
天
∣
今
)
∗
P
(
天
∣
今天
)
∗
P
(
气
∣
天天
)
∗
P
(
不
∣
天气
)
∗
P
(
错
∣
气不
)
P(今天天气不错) = P(今)*P(天|今) *P(天|今天) *P(气|天天) *P(不|天气) *P(错|气不)
P(今天天气不错)=P(今)∗P(天∣今)∗P(天∣今天)∗P(气∣天天)∗P(不∣天气)∗P(错∣气不)
这样看就简化许多。
1、影响第n个词的因素可能出现在前面很远的地方。例如,我读过关于马尔科夫的生平的书,我看过关于马尔科夫的生平的电影,我听过关于马尔科夫的生平的故事。
2、影响第n个词的因素可能出现在其后面。
3、影响第n个词的因素可能不在文中。
*所以对于第3点,如何给出语料中没出现过的词或ngram概率?*对于文中没有出现的词,一句话的成句概率里面变成为0。
理论上说,任意的词组合成的句子,概率都不应当为零,如何给没见过的词或ngram分配概率即为平滑问题,也称折扣问题(discounting)。
1、回退(backoff)
当三元组a b c不存在时,退而寻找b c二元组的概率,P(c | a b) = P(c | b) * Bow(ab),Bow(ab)称为二元组a b的回退概率,回退概率有很多计算方式,甚至可以设定为常数,回退可以迭代进行,如序列 a b c d,
P(d | a b c) = P(d | b c) * Bow(abc),
P(d | bc) = P(d | c) * Bow(bc),
P(d | c ) = P(d) * Bow (c)
2、加1平滑
对于P(word)不存在如何处理,可以对概率进行加1修正:
P
(
w
o
r
d
)
=
w
o
r
d
+
1
c
o
u
n
t
(
t
o
t
a
l
)
+
V
P(word)=\frac{word+1}{count(total)+V}
P(word)=count(total)+Vword+1
V是词表的数量。
3、OOV
NLP中常见处理一种的未登录词的一种方法就是OOV,将低频词替换为UNK,预测中遇到的未见过的词,也用UNK代替,例如:
一语成谶 —> 一语成UNK
P
(
U
N
K
∣
一语成
)
P(UNK|一 语 成)
P(UNK∣一语成)
4、插值
受到回退平滑的启发,在计算高阶ngram概率是同时考虑低阶的ngram概率值,以插值给出最终结果:
P
(
w
n
∣
w
n
−
1
,
w
n
−
2
)
=
λ
1
∗
P
(
w
n
∣
w
n
−
1
,
w
n
−
2
)
+
λ
2
∗
P
(
w
n
∣
w
n
−
1
)
+
λ
3
∗
P
(
w
n
)
P(w_n|w_{n-1},w_{n-2})=\lambda_1*P(w_n|w_{n-1},w_{n-2})+\lambda_2*P(w_n|w_{n-1})+\lambda_3*P(w_n)
P(wn∣wn−1,wn−2)=λ1∗P(wn∣wn−1,wn−2)+λ2∗P(wn∣wn−1)+λ3∗P(wn)
λ
1
+
λ
2
+
λ
3
=
1
\lambda_1+\lambda_2+\lambda_3=1
λ1+λ2+λ3=1
对于
λ
\lambda
λ可以在训练时进行超参数调节。
P
P
(
S
)
=
P
(
w
1
w
2
.
.
.
w
n
)
−
1
n
PP(S)=P(w_1w_2...w_n)^{-\frac{1}{n}}
PP(S)=P(w1w2...wn)−n1或者
P
P
(
S
)
=
2
−
1
N
∑
l
o
g
(
P
(
w
)
)
PP(S)=2^{-\frac{1}{N}\sum log(P(w))}
PP(S)=2−N1∑log(P(w))
这两个数值都是与成句概率成反比,但是这个数值是一个相对值。
之前的文章介绍过了神经语言网络语言模型,他的副产物就是词向量。神经网络语言最后一层过softmax层,所以这个模型没有平滑问题,而且这个模型的所占用的内存较小,相对的缺点就是计算速度较慢一点,统计语言模型就是多次查哈希表的过程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。