自然语言处理的一个基本问题就是为其上下文相关的特性建立数学模型,即统计语言模型(Statistical Language Model),它是自然语言处理的基础。

1 用数学的方法描述语言规律

假定S表示某个有意义的句子,由一连串特定顺序排列的词ω1,ω2,...,ωn组成,这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,即S的概率P(S),则P(S)=P1,ω2,...,ωn)。

利用条件概率的公式:

P1,ω2,...,ωn)=P1)•P21)•P312)•••Pn1,ω2,...,ωn-1)                             (1.1)

由于条件概率Pn1,ω2,...,ωn-1)难以估算,可利用马尔可夫假设:假设任一个词ωi出现的概率只同它前面的词ωi-1有关,则公式(1.1)可简化为:

P(S)=P1,ω2,...,ωn)=P1)•P21)•P32)•••Pnn-1)                                                  (1.2)

公式(1.2)对应的统计语言模型是二元模型(Bigram Model)。假设一个词由前面N-1个词决定,对应的模型称为N元模型。

接下来的问题是如何估计条件概率Pii-1),根据它的定义:

$ P(\omega_i|\omega_{i-1})=\frac{P(\omega_{i-1},\omega_i)}{P(\omega_{i-1})} $          (1.3)

估计联合概率Pi-1,ωi) 和边缘概率Pi-1) ,可利用语料库(Corpus),只要数一数ωi-1,ωi这对词在统计的文本中前后相邻出现的次数#(ωi-1,ωi),以及ωi-1本身在同样的文本中出现的次数#(ωi-1),然后用两个数分别除以语料库的大小 #,即可得到二元组的相对频度:

$ f(\omega_i,\omega_{i-1})=\frac{\#(\omega_{i-1},\omega_i)}{\#} $                                 (1.4)

$ f(\omega_{i-1})=\frac{\#(\omega_{i-1})}{\#} $                                                                 (1.5)

根据大数定理,只要统计量足够,相对频度等于频率,因此:

$ P(\omega_i|\omega_{i-1})\approx\frac{\#(\omega_{i-1},\omega_i)}{\#(\omega_{i-1})} $   (1.6)

2 统计语言模型的工程诀窍

2.1 高阶语言模型

假定文本中的每个词ωi和前面的N-1个词有关,而与更前面的词无关,这样当前词ωi的概率只取决于前面N-1个词Pi-N+1,ωi-N+2,...,ωi-1)。因此:

Pi1,ω2,...,ωi-1)=Pii-N+1,ωi-N+2,...,ωi-1)                                                 (2.1)

公式(2.1)的这种假设称为N-1阶马尔可夫假设,对应的语言模型称为N元模型(N-Gram Model)。实际应用最多的是N=3的三元模型。

为什么N取值一般都这么小呢?主要有两个原因。首先,N元模型的大小(空间复杂度)几乎是N的指数函数,即0(|V|N),这里|V|是一种语言词典的词汇量,一般在几万到几十万。而使用N元模型的速度(时间复杂度)也几乎是一个指数函数,即0(|V|N-1)。因此,N不能很大。当N从1到2,再从2到3时,魔性的效果上升显著。而当模型从2到4时,效果的提升就不是很显著了,而资源的耗费却显著增加。

最后还有一个问题,三元或四元甚至更高阶的模型是否能覆盖所有的语言现象呢?答案显然是否定的。这就是马尔可夫假设的局限性,这时要采取其他一些长程的依赖性(Long distance Dependency)来解决这个问题。

2.2 模型的训练、零概率问题和平滑方法

第1章中所述的模型训练方法存在一定问题。比如对于二元模型(1.2),就是拿两个数字,(ωi-1,ωi)在语料中同现的次数#(ωi-1,ωi)和(ωi-1)在语料中同现的次数#(ωi-1),计算一下比值即可。但问题是,如果同现的次数#(ωi-1,ωi)=0,是否就意味着条件概率Pii-1)=0?反之,如果#(ωi-1,ωi)和#(ωi-1)都只出现了一次,能否得出Pii-1)=1的绝对性结论?这就涉及到统计的可靠性问题。

解决该问题,一个直接的办法就是增加数据量,但即便如此,仍会遇到零概率或统计量不足的问题。因此,如果用直接的比值计算概率,大部分条件概率依然是零,这种模型我们称之为“不平滑”。

1953年古德(I.J.Good)在图灵(Alan Turing)的指导下,提出在统计中相信可靠的统计数据,而对不可信的统计数据打折扣的一种概率估计方法,同时将折扣的那一部分概率给予未出现的事件(Unseen Events),古德和图灵还给出了重新估算概率的公式,称为古德-图灵估计(Good-Turing Estimate)。

下面以统计词典中每个词的概率为例,来说明古德-图灵估计公式。

假定在语料库中出现r次的词有Nr个,特别地,未出现的词数量为N0。语料库大小为N。那么,很显然

                                                                                                               (2.2)

出现r次的词在整个语料库中的相对频度(Relative Frequency)则是rNr/N。现在假定当r比较小时,它的统计可能不可靠。因此在计算那些出现r此的词的概率时,要用一个更小一点的次数dr(而不直接使用r),古德-图灵估计按照下面的公式计算dr

dr=(r+1)•Nr+1/Nr                                                                                                             (2.3)

显然:

                                                                                                           (2.4)

