统计语言模型——Ngram

什么是语言模型

机器是怎么识别语言的呢?语言是灵活的,语言也是有规律的。人们可以了解一门语言的人可以判断一句话是否”合理”。通俗来讲,语言模型评价一句话是否“合理”或“是人话”,也就是判断这句话的成句概率。目前语言模型在输入法和语音识别和手写识别都有很大的应用,输入法可以通过拼音对各个词句的概率,将所需要输入的词句优先排在更前面的位置。从而有更快的打字输入。目前语言模型的发展有统计语言模型、神经语言模型、预训练模型、大语言模型。

语言模型的分类

自回归(auto regressive)语言模型

  • 在训练时由上文预测下文(或反过来)。
  • 单向模型,仅使用单侧序列信息。
  • 代表:N-gram,ELMO, GPT。

自编码(auto encoding)语言模型

  • 在训练时预测序列中任意位置的字符。
  • 双向模型,吸收上下文信息。
  • 代表:BERT。

N-gram语言模型

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=w1w2w3w4w5wn 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,w5wn)
对句有着不同的程度切分就会有不一样的概率计算效果。如何计算这些概率呢?
如果以字为单位
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(wnw1,,wn1)P(wnwn3,wn2,wn1)假设第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)=counttotal+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(wnwn1,wn2)=λ1P(wnwn1,wn2)+λ2P(wnwn1)+λ3P(wn) λ 1 + λ 2 + λ 3 = 1 \lambda_1+\lambda_2+\lambda_3=1 λ1+λ2+λ3=1
对于 λ \lambda λ可以在训练时进行超参数调节。

语言模型的评价指标

困惑度 perplexity

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)=2N1log(P(w))
这两个数值都是与成句概率成反比,但是这个数值是一个相对值。

神经网络语言模型

之前的文章介绍过了神经语言网络语言模型,他的副产物就是词向量。神经网络语言最后一层过softmax层,所以这个模型没有平滑问题,而且这个模型的所占用的内存较小,相对的缺点就是计算速度较慢一点,统计语言模型就是多次查哈希表的过程。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeon3paang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值