笔记(总结)-统计语言模型

在自然语言处理的相关问题中,如何表示句子是建模分析的关键。与传统的图像、音频等天然可转化为计算机编码的元素不同,自然语言需要经过复杂编码才能被计算机识别。并且,这种编码是机械式的简单排列,设计初衷是为了解决自然语言的存储问题,编码本身不带有任何语言层面的信息。因此,直接使用自然语言的编码对文字进行转换而后建模是不可靠的,过程中丢失了太多的信息。语言模型正是解决了这样的问题。


语言模型有很多种,计算机领域常用的有统计语言模型和神经语言模型,本篇先只描述统计语言模型。

统计语言模型定义

假设句子可以表示为:

S=w1w2...wn S = w 1 w 2 . . . w n

其中 wii=1,2,...,n w i , i = 1 , 2 , . . . , n 为组成句子的基本单位(可以为字、词等划分单位,下文统称为词)。那么以该句子的出现的概率 P(S) P ( S ) 来描述该句子的合理性。

可以看到,该定义用概率对语言建模,而不需要进行语言层面的分析。这其实是机器学习解决问题的典型思路,自然界的事物规律可以由概率表达,概率大的事件更加可能出现、更合理,反之亦然。概率本身就可以描述语言现象的合理性。


P(S) P ( S ) 的具体定义

在自然语言中,上下文是相关的。如果以句子为单位,很容易发现,下文是依赖于上文的。比如在对话过程中,人们往往能根据对方已说出的话,来推测接下来对方要说什么。使用条件概率来刻画这种依赖是十分合适的,于是可以定义概率如下:

P(S)=p(w1)p(w2|w1)p(w3|w1w2)...p(wn|w1w2...wn1) P ( S ) = p ( w 1 ) p ( w 2 | w 1 ) p ( w 3 | w 1 w 2 ) . . . p ( w n | w 1 w 2 . . . w n − 1 )

wi w i 的概率由 w1w2...wi1 w 1 w 2 . . . w i − 1 决定,后者也叫做 wi w i 的历史。


问题简化——n元文法

可以看到,原始定义的概率论意义是十分完备的,每个词都基于历史。但这样是有问题的。建模过程中,需要具体计算形如 p(wi|w1w2...wi1) p ( w i | w 1 w 2 . . . w i − 1 ) 的参数。假设词汇表的大小为 L L ,那么w1w2...wi1的不同排列组合有 Li1 L i − 1 种,而这只是计算 wi w i 所需要的参数。

因此,我们采取简化的方法,只考虑与该词最近的一段历史(马尔可夫的思路),比如最近的一个词,此时称作二元文法(2-gram):

P(S)=p(w1)p(w2|w1)p(w3|w2)...p(wn|wn1) P ( S ) = p ( w 1 ) p ( w 2 | w 1 ) p ( w 3 | w 2 ) . . . p ( w n | w n − 1 )

这样的概率处理在语言学上也是说得通的,距离当前词越近的词,造成的影响越大,而距离较远的词,往往产生的影响较小。当然,这不是绝对的,语言现象中有许多反例。但是,借由这种处理,我们达到了“合理建模”与“模型可计算”的巧妙折中。

当认为一个词由前面的 n1 n − 1 个词决定时,称作n元文法。显而易见,随着n的增大,参数量呈指数增加。现实中往往取 n=2,3 n = 2 , 3 ,工业界一般会取 n=4 n = 4

针对某一个句子,通常增加开始符 <BOS> < B O S > <script type="math/tex" id="MathJax-Element-13929"> </script>和结束符 <EOS> < E O S > <script type="math/tex" id="MathJax-Element-13930"> </script>使得概率定义更加完备,举例改写二元文法为:

P(S)=p(<BOS>|w1)p(w2|w1)...p(wn|wn1)p(<EOS>|wn) P ( S ) = p ( < B O S > | w 1 ) p ( w 2 | w 1 ) . . . p ( w n | w n − 1 ) p ( < E O S > | w n )


参数计算与平滑

一般使用极大似然估计来进行参数估计,即使用已有的采样数据(训练集)来估计模型参数,使得训练集的语言现象得到最大可能性的复现。显然,极大似然在n元文法的场景下就是通过频数来得到概率参数。此时有(以二元文法举例):

P(wi|wi1)=Count(wi1wi)Count(wi) P ( w i | w i − 1 ) = ∑ C o u n t ( w i − 1 w i ) ∑ C o u n t ( w i )

其中, Count(wi1wi) C o u n t ( w i − 1 w i ) 表示子串 wi1wi w i − 1 w i 的出现次数,同理 Count(wi) C o u n t ( w i )

语言现象是丰富的,即使训练集再庞大,也不可能包括所有子串。当测试集中出现了训练集中没有的词或子串时,句子概率会等于0,但这显然是不科学的。因此我们需要对概率进行平滑,使得即使是没有出现的句子,在模型中计算得到的概率不为0,转而设置为一微小量。

参数平滑方法有很多:加一法(additive smoothing)、折扣法(discounting)、删除减值法等。在各个领域都是适用,这里就暂不详述了。


缺陷

上一部分已经看到,即使是很大的训练集也无法覆盖全部的语言现象,从而导致0概率问题的出现。使用概率进行建模的弊端也在此:依赖语言现象出现的频数。而频数是语料敏感的,不同的语料集之间差异巨大,比如新闻语料和微博语料对于语言的使用风格差异巨大,由此统计而来的频数规律肯定大不相同。在某些场景下,频数甚至无法反映语言现象,如情感分析中,表达情感的词通常是低频出现的,这时统计语言模型无法很好建模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值