NLP系列学习:数据平滑

各位小伙伴们你们好,数据平滑这个地方我想使用宗成庆老师的书中的一个例子进行开始,从而引出这一篇文章的主题,咱们为何要须要数据平滑以及经常使用的数据平滑的模型,话很少说,开始行动:算法

请看这个例子:性能

假设语料是由下面的三个句子构成:cdn

①:BROWN READ HOLY BIBLEblog

②:MARK READ A TEXT BOOK字符串

③:HE READ A BOOK BY DAVIDit

若是按照最大似然估计的方法计算p(BROWN READ A BOOK)的话:io

所以:class

可是这时候问题来了:语法

若是咱们这时候要求p(David read a book),这时候几率是多少呢?lazyload

可是根据咱们本身积累的知识,Brown和David都是人,Brown能够看书,为啥David不能够看书,这个显然是不对的,而形成这个方法的主要缘由仍是由于咱们的语料库过小,不够丰富,事实上咱们是但愿咱们的语料库越大越好,越全越给力,否则一旦给定你的语句的几率是0,不管你的句子书写的多么优美,也是达不到咱们人类的指望的效果,因此这时候咱们须要给全部可能出现的字符串一个非零的几率值来去解决这样的问题,这就是所谓的平滑.

平滑的目的在上边咱们已经所说,总结归纳就是解决因为数据匮乏(稀疏)引发的零几率的问题,而所采用的方法就是从高几率语句中分出微小的几率给予零几率的句子,在宗成庆老师的书中形象的说明是”劫富济贫”,而数据平滑是语言模型的核心的问题,宗成庆老师的书中给出了太多的算法,在这里我只记录几种算法,而后贯通思路,若是你们深刻了解的话能够本身读书和读宗老师提供的论文:

一:加法平滑方法

算法的基本思想是:在这里先说一下加一法,加一法实际上是每一种状况出现以后次数加1,即假设每一个二元语法出现的次数比实际出现的次数多一次,这样就叫作了加一法,而加法平滑其实就是否是让每个n元语法发生的次数比实际的统计次数多一次,而是假设比实际出现的状况多发生△次,而且0<△<1,这就有公式:

二:Good Turing估计法:

这个方法是不少平滑技术的核心

在上边为何会是小于1,在这里我证实了一下:

缺陷:

三:Jelinek-Merer平滑方法

基本思想:主要利用低元N-gram模型对高元N-gram模型进行线性插值

四:绝对减值法

各类平滑方法的比较:

无论训练语料规模多大,对于二元语法和三元语法而言,Kneser-Ney平滑方法和修正的Kneser-Ney平滑方法的效果都好于其余全部的平滑方法。Katz平滑方法和Jelinek- Mercer平滑方法次之。

在稀疏数据的状况下,Jelinek-Mercer平滑方法优于Katz平滑方法;而在有大量数据 的状况下,Katz平滑方法则优于Jelinek-Mercer平滑方法。

这里我画了一张图:

这里浅谈一下我在读宗成庆老师这本书的时候的一点点小见解,读宗老师的书老是感受太过于全,可是不少东西都讲得不够透彻,而且不少地方也是有赶工的痕迹,不过整体上的路线都可以总结出来,可是其中宗老师提供了不少的论文地址,你们能够去搜一搜而后在去详细深刻.

影响平滑算法性能的因素:

平滑方法的相对性能不训练语料的规模、n元语法模型的阶数和训练语料自己有较大 的关系,其效果可能会随着这些因素的丌同而出现很大的变化。

语言模型的缺陷 :

1:在训练语言模型时所采用的语料每每来自多种丌同的领域,这些综合性语料难以反映在不一样领域之间在语言使用规律上的差别,而语言模型偏偏对于训练文本的类型、主题 和风格等都十分敏感;

2:n 元语言模型的独立性假设的前提是一个文本中的当前词出现的几率只不它前面相邻 的n-1 个词相关,但这种假设在不少状况下是明显不成立的。

相关文章
相关标签/搜索