在上边我们知道其实当今的自然语言处理的主流趋势是统计自然语言处理,而统计自然语言处理的基本目的就是结合语料库中的一些数据对于某些未知的数据进行处理,从而根据这些数据分布得到一些推论,大家想一想,我们在语料库里发现”你”和”吃饭了么”这两个词总是存在着一些附着关系,是不是我们就有预测在一些未知的文章中也会有这样附着关系?

在这一篇文章中,我们将会介绍下n元语法模型和解决因为数据缺乏的情况下引入的几种常用的平滑度算法,

1:n元语法模型

n元语法模型的基本的公式可以看作为下面的概率公式P:

这个公式所表示的含义其实是在产生第i个词的概率是由前边已经产生的从w1到wi-1的这个词概率来决定的,在这样的一个过程中,我们使用了先前词,也就是通过用先前词来去预测下一个将要出现的词,然后我们根据大量的文本观测,我们会知道这个词会不会越来越趋向于在这些词的后面.比如上边举例的”你””吃饭了么”,现在假设我们的文本中有1000句话,现在你吃饭了么出现了20次,这样的话我们就会得到相应的出现这个词的概率P(吃饭了么)=(20/1000)=(1/50).

当然,在实际的任务中没有那么多实际的文本历史供我们参考,很多时候出现的词或者句子我们之前都没有见过,这样的话我们以前的经验就没有办法预测了,比如:我们遇到了一个句子:”你吃饭不吃饭?”,这样的话就跟”你吃饭了么”在前半部分是一样,但是后边却有一个不一样的结尾.那要怎么解决这个问题呢?是不是把以前的文本出现过的历史组合进行总结,然后进行学习,对于预期将要出现的词,会不会出现一个合理的预测呢?

这样的组合文本历史的可能出现的方法就是我们常说的马尔科夫假设,这个假设其实说的就是上边所对应的问题,这个假设说的其实就是认为接下来要出现的词是由前边出现的词来影响的.如果按照上边的公式来说,因为前边是由i-1个词语,那么如果我们构造一个模型的话,所有的历史其实就是前边的i-1个词,这样的话我们构造的模型就成为(n-1)阶马尔科夫模型,或者说n元语法模型(因为我们要预测第n个词).

这里要说一下这个n的取值问题,一般情况下我们是不能把这个n取值过大的,要是过大的话,肯定会有很多的等价类,太多的自由参数未必是一件好事(其实把数据划分成多个等价类有利有弊,一方面如果我们把数据分割成多个类的话其实可以让我们有更多的辨别性,但是要是使用了太多的等价类,那么对于每个类别来说,他的训练数据很小,甚至有些部分没有训练数据,这样的话再去做目标特征的统计估计这时候就很不准确了,所以这时候如何去权衡,找到一个合适的类别数,是我们的一个探索目标.)那么这时候我们再去看看n的取值问题,一般情况下大多数常用的n的取值是n=2,3,4的情况,这个时候分别称为bigram(二元语法),trigram(三元语法),fourgram(四元语法).

现在假设一个说话者的使用词有20000个,那么参数的数量如下图所示:

从这个图上我们看到,到四元语法模型就已经拥有非常巨大的参数了,所以构造更多的语法模型显然是不现实的.

2:构建n元语法模型

1;通常构建模型的第一步是处理语料

首先我们需要对语料进行处理,因为根据n元语法要求,一个词的概率只跟前边的词的概率有关,因为要使所有的概率之和为1,因此我们要在句首和句尾加上一个句首标记和句尾标记,这样的话我们就可以计算,下边举一个例子:

p(I Love You)

在这样处理完句子之后,如果我们得到了一个确定的语料库,如果现在一个词出现了10次,比如:”good”后面有8次跟着”morning”,1次”boy”,一次”girl”,那么估计下一个词,我们会出现哪一种概率呢?

其实我们可以考虑使用相对概率来估计:

P(morning)=0.8

P(girl)=0.1

P(boy)=0.1

P(other)=0(other不属于上述三个词汇)

这样归类之后,去给这些数据计算他们的概率了,再去归一化,这样就可以计算出来:

在这里我们去用C(w1.......wn)来表示n元语法在给定文本中出现的次数,这样的话我们就有下边的计算公式:

像这样的估计的处理方式,我们叫做p(wn|w1.........wn-1)的最大似然估计(MLF)

之所以称为最大似然估计,是因为他选择的参数相对于训练数据给出了最高的概率(满足了正常随机约束),但是其实我在上网搜这个问题的时候,很多人说MLF是不太适合自然语言处理的,因为本身我们的语料库规模会很大,我们的数据会很稀疏,并且像上边那样的常用词概率这么高的情况是非常理想的状态,大部分词都是不常用的,那么这样就会出现一个问题,如果一个n元组正好在判别时没有了训练语料出现时,这时候的概率就会很差,就跟上边的词,good后边还可以跟很多的词,但是最大似然估计并不会认为会有其他的词跟在这个good后边.

那么应该怎么去解决这个问题,这个时候我们就会想应该要有一种更好的估计方法,要是能够判别出在训练数据中没有出现的事件,并且能够给出一定的概率,这时候一些研究者给出了更好方法:

