Skip to content

语言模型和平滑方法

📅 发表于 2017/07/31
🔄 更新于 2017/07/31
👁️ 次访问
📝 0 字
0 分钟
自然语言处理
#语言模型
#自然语言处理
#各种熵
#数据平滑

传统的语言模型,模型评估参数(信息、各种熵和困惑度),最后介绍了一些数据平滑的方法

语言模型

二元语法

对于一个句子s=w1wn,近似认为一个词的概率只依赖于它前面的1个词。即一个状态只跟上一个状态有关,也称为一阶马尔科夫链

p(s)=p(w1)p(w2|w1)p(w3|w2)p(wn|wl1)=i=1lp(wi|wi1)

c(wi1wi) 表示二元语法wi1wi在给定文本中的出现次数,则上一个词是wi1下一个词是wi的概率p(wiwi1)是当前语法wi1wi出现的次数比上所有形似wi1w的二元语法的出现次数

p(wiwi1)=c(wi1wi)wc(wi1w)w

n元语法

认为一个词出现的概率和它前面的n个词有关系。则对于句子s=w1w2wl,其概率计算公式为如下:

p(s)=p(w1)p(w2|w1)p(w3|w1w2)p(wn|w1w2wl1)=i=1np(wi|w1wi1)

上述公式需要大量的概率计算,太理想了。一般取n=2或者n=3

对于n>2n元语法模型,条件概率要考虑前面n1个词的概率,设wij表示wiwj,则有

p(s)=i=1l+1p(wiwin+1i)p(wiwin+1i)=c(win+1i)wiw[in+1,i]wic(win+1i)wiw[in+1,i]

实际例子

假设语料库S是由下面3个句子组成,所求的句子t在其后:

python
s = ['brown read holy bible', 'plm see a text book', 'he read a book by david']
t = 'brown read a book'

那么求句子t出现的概率是

p(t)=p(brownreadabook)=p(brown|BOS)p(read|brown)p(a|read)p(book|a)p(eos|book)0.06

n元文法的一些应用如下

语音识别歧义消除

如给了一个拼音 tashiyanjiushengwude,得到了很多可能的汉字串:踏实研究生物的,他实验救生物的,他是研究生物的 ,那么求出argstrmaxP(str|pinyin),即返回最大概率的句子

汉语分词问题

给定汉字串他是研究生物的。可能的汉字串 他 是 研究生 物 的他 是 研究 生物 的,这也是求最大句子的概率