一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多,这种规律称为Zipf定律(Zipf's Law),即Nr+1<Nr  。因此,一般情况下,dr<r,而d0>0。在实际的自然语言处理中,一般对出现次数超过某个阈值的词,频率不下调,只对出现次数低于这个阈值的词,频率才下调,下调得到的频率总和给未出现的词。

基于这种思想,估计二元模型概率的公式如下:

                                  (2.5)

其中,T是一个阈值,一般在8~10左右,函数fgt()表示经过古德-图灵估计后的相对频度,而

$ Q(w_{i-1})=\frac{1-\sum_{w_i\hspace{2pt}seen}P(w_i|w_{i-1})}{\sum_{w_i\hspace{2pt}unseen} f(w_i)} $   (2.6)

这种平滑的方法,最早由前IBM科学家卡茨(S.M.Katz)提出,故称卡茨退避法(Katz backoff)。类似地,对于三元模型,概率估计公式如下:

                                 (2.7)

用低阶语言模型和高阶语言模型进行线性插值来达到平滑的目的,这种方法称为删除差值(Deleted Interpolation),详见下面的公式。该公式中三个λ均为正数且和为1。线性插值效果比卡茨退避法略差,故现在较少使用。

Pii-2,ωi-1)=λ(ωi-2,ωi-1) • fii-2,ωi-1)+λ(ωi-1) • fii-1) +λ(ωi)                                                    (2.8)

2.3 语料的选取问题

1、训练语料和模型应用的领域要一致。

2、训练数据通常越多越好。

3、训练语料的噪音高低也会影响模型的效果。

参考

1、吴军 :《数学之美(第二版)》

转载于:https://www.cnblogs.com/yxdz-hit/p/7899594.html

统计语言模型(Statistical Language Model)相关推荐

  1. 数学之美系列之一:统计语言模型 (Statistical Language Models)

    前言 也许大家不相信,数学是解决信息检索和自然语言处理的最好工具.它能非常清晰地描述这些领域的实际问题并且给出漂亮的解决办法.每当人们应用数学工具解决一个语言问题时,总会感叹数学之美.我们希望利用 G ...

  2. NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...

  3. 自然语言处理从入门到应用——自然语言处理的语言模型(Language Model,LM)

    分类目录:<自然语言处理从入门到应用>总目录 语言模型(Language Model,LM)(也称统计语言模型)是描述自然语言概率分布的模型,是一个非常基础和重要的自然语言处理任务.利用语 ...

  4. Statistical language model 统计语言模型

    学习笔记来自斯坦福公开课的自然语言处理(https://class.coursera.org/nlp/),以其中讲义为主,加入自己的学习理解,以加深学习印象. 内容提纲: 1. N-GRAM介绍 2. ...

  5. 掩码语言模型(Masked Language Model)mlm

    https://www.cnblogs.com/anai/p/11645953.html bert 论文 从语言模型到Seq2Seq:Transformer如戏,全靠Mask https://zhua ...

  6. NLP(07)_统计语言模型

    统计语言模型 以下内容摘自和修改自吴军<数学之美> 自然语言从它产生开始,逐渐演变成一种上下文相关的信息表达和传递方式.因此让计算机处理自然语言,一个基本问题就是为自然语言这种上下文相关的 ...

  7. 数学之美 系列一 -- 统计语言模型

    数学之美 系列一 -- 统计语言模型 Posted on 2009-09-11 14:54 小y 阅读(576) 评论(0) 编辑 收藏  发表者: 吴军, Google 研究员 前言 也许大家不相信 ...

  8. 数学之美笔录(1):统计语言模型

    统计语言模型 (Statistical Language Models) 介绍 在语言处理领域,比如翻译.识别语音.文字识别和进行海量文献的自动检索,出现了两种最基本的方法.第一种方法比较直接,就是让 ...

  9. 【NLP】AutoRegressive Language Model

    AutoRegressive Language Model 回归分析(regression analysis)是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法.AutoRegressiv ...

最新文章

  1. VB.Net实现Web Service的基础
  2. java的高级特性_java的高级特性_for
  3. 说说程序员、编译器、CPU之间的三角恋
  4. 如何修改cmd控制台默认编码为utf-8
  5. 恶心的openssl。。。
  6. qt tableview修改表格内容_如何修改一次代码就可以完成多种类型 cell 的 UITableView 增删修改
  7. java可变字符串替换字符,我们如何替换Java中String和StringBuffer的特定部分?
  8. python在哪个方向岗位最多_Python就业方向这么多,哪些岗位最有发展?
  9. 计蒜客 蓝桥杯模拟五 合并数字
  10. 年会抽奖小游戏java_抽奖小游戏
  11. video 圆角 html,圆形视频和圆角视频的一种实现方式
  12. 2048游戏python源代码_python pygame实现2048游戏
  13. 打破双亲委派么,怎么打破_打破统一垃圾收集规则
  14. ServicePack自动补丁更新程序
  15. CSCD(2015-2016年)来源期刊目录中国科学引文数据库
  16. 看我骚操作‘破解’某查查app的sign以及某眼查的Authorization!
  17. python distance_to_Scipy: how to convert KD-Tree distance from query to kilometers (Python/Pandas)
  18. 项目需求|眼镜试戴app(ios)
  19. SQL not exists双重否定
  20. Exynos_4412——RTC实验

热门文章

  1. eclipse无法运行 ,报错:the selection cannot be launched
  2. Python学习之zip函数
  3. IOTA 交易,确认和共识
  4. 阿里SopHix热修复框架
  5. 连接不同区块链的跨链技术介绍
  6. 物联网中的 ARM 漏洞利用
  7. AsyncHttpClient 源码分析
  8. 区块链应用于供应链金融的完整解决方案
  9. html中after伪类原理,css :after伪类+content使用说明和方法
  10. cpu风扇一会转一会停_宝宝不能吹电风扇?空调PK电风扇,到底该Pick谁啊啊啊!...