自然语言处理预备知识

自然语言处理预备知识

信息熵
  • 信息量

    信息量的大小与信息发生的概率成反比。概率越大,信息量越小。概率越小,信息量越大:
    I ( x ) = − l o g ( P ( x ) ) I(x)=-log(P(x)) I(x)=log(P(x))

  • 信息熵也被称为熵,用来表示所有信息量的期望

所以信息量的熵可表示为:
H ( X ) = E ( I ( x ) ) = ∑ n p ( x i ) I ( x i ) = − ∑ n p ( x i ) l o g ( p ( x i ) ) H(X)=E(I(x))=\sum_n{p(x_i)I(x_i)}=-\sum_n{p(x_i)log(p(x_i))} H(X)=E(I(x))=np(xi)I(xi)=np(xi)log(p(xi))

相对熵(KL散度)

如果对于同一个随机变量X有两个单独的概率分布P(x)和Q(x),则我们可以使用KL散度来衡量这两个概率分布之间的差异

KL散度:
D k L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{kL}(p||q)=\sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)}) DkL(p∣∣q)=i=1np(xi)log(q(xi)p(xi))
在机器学习中,常使用P(x)来表示样本的真实分布,Q(x)来表示模型所预测的分布,比如在一个三分类任务中(例如,猫狗马分类器)x1,x2,x3分别代表猫,狗,马。例如一张猫的图片真实分布P ( X ) = [ 1 , 0 , 0 ],预测分布Q ( X ) = [ 0.7 , 0.2 , 0.1 ] ,计算KL散度:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) = p ( x 1 ) l o g ( p ( x 1 ) q ( x 1 ) ) + p ( x 2 ) l o g ( p ( x 2 ) q ( x 2 ) ) + p ( x 3 ) l o g ( p ( x 3 ) q ( x 3 ) ) = 0.36 D_{KL}(p||q)=\sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})\\ = p(x_1)log(\frac{p(x_1)}{q(x_1)})+p(x_2)log(\frac{p(x_2)}{q(x_2)})+p(x_3)log(\frac{p(x_3)}{q(x_3)})\\ =0.36 DKL(p∣∣q)=i=1np(xi)log(q(xi)p(xi))=p(x1)log(q(x1)p(x1))+p(x2)log(q(x2)p(x2))+p(x3)log(q(x3)p(x3))=0.36
KL散度越小,表示P(x)与Q(x)的分布更加接近,可以通过反复训练Q(x)来使Q(x)的分布逼近P(x)。

交叉熵误差
  • 进行多类别分类的神经网络通常使用交叉熵(cross entropy error)误差作为损失函数。此时,交叉熵误差有神经网络输出的各类别的概率和监督标签求得。

  • 交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。在这里可以理解为度量真实分布和softmax输出预测分布的概率之间的差异性,我们的目标是将该差异缩小。
    L o s s = − ∑ k t k l o g y k Loss = -\sum_k{t_klogy_k} Loss=ktklogyk
    t k t_k tk是对应于第 k k k个类别的监督标签, y k y_k yk对应于第 k k k个类别的softmax函数的输出,log是以e为底的对数。
    因为只有正确解标签为1,其余都为0,因此该式实际上只是在计算标签为1的元素所对应的softmax输出的自然对数。
    在考虑了小批量mini batch的情况下,交叉熵误差可以由下式表示:
    L o s s = − 1 N ∑ n ∑ k t n k l o g y n k Loss = -\frac{1}{N}\sum_n\sum_k{t_{nk}logy_{nk}} Loss=N1nktnklogynk

  • 将KL散度公式拆开
    D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) = ∑ i = 1 n [ p ( x i ) l o g p ( x i ) − p ( x i ) l o g q ( x i ) ] = − H ( X ) − ∑ i = 1 n p ( x i ) l o g q ( x i ) D_{KL}(p||q)=\sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})\\ =\sum_{i=1}^{n}[p(x_i)logp(x_i)-p(x_i)logq(x_i)]\\ =-H(X)-\sum_{i=1}^{n}p(x_i)logq(x_i) DKL(p∣∣q)=i=1np(xi)log(q(xi)p(xi))=i=1n[p(xi)logp(xi)p(xi)logq(xi)]=H(X)i=1np(xi)logq(xi)

