前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >NLP入门之N元语法模型

NLP入门之N元语法模型

原创
作者头像
云时之间
发布于 2018-04-10 09:14:08
发布于 2018-04-10 09:14:08
1.7K3
举报
文章被收录于专栏:云时之间云时之间

编辑文章

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

在这一篇文章中,我们将会介绍下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,不足之处请各位多多批评指正,在此谢过!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
3 条评论
热度
最新
谢谢博主的经验分享,感谢
谢谢博主的经验分享,感谢
回复回复点赞举报
第一次接触NLP,学习了,比较详细
第一次接触NLP,学习了,比较详细
11点赞举报
加油
加油
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
NLP入门之语言模型以及n元文法
各位小伙伴们大家好,在接下来的文章中我们将讲述一下什么是语言模型,以及语言模型上的应用,在完善之后我们将会简单的讲解一下语言模型的性能评估,这三点将是这一篇文章的主要内容.
云时之间
2018/04/10
3.2K2
NLP入门之语言模型以及n元文法
NLP系列学习:数据平滑
各位小伙伴们大家好,数据平滑这个地方我想使用宗成庆老师的书中的一个例子进行开始,从而引出这一篇文章的主题,我们为什么要需要数据平滑以及常用的数据平滑的模型,话不多说,开始行动:
云时之间
2018/04/10
8264
NLP系列学习:数据平滑
通俗理解n-gram语言模型
本文主要介绍n-gram语言模型,如果想要了解语言模型的相关知识可以看《带你理解语言模型》。
触摸壹缕阳光
2020/07/20
3K0
通俗理解n-gram语言模型
NLP基础:N-Gram模型
从计算上看,知道一个词出现的概率需要知道其前面所有词的出现概率,这种方法太过复杂,因此这里引入了马尔可夫模型,即当前词的出现概率仅与前面几个词有关。由此产生了N-Gram模型。
三猫
2021/04/09
1K0
学习笔记CB006:依存句法、LTP、N-最短路径、由字构词分词法、图论、概率论
依存句法分析,法国语言学家L.Tesniere1959年提出。句法,句子规则,句子成分组织规则。依存句法,成分间依赖关系。依赖,没有A,B存在错误。语义,句子含义。
利炳根
2018/03/09
1.8K0
NLP: Word Embedding 词嵌入(Part1: 基础和 Word2Vec)
例如:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 这个 one-dimension vector 就代表这是整个句子里的第一个词
JiahuiZhu1998
2022/11/27
1.2K0
N-Gram
N-Gram(N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来评估一个句子是否合理。N-Gram的另外一个作用是用来评估两个字符串之间的差异程度,这是模糊匹配中常用的一种手段。本文将从此开始,进而向读者展示N-Gram在自然语言处理中的各种Powerful的应用
mathor
2020/02/17
1.1K0
自然语言处理(三)语言模型
用数学的方法描述语言规律,即用句子S=w1,w2…wnS = w_1,w_2\dots w_nS=w1​,w2​…wn​的概率p(S)p(S)p(S)刻画句子的合理性.
JNJYan
2019/01/18
9280
NLP 点滴 :文本相似度 (中)
肖力涛
2017/08/23
3.5K0
NLP 点滴 :文本相似度 (中)
自然语言处理:语言模型与评价方法
假设一门语言中所有可能的句子服从某一个概率分布,每个句子出现的概率加起来为1,那么“语言模型”的任务就是预测每个句子在语言中出现的概率。对于语言中常见的句子,一个好的语言模型应得出相对较高的概率;而对于不合语法的句子,计算出的概率则应接近于零。把句子看成单词的序列,语言模型可以表示为一个计算p(w1,w2,w3,…,wm)的模型。语言模型仅仅对句子出现的概率进行建模,并不尝试去“理解”句子的内容含义。比如说,语言模型能告诉我们什么样的句子是常用句子,但无法告诉我们两句话的意思是否相似或者相反。
博文视点Broadview
2020/06/11
1.1K0
自然语言处理:语言模型与评价方法
HanLP《自然语言处理入门》笔记--3.二元语法与中文分词
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP
mantch
2020/02/18
1.4K0
【深度学习】序列生成模型(三):N元统计模型
  N元模型(N-Gram Model)是一种常用的序列建模方法,尤其是在处理数据稀疏问题时。该模型基于马尔可夫假设,即假设当前词的生成只依赖于其前面的
Qomolangma
2024/07/30
1370
史上最强NLP知识集合:知识结构、发展历程、导师名单
自然语言处理(NaturalLanguage Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向,旨在研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。用自然语言与计算机进行通信,有着十分重要的实际应用意义,也有着革命性的理论意义。
量子位
2018/12/07
1.8K0
判别模型、生成模型与朴素贝叶斯方法
1、判别模型与生成模型 回归模型其实是判别模型,也就是根据特征值来求结果的概率。形式化表示为 ,在参数 确定的情况下,求解条件概率 。通俗的解释为在给定特征后预测结果出现的概率。 比如说要确定一
机器学习AI算法工程
2018/03/12
1.3K0
判别模型、生成模型与朴素贝叶斯方法
一文读懂 AI(内附NLP领域N-Gram模型简单实现)
Qiuner
2025/04/15
990
一文读懂 AI(内附NLP领域N-Gram模型简单实现)
NLP第一课(我也是才开始学)
  闲着无聊的时候,我就会问问自己,编程也有了五年经验了,除了增删改查,我还会什么,有一天我跳槽,去面试的时候,我能比那些年轻而且期望薪资待遇低的年轻毕业生,我有什么优势,而且我只是一个专科的机电系学生,居然来做软件编程,好戏剧的一切,渐渐的给自己洗脑,自己都忘记自己是培训机构出来的,说了这么多抱怨的话,没有说培训机构的不好,没有说我们专科生就一定比高学历人才的差,归根到底还是需要学习吧,自学了半年多python,现在报了一个假期培训班来学习NLP,英语是硬伤,自己表示很无奈。
小菜的不能再菜
2019/09/18
3980
NLP第一课(我也是才开始学)
学习笔记CB008:词义消歧、有监督、无监督、语义角色标注、信息检索、TF-IDF、
词义消歧,句子、篇章语义理解基础,必须解决。语言都有大量多种含义词汇。词义消歧,可通过机器学习方法解决。词义消歧有监督机器学习分类算法,判断词义所属分类。词义消歧无监督机器学习聚类算法,把词义聚成多类,每一类一种含义。
利炳根
2018/03/12
1.4K0
学习笔记CB007:分词、命名实体识别、词性标注、句法分析树
概率图模型条件随机场适用观测值条件下决定随机变量有有限个取值情况。给定观察序列X,某个特定标记序列Y概率,指数函数 exp(∑λt+∑μs)。符合最大熵原理。基于条件随机场命名实体识别方法属于有监督学习方法,利用已标注大规模语料库训练。
利炳根
2018/03/11
1.7K0
N-Gram模型 vs. RNN | 语言模型之战 | 老炮儿聊机器语音 | 3th
语言模型是自然语言处理中的核心模型,是对一句话的合理性进行度量的模型,比如“今天天气不错”就比“不错天气今天”要合理,如何对句子的合理性进行评价,是语言模型需要解决的核心问题。实现语言模型的基础从最初语言学家基于语言规则的度量,发展到现在的基于概率统计理论的度量,因此我们现在说的语言模型,基本都是指统计语言模型(Statistical Language Model)。
用户7623498
2020/08/04
5510
N-Gram模型 vs. RNN | 语言模型之战 | 老炮儿聊机器语音 | 3th
【现代深度学习技术】循环神经网络03:语言模型和数据集
  在文本预处理中,我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符。假设长度为
Francek Chen
2025/04/17
1150
【现代深度学习技术】循环神经网络03:语言模型和数据集
推荐阅读
相关推荐
NLP入门之语言模型以及n元文法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档