N-gram模型

本文深入探讨了N-gram这一传统统计语言模型的工作原理,详细解释了条件概率和乘法公式在模型中的应用,以及如何通过最大似然估计计算概率。文章还讨论了N-gram模型的缺陷,如参数空间过大和数据稀疏问题,并介绍了如何通过数据平滑来解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

预备知识

条件概率

P(B∣A)=P(AB)P(A) P(B | A) = \frac {P(AB)} {P(A)} P(BA)=P(A)P(AB)

乘法公式

P(AB)=P(A)P(B∣A)P(A1A2…An)=P(A1)P(A2∣A1)P(A3∣A2A1)…P(An∣An−1…A1) P(AB) = P(A)P(B|A) \\ P(A_1A_2 \dots A_n) = P(A_1)P(A_2|A_1)P(A_3|A_2A_1)\dots P(A_n|A_{n-1} \dots A_1) P(AB)=P(A)P(BA)P(A1A2An)=P(A1)P(A2A1)P(A3A2A1)P(AnAn1A1)

缺陷

上述的条件概率很少在实际中应用,因为它存在两个致命的缺陷:

  • 参数空间过大
  • 数据稀疏严重
    为了解决上述问题,我们引入马尔可夫假设:

一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词。

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram,即:
P(T)=P(w1w2…wn)=P(w1)P(w2∣w1)P(w3∣w2)…P(wn∣wn−1) P(T) = P(w_1w_2 \dots w_n) = P(w_1)P(w_2|w_1)P(w_3|w_2) \dots P(w_n|w_{n-1}) P(T)=P(w1w2wn)=P(w1)P(w2w1)P(w3w2)P(wnwn1)
同理可得trigram。

举例

在实践中用的最多的就是bigram和trigram了,而且效果很不错。高于四元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多。
使用最大似然估计可以很方便的得到 P(wi∣wi−1wi−2…w1)P(w_i|w_{i-1}w_{i-2} \dots w_1)P(wiwi1wi2w1),即:
P(wi∣wi−1wi−2…w1)=P(wiwi−1wi−2…w1)P(wi−1wi−2…w1) P(w_i|w_{i-1}w_{i-2} \dots w_1) = \frac {P(w_iw_{i-1}w_{i-2} \dots w_1)} {P(w_{i-1}w_{i-2} \dots w_1)} P(wiwi1wi2w1)=P(wi1wi2w1)P(wiwi1wi2w1)
下面我们用bigram举个例子。假设语料库总词数为13748
1
1
P(I  want  to  eat  Chinese  food)=P(I)∗P(want∣I)∗P(to∣want)∗P(eat∣to)∗P(Chinese∣eat)∗P(food∣Chinese)=343713748∗10873437∗78612158603256∗19938∗120213=0.000154171 \begin{aligned} P(I \; want \; to \; eat \; Chinese \; food) &= P(I) * P(want | I) * P(to | want) * P(eat | to) * P(Chinese | eat) * P(food | Chinese) \\ &= \frac {3437} {13748} * \frac {1087} {3437} * \frac {786} {1215} \frac {860} {3256} * \frac {19} {938} * \frac {120} {213} \\ &= 0.000154171 \end{aligned} P(IwanttoeatChinesefood)=P(I)P(wantI)P(towant)P(eatto)P(Chineseeat)P(foodChinese)=137483437343710871215786325686093819213120=0.000154171

注意

这里有一个问题要说,那就是数据稀疏的问题。假设词表中有20000个词,如果是bigram那么可能的N-gram就有400000000个,如果是trigram,那么可能的N-gram就有8000000000000个!那么对于其中的很多词对的组合,在语料库中都没有出现,根据最大似然估计得到的概率将会是0,这会造成很大的麻烦。在算句子的概率时一旦其中的某项为0,那么整个句子的概率就会为0。因此,我们要进行数据平滑(data Smoothing)。数据平滑的目的有两个:

  • 使所有的N-gram概率之和为1
  • 使所有的N-gram概率都不为0

转载自:https://blog.youkuaiyun.com/lengyuhong/article/details/6022053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值