即,KL散度 = 交叉熵 - 信息熵

其中,P(X)表示真实分布,Q(X)表示预测分布。

交叉熵可以重写为更为熟悉的形式:
L o s s = − ∑ i = 1 n p ( x i ) l o g q ( x i ) Loss = -\sum_{i=1}^np(x_i)logq(x_i) Loss=i=1np(xi)logq(xi)

重点!!!

在机器学习训练网络时,输入数据与标签常常已经确定,那么真实概率分布P(x)也就确定下来了,所以信息熵在这里就是一个常量。由于KL散度的值表示真实概率分布P(x)与预测概率分布Q(x)之间的差异,值越小表示预测的结果越好,所以需要最小化KL散度。而交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss就行了。

最小化KL散度 ==> 最小化交叉熵

条件熵

𝐻(X|Y)定义为在给定条件𝑌下,X 的条件概率分布的熵对Y的数学期望:
H ( X ∣ Y ) = ∑ y ∈ Y p ( y ) H ( X ∣ Y = y ) = − ∑ y ∈ Y p ( y ) ∑ x ∈ X p ( x ∣ y ) l o g p ( x ∣ y ) = − ∑ y ∈ Y ∑ x ∈ X p ( y ) p ( x ∣ y ) l o g p ( x ∣ y ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x ∣ y ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x , y ) p ( y ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x , y ) + ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( y ) = = − ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x , y ) + ∑ y ∈ Y p ( y ) l o g p ( y ) = H ( X , Y ) − H ( Y ) H(X|Y)=\sum_{y\in Y} p(y)H(X|Y=y)\\ =-\sum_{y\in Y} p(y)\sum_{x\in X}p(x|y)logp(x|y)\\ =-\sum_{y\in Y}\sum_{x\in X}p(y)p(x|y)logp(x|y)\\ =-\sum_{x\in X,y\in Y}p(x,y)logp(x|y)\\ =-\sum_{x\in X,y\in Y}p(x,y)log\frac{p(x,y)}{p(y)}\\ =-\sum_{x\in X,y\in Y}p(x,y)log{p(x,y)}+\sum_{x\in X,y\in Y}p(x,y)log{p(y)}\\ ==-\sum_{x\in X,y\in Y}p(x,y)log{p(x,y)}+\sum_{y\in Y}p(y)log{p(y)}\\ =H(X,Y)-H(Y) H(XY)=yYp(y)H(XY=y)=yYp(y)xXp(xy)logp(xy)=yYxXp(y)p(xy)logp(xy)=xX,yYp(x,y)logp(xy)=xX,yYp(x,y)logp(y)p(x,y)=xX,yYp(x,y)logp(x,y)+xX,yYp(x,y)logp(y)==xX,yYp(x,y)logp(x,y)+yYp(y)logp(y)=H(X,Y)H(Y)

互信息

度量X的熵和已知Y情况下X的熵之间的差异。显然,互信息越小,证明Y与X越无关(可以想到极限情况下I(X;Y)=0,此时是否已知Y都与X的熵无关)
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) = − ∑ x ∈ X p ( x ) l o g p ( x ) + ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x ∣ y ) = ∑ x ∈ X , y ∈ Y [ − p ( x , y ) l o g p ( x ) + p ( x , y ) l o g p ( x ∣ y ) ] = ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) I(X;Y)=H(X)-H(X|Y)\\ =-\sum_{x\in X}p(x)logp(x)+\sum_{x\in X,y\in Y} p(x,y)logp(x|y)\\ =\sum_{x\in X,y\in Y}[-p(x,y)logp(x)+p(x,y)logp(x|y)]\\ =\sum_{x\in X,y\in Y} p(x,y)log\frac{p(x,y)}{p(x)p(y)} I(X;Y)=H(X)H(XY)=xXp(x)logp(x)+xX,yYp(x,y)logp(xy)=xX,yY[p(x,y)logp(x)+p(x,y)logp(xy)]=xX,yYp(x,y)logp(x)p(y)p(x,y)