如果可以通过稍微减少已经观察到的事件概率的大小,并且可以把少量的概率分配到没有看到过的事件上,这时候每件事件都会发生并且可能有效的工作,这个就是我们常说的折扣法,折扣的过程就叫做平滑(这难道是因为没有0值分布会比有0值分布更平滑?)

那么我们应该如何进行平滑,平滑的常用方式有几种,在下一篇文章中我们将讲述下几种常用的数据平滑方法.

初学NLP,不足之处请各位多多批评指正,在此谢过!

NLP入门之N元语法模型相关推荐

  1. 【组队学习】【29期】9. 基于transformers的自然语言处理(NLP)入门

    9. 基于transformers的自然语言处理(NLP)入门 航路开辟者:多多.erenup.张帆.张贤.李泺秋.蔡杰.hlzhang 领航员:张红旭.袁一涵 航海士:多多.张红旭.袁一涵.童鸣 基 ...

  2. 【组队学习】【28期】基于transformers的自然语言处理(NLP)入门

    基于transformers的自然语言处理(NLP)入门 论坛版块: http://datawhale.club/c/team-learning/39-category/39 开源内容: https: ...

  3. NLP入门必知必会(一):Word Vectors

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:芦冬生,Datawhale优秀学习者,北京理工大学 自然语言处理( ...

  4. NLP入门之路及学习方法:从任务实践入手!

    Datawhale原创 作者:康兵兵,Datawhale成员 寄语:NLP入门,科学有效的方法是找到切入点,一个具体任务.从任务实践入手,做到既见树木也见森林. 笔者从2018年初开始接触机器学习,现 ...

  5. N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑

    转载自时空霹雳 在统计语言模型章节中,我们谈到了N元语法模型不可避免的一个问题,就是数据稀疏,其原因是大规模语料统计与有限语料的矛盾.根据齐普夫(Zipf)法则,我们能够推测知零概率问题不可避免.数据 ...

  6. NLP入门学习3——句法分析(基于LTP4)

    NLP入门学习3--句法分析(基于LTP4) 0.简介 1.LTP介绍 2.安装 2.1 模块安装 2.2 模型下载 3.使用 3.1 分句 3.2 分词 3.3 词性标注 3.4 命名实体识别 3. ...

  7. NLP入门之综述阅读-基于深度学习的自然语言处理研究综述

    NLP入门-综述阅读-[基于深度学习的自然语言处理研究综述] 基于深度学习的自然语言处理研究综述 摘要 0 引言 1 深度学习概述 卷积神经网络 递归神经网络 2 NLP应用研究进展 3 预训练语言模 ...

  8. NLP入门概览(9) ——句法分析c:局部句法分析、依存关系分析

      在上一部分中,我们介绍了基于规则法.概率统计法.神经网络法的完全句法分析方法(NLP入门概览(8)--句法分析b:完全句法分析).   在这一部分中,我们将介绍句法分析中的另外两种类型:局部句法分 ...

  9. NLP入门之综述阅读-自然语言处理发展及应用综述

    NLP入门-综述阅读-[自然语言处理发展及应用综述] 1 前言 2 自然语言处理的发展 3 自然语言处理的研究方法和内容 3.1 自然语言处理的研究方法 3.2 自然语言处理基础研究 3.2.1 词法 ...

  10. NLP入门(八)使用CRF++实现命名实体识别(NER)

    CRF与NER简介   CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...

最新文章

  1. 使用泛型 ,做计算器
  2. Python中多个数组行合并及列合并的方法总结
  3. python图像编程:实现弹球游戏
  4. jzoj2941-贿赂【数学期望,dfs】
  5. jstree 节点拖拽保存数据库
  6. mysql为什么不能插入数据_mysql为啥不能插入数据
  7. static详解java_java中static作用详解
  8. Axure团队项目之Axure share与 SVN
  9. 图像直方图均衡 matlab,图像直方图均衡化
  10. Justoj 2388最短区间 贪心
  11. 转:深网 | 中国手机往事:因为雷军、罗永浩们,中国才告别山寨机
  12. 解决CSR 8510 A10蓝牙适配器驱动安装不正常问题
  13. python代码解释4个作用域_Python中作用域的深入讲解
  14. Python爬虫第十课:Scrapy框架(1)
  15. python基础(四):元组(Tuple)、字典、字符串、序列
  16. Firefox的扩展开发介绍
  17. ueditor编辑器复制粘贴图片上传
  18. 微信小程序海报分享及好友分享
  19. Java 多线程分批同步数据
  20. ios_获取蓝牙mac地址

热门文章

  1. 标记偏见_人工智能的影响,偏见和可持续性
  2. 鸿蒙升级最佳时间,鸿蒙升级时间确定,17款华为优先,荣耀或成遗珠!
  3. 例2.1 排序 - 九度教程第1题(排序)
  4. 2019一注结构成绩_2019年福建地区计算机考研汇总分析
  5. java对象中方法的存储原理_垃圾收集机制的基本原理及方法
  6. mysql运维知识_Mysql运维知识
  7. 10上wsl位置迁移_AppGet作者:WSL是微软的神奇之举,但Windows 7开源永不可能
  8. latex转为html效果好吗,latex转HTML
  9. python将输出结果写入csv_Python怎么把输出整体写入CSV文件
  10. spring cloud构建互联网分布式微服务云平台-服务提供与调用