开发自然语言处理的统计方法的一般步骤

  • 收集大量语料(基础工作,工作量最大,很重要
  • 对语料进行统计分析,得出知识(如n元文法,一堆概率)
  • 针对场景建立算法,如计算概率可能也用很多复杂的算法或者直接标注
  • 解释或者应用结果

模型评估参数

基础

  • 评价目标:语言模型计 算出的概率分布与“真实的”理想模型是否接近
  • 难点:无法知道“真实的”理想模型的分布
  • 常用指标:交叉熵,困惑度

信息量和信息熵

X是一个离散随机变量,取值空间为R,其概率分布是p(x)=P(X=x),xR

信息量

概率是对事件确定性的度量,那么信息就是对不确定性的度量。信息量 I(X)代表特征的不确定性,定义如下

I(X)=logp(x)

信息熵

信息熵H(x)是特征不确定性的平均值,用表示,定义如下

H(X)=xRp(x)log1p(x)=xRp(x)logp(x)

一般是log2p(x),单位是比特。若是lnp(x),单位是奈特。

  • 信息熵的本质是信息量的期望
  • 信息熵是对不确定性的度量
  • 随机变量X的熵越大,说明不确定性也大;若X为定值,则熵为0
  • 平均分布是"最不确定”的分布

联合熵和条件熵

X,Y是一对离散型随机变量,并且X,Yp(x,y)

联合熵

联合熵实际上描述的是一对随机变量平均所需要的信息量,定义如下。

H(X,Y)=xXyYp(x,y)logp(x,y)

条件熵

给定X的情况下,Y的条件熵为

H(YX)=xXyYp(x,y)logp(yx)

其中可以推导出:H(X,Y)=H(X)+H(YX)

相对熵和交叉熵

相对熵

随机变量X的状态空间Ωx上有两个概率分布p(x)q(x)。一般p是真实分布,q是预测分布

相对熵也称为KL距离,用来衡量相同事件空间里两个概率分布的差异

pq相对熵D(p∣∣q)用来度量它们之间的差异,如下

D(p∣∣q)=xXp(x)logp(x)q(x)=Ep(logp(X)q(X))()

特别地,若p==q,则相对熵为0;若差别增加,相对熵的值也增加。简单理解“相对”如下:

D(p∣∣q)=xXp(x)(logp(x)logq(x))=(xXp(x)logq(x))qp=(xXp(x)logp(x))p

交叉熵

交叉熵用来衡量估计模型与真实概率分布之间的差异。

随机变量Xp(x)q(x)近似于p(x)。 则随机变量X和模型q之间的交叉熵H(X,q)如下:q去近似p的熵

H(p,q)=H(X)+D(p∣∣q)=xXp(x)logq(x)

实际应用

交叉熵的实际应用,设y是预测的概率分布,y为真实的概率分布。则用交叉熵去判断估计的准确程度

H(y,y)=iyilogyi=iylogy

n元文法模型的交叉熵

设测试集T=(t1,t2,,tl)包含l个句子,则定义测试集的概率p(T)为多个句子概率的乘积

p(T)=i=1lp(ti)其中p(ti)=i=1lwp(wi|win+1i1),见上面

其中wij表示词wiwjwc(readw)是查找出所有以read开头的二元组的出现次数。

则在数据Tn元模型p(wi|win+1i1)的交叉熵Hp(T)定义如下

Hp(T)=1WTlog2p(T)WTT()

公式的推导过程如下

xXp(x)logq(x)1WTlogq(x)使p(x)1WTlogr(wi|win+1i1)1WTlog2p(T)

可以这么理解:利用模型pWT个词进行编码,每一个编码所需要的平均比特位数。

困惑度

困惑度是评估语言的基本准则人,也是对测试集T中每一个词汇的概率的几何平均值的倒数。

PPT(T)=2Hp(T)=1p(T)WT=2交叉熵

当然,交叉熵和困惑度越小越好。语言模型设计的任务就是要找出困惑度最小的模型。

在英语中,n元语法模型的困惑度是501000,交叉熵是610个比特位。

数据平滑

问题的提出

按照上面提出的语言模型,有的句子就没有概率,但是这是不合理的,因为总有出现的可能,概率应该大于0。设c(w)w在语料库中的出现次数。

p(readplm)=c(plmread)wic(plm|wi)=01=0

因此,必须分配给所有可能出现的字符串一个非0的概率值来避免这种错误的发送。

平滑技术就是用来解决这种零概率问题的。平滑指的是为了产生更准确的概率来调整最大似然估计的一种技术,也称作数据平滑。思想是劫富济贫,即提高低概率、降低高概率,尽量是概率分布趋于均匀。

数据平滑是语言模型中的核心问题

加法平滑

其实为了避免0概率,最简单的就是给统计次数加1。这里我们可以为每个单词的出现次数加上δδ[0,1],设V是所有词汇的单词表,|V|是单词表的词汇个数,则有概率:

padd(wiwin+1i1)=δ+c(win+1i)wi(δ|V|+c(win+1i))=δ+c(win+1i)[in+1,i]δ|V|+wic(win+1i)wi[in+1,i]

注:这个方法很原始。

Good-Turing

Good-Turing也称作古德-图灵方法,这是很多平滑技术的核心。

主要思想是重新分配概率,会得到一个剩余概率量p0=n1N,设n0为未出现的单词的个数,然后由这n0个单词去平均分配得到p0,即每个未出现的单词的概率为p0n0

对于一个n元语法,设nr恰好出现r次的n元语法的数目,下面是一些新的定义

  • 出现次数为rn元语法 新的出现次数r=(r+1)nr+1nr
  • N=r=0nrr=r=1nrr,即N是这个分布中最初的所有文法出现的次数,例如所有以read开始的总次数
  • 出现次数为r的修正概率 pr=rN

剩余概率量p0=n1N的推导

=r>0nrpr=r>0nr(r+1)nr+1nrN=1N(r>0(r+1)nr+1=1N(r>0(rnrn1)=1n1N<1

然后把p0平均分配给所有未见事件(r=0的事件)。

缺点

  • 若出现次数最大为k,则无法计算r=k的新的次数r和修正概率pr
  • 高低阶模型的结合通常能获得较好的平滑效果,但是Good-Turing不能高低阶模型结合

Jelinek-Mercer

问题引入

假如c(sendthe)=c(sendthou)=0,则通过GT方法有p(thesend)=p(thousend),但是实际上却应该是p(thesend)>p(thousend)

所以我们需要在二元语法模型中加入一个一元模型

pML(wi)=c(wi)wc(w)

二元线性插值

使用r将二元文法模型和一元文法模型进行线性插值

p(wiwi1)=λpML(wi|wi1)+(1λ)pML(wi)λ[0,1]

所以可以得到p(thesend)>p(thousend)

总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025