联合熵

H ( X , Y ) = ∑ x ∈ X , y ∈ Y p ( x , y ) l o g p ( x , y ) H(X,Y)=\sum_{x\in X,y\in Y}p(x,y)logp(x,y) H(X,Y)=xX,yYp(x,y)logp(x,y)

熵的链式法则

H ( X , Y ) = H ( X ) + H ( Y ∣ X ) H(X,Y)=H(X)+H(Y|X) H(X,Y)=H(X)+H(YX)
在这里插入图片描述

分词

生成式分词

步骤:

  1. 找出所有可能的分词,形成词图。
  2. 根据大规模语料,利用最大似然估计求得词转移的概率,即DAG中的权重。
  3. 用最短路径算法(如Viterbi)算法找出最短路径

优点:

在训练语料规模足够大和覆盖领域足够多的情况下,可以获得较高的切分正确率(>=95%)

缺点:

  • 需要很大的训练语料
  • 新词识别能力弱
  • 解码速度相对较慢
判别式统计分词

把分词问题转化为确定句中每个字在词中位置问题(B/M/E)

示例:

分词结果:毛/B新/M年/E2/B0/M0/M0/M年/E毕/B业/E//B东/B北/M大/M学/E
还原:毛新年/2000/毕业//东北大学

优点:

  • 能充分利用各种来源的知识
  • 需要较少的训练语料
  • 解码速度快
  • 新词识别性能好

缺点:

  • 训练速度慢
  • 需要高配置的机器训练
神经网络分词算法

公认效果最好的模型是BiLSTM+CRF

优点:

  • 解码速度快
  • 分词精度高
  • 新词识别能力强
  • 所需学习素材少

缺点:

  • 训练速度慢
  • 需要高配置的机器训练
分词系统

ICTCLAS、jieba分词、IK、Paoding(庖丁解牛分词)、MMSEG4J、盘古分词、BosonNLP

词向量表示方法

One-Hot、PPMI、LSA(潜在语义分析)、词嵌入

Word-Embedding优点:

  • 维度低(100-500维)
  • 无监督学习,不需要去掉停用词
  • 天然有聚类后的效果
  • 连续向量,方便机器学习模型处理
  • 罕见词:“风姿绰约”≈“漂亮”
词向量模型

NNLM、Word2vec(CBOW、skipgram)

  • CBOW模型主要用当前词的上下文预测当前词
  • Skip-gram模型主要用当前词来预测上下文

N-gram语言模型

语言建模(Language Modeling)

对于一个句子空间A(所有可能的),其概率分布D表示任意可能句子的概率分布。估计句子空间A的概率分布D的过程被称作语言建模。

根据语言样本估计出的概率分布D就称为语言(空间)A的语言模型:
∑ a ∈ A P ( a ) = 1 ∀ a ∈ A , P ( a ) = ? \sum_{a\in A}P(a)=1\\ \forall a\in A,P(a)=? aAP(a)=1aA,P(a)=?
在语音识别中,如果识别结果有多个,则可以根据语言模型
计算每个识别结果的可能性,然后挑选一个可能性较大的识
别结果

链式规则:

对于给定的句子 a = w 1 w 2 . . . w m a=w_1w_2...w_m a=w1w2...wm,如何计算 P ( a ) P(a) P(a)

P ( a ) = P ( w 1 , w 2 , . . . w m ) = P ( w 1 ) P ( w 2 ∣ w 1 ) . . . P ( w m ∣ w 1 , w 2 , . . . w m − 1 ) P(a)=P(w_1,w_2,...w_m)=P(w_1)P(w_2|w_1)...P(w_m|w_1,w_2,...w_{m-1}) P(a)=P(w1,w2,...wm)=P(w1)P(w2w1)...P(wmw1,w2,...wm1)

