从0探索NLP——KenLM

文章介绍了KenLM,一种高效的N-gram语言模型工具,它支持大规模语料训练。通过Tokenize后的语料文件,使用KenLM的lmplz命令生成arpa模型。模型生成过程中,包括原始计数、调节计数、伪概率和回退权值的计算。文章详细解释了这些步骤,并举例说明了概率计算的过程,展示了如何利用Kneser-Ney平滑技术进行概率估算。
摘要由CSDN通过智能技术生成

从0探索NLP——KenLM

导航帖

前情提要

上一篇文章介绍了传统统计语言模型——NGram的原理及其平滑方式,本次介绍一下基于这些理论的一种实现KenLM。

常用的N-gram训练工具有SRILM、IRSTLM、BerkeleyLM和KenLM等

KenLM比SRILM晚出来,训练速度也更快,号称单机版训练超级快,经过测试确实很快,支持大规模的语料训练,文件的输入格式一行行以空格隔开的文本。
官方网站
环境安装方式在官网里也有——安装依赖的编译环境boost、zlib、bzip、eigen后下载源码cmake即可。推荐使用Linux环境安装,很方便,Win10安装需要自己下载安装编译环境。

使用介绍

准备Tokenize(可以是分词也可以是按字拆分)后的语料文件

信息
华宇 信息
北京
信息
华宇

执行命令

$KENLM_BUILD_HOME/bin/lmplz -o [n] --text [语料文件] --arpa [模型结果]

这里我们只训练2gram的

$KENLM_BUILD_HOME/bin/lmplz -o 2 --text test.txt --arpa test.arpa

生成模型文件.arpa,内容用如下

\data\
ngram 1=6
ngram 2=7

\1-grams:
-0.89085555	<unk>	0
0	<s>	-0.22184873
-0.89085555	</s>	0
-0.46488678	信息	0
-0.69896996	华宇	-0.30103
-0.69896996	北京	-0.30103

\2-grams:
-0.89085555	信息 </s>
-0.50267535	华宇 </s>
-0.24850096	北京 </s>
-0.44889864	<s> 信息
-0.37527603	华宇 信息
-0.56863624	<s> 华宇
-0.6575773	<s> 北京

\end\

打开python IDE,使用代码测试计算一个句子的分数

import kenlm as kl
model = kl.Model('/data/project/corpus/kenlm-test/test.arpa')
print(model.score('北京 华宇 信息',bos=True,eos=True))
# -2.923708915710449

这个分数是并不是最终概率,根据上篇理论介绍的文章所述“在计算中通常会对概率公式两边取log10”,所以这个分数是
lg ⁡ ( P ( < s > 北京华宇信息 < / s > ) ) = − 2.923708915710449 \lg(P(<s> 北京 华宇 信息 </s>))=-2.923708915710449 lg(P(<s>北京华宇信息</s>))=2.923708915710449
那么实际概率就是
P ( < s > 北京华宇信息 < / s > ) = 1 0 − 2.923708915710449 = 0.001192040 P(<s> 北京 华宇 信息 </s>)=10^{-2.923708915710449}=0.001192040 P(<s>北京华宇信息</s>)=102.923708915710449=0.001192040

原理介绍

模型生成

符号说明

n 当前 G r a m 阶数 N G r a m 最大阶数 r 某个 G r a m 的出现数 w i 表示一个 N G r a m 中第 i 个 G r a m w 1 n = w 1 , . . . , w n 表示一个 N G r a m w L 表示一个 N G r a m 的左邻接 G r a m w R 表示一个 N G r a m 的右邻接 G r a m c o u n t ( ) 计数函数 \begin{aligned} n& & &当前Gram阶数 \\ N& & &Gram最大阶数 \\ r& & &某个Gram的出现数 \\ w_{i}& & &表示一个NGram中第i个Gram \\ w_{1}^{n}=w_{1},...,w_{n}& & &表示一个NGram \\ w_{L}& & &表示一个NGram的左邻接Gram \\ w_{R}& & &表示一个NGram的右邻接Gram \\ count()& & &计数函数 \\ \end{aligned} nNrwiw1n=w1,...,wnwLwRcount()当前Gram阶数Gram最大阶数某个Gram的出现数表示一个NGram中第iGram表示一个NGram表示一个NGram的左邻接Gram表示一个NGram的右邻接Gram计数函数