为了便于计算,一般只考虑前面n-1个次构成的历史:

P ( a ) = ∏ k = 1 m P ( w k ∣ w k − 1 . . . w k − n + 1 ) P(a)=\prod_{k=1}^{m}P(w_k|w_{k-1}...w_{k-n+1}) P(a)=k=1mP(wkwk1...wkn+1)

建立N-gram

N-gram的最大似然估计:

  • 选择一组参数,使得训练样本的概率最大

  • 选择能使训练样本取得最大概率值的分布作为总体分布

  • c ( w 1 , . . , w n ) c(w_1,..,w_n) c(w1,..,wn)表示N-gram w 1 , . . , w n w_1,..,w_n w1,..,wn在训练语料中出现的次数,则

    P M L E ( w n ∣ w 1 , w 2 , . . . w n − 1 ) = c ( w 1 , c 2 , . . . c n ) c ( w 1 , w 2 , . . . w n − 1 ) P_{MLE}(w_n|w_1,w_2,...w_{n-1})=\frac{c(w_1,c_2,...c_n)}{c(w_1,w_2,...w_{n-1})} PMLE(wnw1,w2,...wn1)=c(w1,w2,...wn1)c(w1,c2,...cn)

在这里插入图片描述

用2-gram(bigram)语言模型进行计算:
在这里插入图片描述

句子的概率表现为若干bigram参数的乘积,若句子太长,计算时,会引起下溢(underflow),可以采用取对数并相加的方式:
在这里插入图片描述

纯对数层计算避免下溢的方法:

l o g ( e x + e y ) = l o g ( e x ( 1 + e y − x ) ) = x + l o g ( 1 + e y − x ) log(e^x+e^y)=log(e^x(1+e^{y-x}))=x+log(1+e^{y-x}) log(ex+ey)=log(ex(1+eyx))=x+log(1+eyx)

数据稀疏问题

若某n-gram在训练语料中没有出现,则该n-gram的概率必定是0

Zipf定律:

针对某个语料库,若某个词w的词频是f,并且该词在词频
表中的序号为r (即w是所统计的语料中第r常用词),则
f × r = k ( k 是一个常数 ) f × r = k (k是一个常数) f×r=k(k是一个常数)

对语言而言,由于数据稀疏的存在,MLE不是一种很好的参数估计方法。解决办法——平滑技术。

平滑技术

Add-one平滑:

  • 规定任何一个n-gram在训练语料至少出现一次(即规定
    没有出现过的n-gram在训练语料中出现了一次)
  • n e w _ c o u n t n − g r a m = o l d _ c o u n t n − g r a m + 1 new\_count_{n-gram} = old\_count_{n-gram}+1 new_countngram=old_countngram+1,那么有 P a d d 1 ( w 1 , w 2 , . . . w n ) = c ( w 1 , w 2 , . . . w n ) + 1 N + V P_{add1}(w_1,w_2,...w_n)=\frac{c(w_1,w_2,...w_n)+1}{N+V} Padd1(w1,w2,...wn)=N+Vc(w1,w2,...wn)+1
  • N:训练语料中所有的n-gram的数量(token)
    V:所有的可能的不同的n-gram的数量(type)
  • P ( w n ∣ w 1 , w 2 , . . . w n − 1 ) = c ( w 1 , c 2 , . . . c n ) + 1 c ( w 1 , w 2 , . . . w n − 1 ) + 1 P(w_n|w_1,w_2,...w_{n-1})=\frac{c(w_1,c_2,...c_n)+1}{c(w_1,w_2,...w_{n-1})+1} P(wnw1,w2,...wn1)=c(w1,w2,...wn1)+1c(w1,c2,...cn)+1

Add-delta平滑:

  • 与Add-one相比把+1变成了加一个小于1的正数 δ \delta δ
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值