模逻辑框图

在这里插入图片描述

增加标记符

在原始训练语料的每一句话的开头和结尾分别加上起始符 <s> 和终止符 </s>。

<s> 信息 </s>
<s> 华宇 信息 </s>
<s> 北京 </s>
<s> 信息 </s>
<s> 华宇 </s>
原始计数

形成1Gram、2Gram…NGram并分别计数。

1Gram原始计数(count)
<s>5
信息3
华宇2
北京1
</s>5
2Gram原始计数(count)
<s> 信息2
信息 </s>3
<s> 华宇2
华宇 信息1
<s> 北京1
北京 </s>1
华宇 </s>1
调节计数

调节计数统计的是每个Gram的邻接能力(novel continuation),即Gram前面可能出现的情况的种数。其目的是调节一些多而单独意义不大的Gram的计数,可以理解为这些被调节的Gram频率高的原因是某种由该Gram组成的搭配频率很高,但脱离这种搭配该Gram几乎没有别的用法,这样的Gram不配拥有如此高的概率,就好像“富二代有钱并不一定能挣钱”一样,他有钱是因为他家有钱,脱离开这个“家”他一文不值。
特别的,当n=N或 Gram是“<s>”时,调节计数等于原始计数,公式表示是
c o u n t a d j ( w 1 n ) = { c o u n t ( w 1 n ) , i f ( n = N ∣ ∣ w 1 = < s > ) c o u n t ( w L : c o u n t ( w L w 1 n ) > 0 ) , o t h e r w i s e \mathbf{count_{adj}}{(w_{1}^{n})}=\left\{ \begin{aligned} &\mathbf{count}{(w_{1}^{n})} &&,if(n=N||w_{1}=<s>) \\ &\mathbf{count}{(w_{L}:count(w_{L}w_{1}^{n})>0)} &&,otherwise \\ \end{aligned} \right. countadj(w1n)={count(w1n)count(wL:count(wLw1n)>0),if(n=N∣∣w1=<s>),otherwise

用这语料举个例子:“信息”的前面可以是“<s>”,也可以是“华宇”,所以“信息”的调节计数是2.

1Gram调节计数(count_adj)
<s>5
信息2
华宇1
北京1
</s>3

2Gram的就是n=N,因为咱们设置的参数-o 是2,说以2Gram的调整计数与原始计数相同。

2Gram调节计数(count_adj)
<s> 信息2
信息 </s>3
<s> 华宇2
华宇 信息1
<s> 北京1
北京 </s>1
华宇 </s>1

从这里,原始计数作废,计算都使用调节计数。准备工作差不多了,接下来就是KenLM的平滑之路,其选用的是Kneser-Ney平滑,由于上一篇已经介绍了原理这里就给出一个简要的式子:
P K N ( w i ∣ w i − n + 1 i − 1 ) = P p s e ( c o u n t a d j , c o u n t d i s ) + B o W ( w i − n + 1 i − 1 ) P ( w i − n + 2 i ) \mathbf{P_{KN}}(w_{i}|w_{i-n+1}^{i-1})=\mathbf{P_{pse}}(\mathbf{count_{adj}},\mathbf{count_{dis}})+\mathbf{BoW}(w_{i-n+1}^{i-1})\mathbf{P}(w_{i-n+2}^{i}) PKN(wiwin+1i1)=Ppse(countadj,countdis)+BoW(win+1i1)P(win+2i)

大体分为4步

计数打折(Discounting)

KenLM的平滑之路第一步——首先是做Discounting处理,这里采用的是Chen and Goodman的方法:
c o u n t d i s ( n , r ) = { 0 , r = 0 r − ( r + 1 ) ∗ t n , 1 ∗ t n , r + 1 ( t n , 1 + 2 t n , 2 ) ∗ t n , r , r ∈ [ 1 , 3 ] c o u n t d i s ( n , 3 ) , r > 3 \mathbf{count_{dis}}(n,r)=\left\{ \begin{aligned} &0&&,r=0 \\ &r-\frac{(r+1)*t_{n,1}*t_{n,r+1}}{(t_{n,1}+2t_{n,2})*t_{n,r}} &&,r\in[1,3] \\ &\mathbf{count_{dis}}(n,3)&&,r>3 \end{aligned} \right. countdis(n,r)= 0r(tn,1+2tn,2)tn,r(r+1)tn,1tn,r+1countdis(n,3),r=0,r[1,3],r>3

其中 t_{n,r}表示的是在n阶Gram中出现r次的Gram的种数,再次强调,这里的次数指的是调节计数,也是用于对调节计数的打折。举个例子t_{1,1}的意思就是1Gram中出现1次的1Gram个数,有“华宇”和“北京”,所以t_{1,1}=2,公示表示是:
t n , r = c o u n t ( w 1 n : c o u n t ( w 1 n ) = r ) t_{n,r}=\mathbf{count}(w_1^n:count(w_1^n)=r) tn,r=count(w1n:count(w1n)=r)
取值范围上,n肯定是小于等于N的了,本例N是2,至于r取到多少,根据公式知r小于等于3+1。计算 t_{n,r}

项{n,r}包含的Gram
{1,1}2“华宇” “北京”
{1,2}1“信息”
{1,3}1“</s>”
{1,4}0/
{2,1}4“华宇 信息” “<s> 北京” “北京 </s>” “华宇 </s>”
{2,2}2“<s> 信息” “<s> 华宇”
{2,3}1“信息 </s>”
{2,4}0/

再根据上面的表计算count_dis

项{n,r}
{1,1}1/2
{1,2}1/2
{1,3}3
{1,5}3
{2,1}1/2
{2,2}5/4
{2,3}3
计算伪概率(Pseudo Probability)

KenLM的平滑之路第二步——KenLM称之为伪概率,其实就是Kneser-Ney平滑式子的第一项,根据Kneser-Ney计算公式知:
P p s e ( w n ∣ w 1 n − 1 ) = c o u n t a d j ( w 1 n ) − c o u n t d i s ( n , c o u n t a d j ( w 1 n ) ) w R : ∑ w R c o u n t a d j ( w 1 w R ) \mathbf{P_{pse}}(w_n|w_1^{n-1})=\frac{count_{adj}(w_1^{n})-count_{dis}(n,count_{adj}(w_1^{n}))}{w_{R}:\sum_{w_{R}}count_{adj}(w_{1}w_{R})} Ppse(wnw1n1)=wR:wRcountadj(w1wR)countadj(w1n)countdis(n,countadj(w1n))
可以发现更正常NGram的概率公式相比,就是分子多减去一项计数打折。

方便理解,这里拿本例涉及的n=1,n=2做一下带入:
P p s e ( w 1 ) = c o u n t a d j ( w 1 ) − c o u n t d i s ( 1 , c o u n t a d j ( w 1 ) ) ∑ c o u n t a d j ( w 1 , w R ) P p s e ( w 2 ∣ w 1 ) = c o u n t a d j ( w 1 , w 2 ) − c o u n t d i s ( 2 , c o u n t a d j ( w 1 , w 2 ) ) ∑ c o u n t a d j ( w 1 , w R ) \begin{aligned} \mathbf{P_{pse}}(w_1)&=\frac{count_{adj}(w_1)-count_{dis}(1,count_{adj}(w_1))}{\sum{count_{adj}(w_1,w_R)}} \\ \mathbf{P_{pse}}(w_2|w_1)&=\frac{count_{adj}(w_1,w_2)-count_{dis}(2,count_{adj}(w_1,w_2))}{\sum{count_{adj}(w_1,w_R)}} \end{aligned} Ppse(w1)Ppse(w2w1)=countadj(w1,wR)countadj(w1)countdis(1,countadj(w1))=countadj(w1,wR)countadj(w1,w2)countdis(2,countadj(w1,w2))
进一步拿例子中的“华宇”、“华宇 信息”举例
P p s e ( 华宇 ) = c o u n t a d j ( 华宇 ) − c o u n t d i s ( 2 , c o u n t a d j ( 华宇 ) ) ∑ c o u n t a d j ( w R ) = 1 − c o u n t d i s ( 1 , 2 ) c o u n t a d j ( 北京 ) + c o u n t a d j ( 华宇 ) + c o u n t a d j ( 信息 ) + c o u n t a d j ( < / s > ) = 1 − 1 / 2 1 + 1 + 2 + 3 = 1 / 14 P p s e ( 信息 ∣ 华宇 ) = c o u n t a d j ( 华宇 , 信息 ) − c o u n t d i s ( 2 , c o u n t a d j ( 华宇 , 信息 ) ) ∑ c o u n t a d j ( 华宇 , w R ) = 1 − c o u n t d i s ( 2 , 1 ) c o u n t a d j ( 华宇 , 信息 ) + c o u n t a d j ( 华宇 , < / s > ) = 1 − 1 / 2 1 + 1 = 1 / 4 \begin{aligned} \mathbf{P_{pse}}(华宇)&=\frac{count_{adj}(华宇)-count_{dis}(2,count_{adj}(华宇))}{\sum{count_{adj}(w_R)}} \\ &=\frac{1-count_{dis}(1,2)}{count_{adj}(北京)+count_{adj}(华宇)+count_{adj}(信息)+count_{adj}(</s>)} \\ &=\frac{1-1/2}{1+1+2+3} \\ &=1/14 \\ \mathbf{P_{pse}}(信息|华宇)&=\frac{count_{adj}(华宇,信息)-count_{dis}(2,count_{adj}(华宇,信息))}{\sum{count_{adj}(华宇,w_R)}} \\ &=\frac{1-count_{dis}(2,1)}{count_{adj}(华宇,信息)+count_{adj}(华宇,</s>)} \\ &=\frac{1-1/2}{1+1} \\ &=1/4 \\ \end{aligned} Ppse(华宇)Ppse(信息华宇)=countadj(wR)countadj(华宇)countdis(2,countadj(华宇))=countadj(北京)+countadj(华宇)+countadj(信息)+countadj(</s>)1countdis(1,2)=1+1+2+311/2=1/14=countadj(华宇,wR)countadj(华宇,信息)countdis(2,countadj(华宇,信息))=countadj(华宇,信息)+countadj(华宇,</s>)1countdis(2,1)=1+111/2=1/4

1Gram伪概率(P_pse)
<s>2/7
信息3/14
华宇1/14
北京1/14
</s>0
<unk>0

说明一下, <unk> 表示未登录词 (OOV, out of vocabulary),因为计数为零,所以伪概率的值为零。

2Gram伪概率(P_pse)
<s> 信息3/20
信息 </s>0
<s> 华宇3/20
华宇 信息1/4
<s> 北京1/10
北京 </s>1/2
华宇 </s>1/4
计算回退权值 (Back-off weight)

KenLM的平滑之路第三步——KenLM称之为回退权值,其实就是Kneser-Ney平滑式子的第二项的权重系数。上一篇已经详细介绍了原理,所以这里就直接给出计算公式。
P ( w n ∣ w 1 n − 1 ) = B o W ( w 1 n − 1 ) ∗ P ( w n ∣ w 2 n − 1 ) B o W ( w 1 n − 1 ) = ∑ r = 1 3 c o u n t d i s ( n , r ) ∗ c o u n t ( w R : c o u n t a d j ( w 1 n − 1 w R ) = r ) ∑ w R c o u n t a d j ( w 1 n − 1 w R ) \begin{aligned} \mathbf{P}(w_n|w_1^{n-1})&=\mathbf{BoW}(w_1^{n-1})*\mathbf{P}(w_n|w_2^{n-1}) \\ \mathbf{BoW}(w_1^{n-1})&=\frac{\sum_{r=1}^{3}count_{dis}(n,r)*count(w_{R}:count_{adj}(w_1^{n-1}w_{R})=r)}{\sum_{w_{R}}count_{adj}(w_1^{n-1}w_{R})} \end{aligned} P(wnw1n1)BoW(w1n1)=BoW(w1n1)P(wnw2n1)=wRcountadj(w1n1wR)r=13countdis(n,r)count(wR:countadj(w1n1wR)=r)

这里再次强调一下,回退的思想是“用低阶NGram的概率推测高阶NGram的概率”,所以当P中计算的是1Gram即n=1时,由于不存在更低阶的0Gram,公式将变得特殊,此时的BoW变成了一个常值Bow(ϕ)。
B o W ( ϕ ) = ∑ r = 1 3 c o u n t d i s ( 1 , r ) ∗ c o u n t ( w R : c o u n t a d j ( w R ) = r ) ∑ w R ≠ < s > c o u n t a d j ( w R ) = ∑ r = 1 3 c o u n t d i s ( 1 , r ) ∗ t 1 , r ∑ w R ≠ < s > c o u n t a d j ( w R ) \begin{aligned} \mathbf{BoW}(\phi)&=\frac{\sum_{r=1}^{3}count_{dis}(1,r)*count(w_{R}:count_{adj}(w_{R})=r)}{\sum_{w_{R}\ne{<s>}}count_{adj}(w_{R})} \\ &=\frac{\sum_{r=1}^{3}count_{dis}(1,r)*t_{1,r}}{\sum_{w_{R}\ne{<s>}}count_{adj}(w_{R})} \end{aligned} BoW(ϕ)=wR=<s>countadj(wR)r=13countdis(1,r)count(wR:countadj(wR)=r)=wR=<s>countadj(wR)r=13countdis(1,r)t1,r

这里分母上不能加上<s>,因为我计算的这个概率P的表面上是“NGram的出现概率”,实际上根据上篇对NGram的介绍,完整理解应该是“在有(N-1)Gram做上文的前提下出现该第N个Gram的概率”,举个例子P(华宇 信息)实际上是在上文是“华宇”的前提下,下一个词是信息的概率。那么<s>作为句子开头是不可能有上文的,不能算到w_R。按照本例来说:
B o W ( ϕ ) = c o u n t d i s ( 1 , 1 ) ∗ 2 + c o u n t d i s ( 1 , 2 ) ∗ 1 + c o u n t d i s ( 1 , 3 ) ∗ 1 c o u n t a d j ( 传统 ) + c o u n t a d j ( 语言 ) + c o u n t a d j ( 模型 ) + c o u n t a d j ( < / s > ) = 9 14 \mathbf{BoW}(\phi)=\frac{count_{dis}(1,1)*2+count_{dis}(1,2)*1+count_{dis}(1,3)*1}{count_{adj}(传统)+count_{adj}(语言)+count_{adj}(模型)+count_{adj}(</s>)}=\frac{9}{14} BoW(ϕ)=countadj(传统)+countadj(语言)+countadj(模型)+countadj(</s>)countdis(1,1)2+countdis(1,2)1+countdis(1,3)1=149

再举个例子,计算“华宇 信息”的概率时需要用到“华宇”的回退权值:
P ( 信息 ∣ 华宇 ) = B o W ( 华宇 ) ∗ P ( 信息 ) B o W ( 华宇 ) = c o u n t d i s ( 2 , 1 ) ∗ 2 + c o u n t d i s ( 2 , 2 ) ∗ 0 + c o u n t d i s ( 2 , 3 ) ∗ 0 1 + 1 \begin{aligned} \mathbf{P}(信息|华宇)&=\mathbf{BoW}(华宇)*\mathbf{P}(信息) \\ \mathbf{BoW}(华宇)&=\frac{count_{dis}(2,1)*2+count_{dis}(2,2)*0+count_{dis}(2,3)*0}{1+1} \end{aligned} P(信息华宇)BoW(华宇)=BoW(华宇)P(信息)=1+1countdis(2,1)2+countdis(2,2)0+countdis(2,3)0

这里:

  • 分子中第一个数字2,是以“华宇”开头的2Gram中,调节计数中为1的种数,{“华宇 信息”、“华宇 </s>”}
  • 分子中第二个数字0,是以“华宇”开头的2Gram中,调节计数中为2的种数,没有
  • 分子中第三个数字0,是以“华宇”开头的2Gram中,调节计数中为3的种数,没有
  • 分母中第一个数字1,是以“华宇”开头的2Gram“华宇 信息”的调节计数
  • 分母中第二个数字1,是以“华宇”开头的2Gram“华宇 </s>”的调节计数

同理计算

1Gram回退权值(BoW)取lg
<s>3/5-0.221849
信息10
华宇1/2-0.301030
北京1/2-0.301030
</s>0NA
<unk>0NA

再次说明,</s> 、<unk>的回退权值实际上不用计算,因为 </s> 的后面不可能接词,<unk>都是个未知数跟别说后面能接什么了。

到这里我就得出模型中1-grams第三列的东西了

插值(Interpolation)

KenLM的平滑之路第四步——最后一步,计算了 NGram 对应的伪概率和回退权值之后, 利用下面的插值方法可以得到最终的条件概率。由于插值方法是一种递归算法,所以我们从1Gram情景开始定义,记词汇表大小为V,只有1Gram的BoW特殊,记空词汇表ϕ:
P ( w i ) = P p s e ( w i ) + B o W ( ϕ ) 1 V \mathbf{P}(w_i)=\mathbf{P_{pse}}(w_i)+\mathbf{BoW}(\phi)\frac{1}{V} P(wi)=Ppse(wi)+BoW(ϕ)V1

再看看2Gram:
P ( w i ∣ w i − 1 ) = P p s e ( w i ∣ w i − 1 ) + B o W ( w i − 1 ) P ( w i ) \mathbf{P}(w_i|w_{i-1})=\mathbf{P_{pse}}(w_i|w_{i-1})+\mathbf{BoW}(w_{i-1})\mathbf{P}(w_i) P(wiwi1)=Ppse(wiwi1)+BoW(wi1)P(wi)

再看看NGram:
P ( w i ∣ w i − n + 1 i − 1 ) = P p s e ( w i ∣ w i − n + 1 i − 1 ) + B o W ( w i − n + 1 i − 1 ) P ( w i ∣ w i − n + 2 i − 1 ) \mathbf{P}(w_i|w_{i-n+1}^{i-1})=\mathbf{P_{pse}}(w_i|w_{i-n+1}^{i-1})+\mathbf{BoW}(w_{i-n+1}^{i-1})\mathbf{P}(w_i|w_{i-n+2}^{i-1}) P(wiwin+1i1)=Ppse(wiwin+1i1)+BoW(win+1i1)P(wiwin+2i1)

以咱们的例子说:
P ( 信息 ) = P p s e ( 信息 ) + B o W ( ϕ ) ∗ 1 V = 3 14 + 9 14 ∗ 1 5 = 24 70 \begin{aligned} \mathbf{P}(信息)&=\mathbf{P_{pse}}(信息)+\mathbf{BoW}(\phi)*\frac{1}{V} \\ &=\frac{3}{14}+\frac{9}{14}*\frac{1}{5}& \\ &=\frac{24}{70} \end{aligned} P(信息)=Ppse(信息)+BoW(ϕ)V1=143+14951=7024

1Gram概率§lg
<s>00
信息24/70-0.464887
华宇14/70-0.698970
北京14/70-0.698970
</s>9/70-0.890856
<unk>9/70-0.890856

注意,按照公式计算<s>的概率是29/70,如前文说的<s>前面没东西了,所以概率是0 。

P ( 信息 ∣ 华宇 ) = P p s e ( 信息 ∣ 华宇 ) + B o W ( 华宇 ) ∗ P ( 信息 ) = 1 4 + 1 2 ∗ + 24 70 = 59 140 \begin{aligned} \mathbf{P}(信息|华宇)&=\mathbf{P_{pse}}(信息|华宇)+\mathbf{BoW}(华宇)*\mathbf{P}(信息) \\ &=\frac{1}{4}+\frac{1}{2}*+\frac{24}{70} \\ &=\frac{59}{140} \end{aligned} P(信息华宇)=Ppse(信息华宇)+BoW(华宇)P(信息)=41+21+7024=14059

2Gram概率§lg
<s> 信息249/700-0.448899
信息 </s>9/70-0.890856
<s> 华宇189/700-0.568636
华宇 信息59/140-0.375276
<s> 北京11/50-0.657577
北京 </s>79/140-0.248501
华宇 </s>44/140-0.502675

到这里我就得出模型中第一列的东西了

概率计算

对于模型训练好后任意概率的计算,首先输入的要是Tokenize后的(和训练时用相同Tokenizer),生成NGram序列,计算每一个的概率的lg对数,再加和,返回的时该句子的概率的lg对数。
至于每一个的概率lg的计算是一个递归的过程,模型中有现成的就直接用(模型第一列)。没有的话,那就根据插值公式计算前缀的回退概率lg(模型第三列)和去掉第一个Gram的概率lg。连前缀都没有那就只能直接取去掉第一个Gram的概率lg了。这里的“去掉第一个Gram的概率lg”就是递归计算了。

逻辑框图

在这里插入图片描述

例子验证

lg ⁡ P ( 北京华宇信息 ) = lg ⁡ P ( < s > ) + lg ⁡ P ( 北京 ∣ < s > ) + lg ⁡ P ( 华宇 ∣ 北京 ) + lg ⁡ P ( 信息 ∣ 华宇 ) + lg ⁡ P ( < / s > ∣ 信息 ) \lg{\mathbf{P}(北京华宇信息)}=\lg{\mathbf{P}(<s>)}+\lg{\mathbf{P}(北京|<s>)}+\lg{\mathbf{P}(华宇|北京)}+\lg{\mathbf{P}(信息|华宇)}+\lg{\mathbf{P}(</ s>|信息)} \\ lgP(北京华宇信息)=lgP(<s>)+lgP(北京<s>)+lgP(华宇北京)+lgP(信息华宇)+lgP(</s>信息)
代入计算
lg ⁡ P ( < s > ) = 0 lg ⁡ P ( 北京 ∣ < s > ) = − 0.657577 lg ⁡ P ( 华宇 ∣ 北京 ) = lg ⁡ B o W ( 北京 ) ∗ P ( 华宇 ) = − 0.999999 lg ⁡ P ( 信息 ∣ 华宇 ) = − 0.375276 lg ⁡ P ( < / s > ∣ 信息 ) = − 0.890856 lg ⁡ P ( 北京华宇信息 ) = − 2.923708 \begin{aligned} &\lg{\mathbf{P}(<s>)}= 0\\ &\lg{\mathbf{P}(北京|<s>)}= -0.657577\\ &\lg{\mathbf{P}(华宇|北京)}= \lg{\mathbf{BoW}(北京)*\mathbf{P}(华宇)}=-0.999999\\ &\lg{\mathbf{P}(信息|华宇)}= -0.375276 \\ &\lg{\mathbf{P}(</ s>|信息)}= -0.890856 \\ &\lg{\mathbf{P}(北京华宇信息)}= -2.923708 \end{aligned} lgP(<s>)=0lgP(北京<s>)=0.657577lgP(华宇北京)=lgBoW(北京)P(华宇)=0.999999lgP(信息华宇)=0.375276lgP(</s>信息)=0.890856lgP(北京华宇信息)=2.923708
与样例一致

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值