每天给你送来NLP技术干货!


来自:老刘说NLP

作者:刘焕勇

统计语言模型语言模型(Language Model),是当前非规则自然语言处理的根基,也是自然语言处理学科的精髓所在

简单来说,语言模型简就是一串词序列的概率分布,语言模型的作用是为一个长度为m的文本确定一个概率分布P,表示这段文本存在的可能性。

即,P(wi|w1,w2,...,wi−1)。

不过,显而易见的是,我们在实际工作中会经常碰到文本长度较长情况,P(wi|w1,w2,...,wi−1)的估算会非常困难。

因此,为了实现对该数值的估算,先后出现了ngram语言模型,nnlm前馈神经语言模型,循环神经语言模型,并最终形成当前大火的Bert预训练语言模型。

对语言模型本身的发展脉络进行梳理,对于增强自然语言处理技术理解而言,意义重大。本文主要围绕这一主题进行介绍,供大家一起思考。

一、语言建模中的统计语言模型

统计语言模型是当前自然语言处理处理的根本之根本,当我们在判定一句话是否是人话的时候,可以通过计算概率的方式来判断该句子是否成立,如果一个句子成立的概率很大,那么这个句子是一个成立的句子概率就越大。

例如:

对于给定的一个句子:

S=w1,w2,w3,…,Wk

其概率公式为:

P(S)=P(w1,w2,w3,...,wn)

利用条件概率的思想,序列出现的概率等于每一个词出现的条件概率相乘,P(w1,...,wn)展开为

P(S)=P(W1,W2,W3,...,Wn)
=P(W1)P(W2|W1)P(W3|W1,W2)…P(Wn|W1,W2,…,Wn-1)

其中,P(w1)表示第一个词w1出现的概率;

P(w2|w1)是已知第一个词的前提下,第二个词出现的概率;

以此类推,词wn出现的概率取决于它前面所有的词。

这样,只需要得到每一个条件概率的值,就能估计出该句子的成立概率,例如:

P(W2|W1)=count(w1w2)/count(w1)P(W3|W1,W2)=count(W1,W2,W3)/count(W1,W2)P(Wn|W1,W2,…,Wn-1)= count(W1,W2,…,Wn-1,Wn)/count(W1,W2,…,Wn-1)

因此,这样一种建模任务就是典型的语言模型任务,包括两种:

1)计算单词序列语句出现的概率:

2)预测下一个词出现的概率:

实现上述功能的模型称为语言模型(LM,language model)。

二、从统计语言模型到ngram语言模型

上面说到,建模这两个任务的概率,词wn出现的概率取决于它前面所有的词,即使用链式法则,即当前第n个词用哪一个,完全取决于前n-1个词。

在计算的过程中,这个操作十分巨大,其可能性太多,参数量(每一个需要计算的条件概率,都是一个参数)太大,那么,如何解决这个参数空间过大的问题,引入马尔可夫假设是一种解决方法。

1、思想

马尔可夫假设认为,随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关。

如果一个词的出现与它周围的词是独立的,那么我们就称之为unigram, 也就是一元语言模型:

P(W1,W2,W3,...,Wn) = P(W1)* P(W2)*P(W3) *…*P(Wn-1)*P(Wn)

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram, 对应于一阶隐马尔可夫链:

P(W1,W2,W3,...,Wn) = P(W1)* P(W2|W1)*P(W3|W2) *…*P(Wn| Wn-1)

假设一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram, 对应于一阶隐马尔可夫链。

2、优点

总结的来说,N元模型就是假设当前词的出现概率只与它前面的N-1个词有关,即N-1阶隐马尔可夫链条。

这样以来,P(W2|W1)等概率的求解也可以通过统计得出,与原先的语言模型相比,虽然需要统计的参数量得到了有效减少,假设词表大小为V,一元语言模型计算量为V,二元为V的平方,三元为V的三次方

总结起来就是,1) 采用极大似然估计,参数易训练;2) 完全包含了前 n-1 个词的全部信息;3) 可解释性强,直观易理解。

3、缺点

但是这种方法也不是很完美,依旧存在几个典型缺点,例如:

首先,ngram计算量十分大,会随着ngram的n计算量指数增加;

其次,N元语言模型并没有解决数据稀疏的问题,因为得到可靠的概率数值,需要足够多的语料,对于在语料库种都没有出现的词,得到的最大似然估计的概率值等于0,虽然可以通过加1或者加k的方式进行平滑处理,平滑技术类方法属于人工设计规则,设计规则纷繁复杂,哪一种适合什么样的语料,难有定论。困惑度可以用于评价各种规则,但困惑度本身并不是一个完美的评价方法。但其真实概率依旧不太有用。

其三,基于极大似然估计的语言模型缺少对上下文的泛化,比如,原语料中出现白汽车、黑汽车,而没有黄汽车,该语言模型就会影响对黄汽车的概率估计。

总结起来就是,1) 缺乏长期依赖,只能建模到前 n-1 个词;2) 随着 n 的增大,参数空间呈指数增长;3) 数据稀疏,难免会出现OOV的问题;4) 单纯的基于统计频次,泛化能力差。

三、从ngram语言模型到NNLM神经语言模型

因此,为了解决上述3个问题,基于机器学习的神经概率语言模型成为了用来计算概率p(wi|wi−1)的另一种方法。

1、思想

在具体实现上,该模型与N-gram语言模型计算条件概率的方法是简单的用词频做除法然后归一化不同,该方法将所考虑的问题建模后先为其构造一个目标函数,然后对这个目标函数进行优化,从而求得一组最优的参数(即上述的参数量),最后再利用这组参数对应的模型来预测整个句子成立的概率。

例如,利用最大化对数似然,将目标函数设计为:

其中,Context代表词w的上下文,对应N-gram就是词w的前N-1个词,θ为待定参数集,这样将计算所有的条件概率转化为了最优化目标函数,求解得到θ的过程。

因此,

通过选取合适模型可以使得θ参数的个数远小于N-gram模型中参数的个数,这可以解决参数解的问题

利用神经网络最后一层的softmax进行归一化求解,得到的概率是平滑的,也解决了语言模型稀疏性的问题。

Bengio 等人在 2003 年提出了一个神经网络语言模型NNML,该语言模型使用了一三层前馈神经网络来进行建模。

先给每个词在连续空间中赋予一个向量(词向量),再通过神经网络去学习这种分布式表征。

2、优点

利用神经网络去建模当前词出现的概率与其前n-1个词之间的约束关系,但这种方式相比n-gram具有更好的泛化能力,只要词表征足够好,从而很大程度地降低了数据稀疏带来的问题。尽管与统计语言模型的直观性相比,神经网络的黑盒子特性决定了NNLM的可解释性较差,但这并不妨碍其成为一种非常好的概率分布建模方式。

总结起来,优点可以是1)长距离依赖,具有更强的约束性;2)避免了数据稀疏所带来的OOV问题;3)好的词表征能够提高模型泛化能力。

3、缺点

NNLM这个结构的缺点也比较明显,仅包含了有限的前文信息,并且无法解决长距离依赖。并且,模型训练时间长;神经网络黑盒子,可解释性较差。

四、从NNLM神经语言模型到循环神经语言模型

为了解决定长信息依赖的问题,Mikolov 于2010年发表的论文 Recurrent neural network based language model 正式揭开了循环神经网络(RNN)在语言模型中的强大历程,并随后出现LSTM、GRU等变体。

1、思想

为了刻画一个序列当前的输出与之前信息的关系,利用之前的信息影响后面结点的输出,以解决时间序列输入输出问题的RNN(Recurrent Neural Network)网络被提出。

一个典型的RNN网络包含一个输入x,一个输出h和一个神经网络单元A。和普通的神经网络不同的是,RNN网络的神经网络单元A不仅仅与输入和输出存在联系,其与自身也存在一个回路。这种网络结构就揭示了RNN的实质:上一个时刻的网络状态信息将会作用于下一个时刻的网络状态。

基本RNN来说,它能够处理一定的短期依赖,但无法处理长期依赖问题。首先,当序列较长时,序列后部的梯度很难反向传播到前面的序列,比如10个元素以前,这就产生了梯度消失问题。此外,由于RNN本时刻的隐藏层信息只来源于当前输入和上一时刻的隐藏层信息,没有记忆功能。

因此,为了解决RNN的长期依赖和梯度消失问题,LSTM被提出。

从微观上看,LSTM引入了细胞状态来记录记忆信息并使用输入门、遗忘门、输出门三种门来保持和控制信息:

遗忘门结合上一隐藏层状态值和当前输入,通过sigmoid函数,决定舍弃哪些旧信息;

输入门和tanh决定从上一时刻隐藏层激活值和当前输入值中保存哪些新信息,输出门结合tanh决定上一时刻隐藏层激活值、当前输入值以及当前细胞状态中哪些信息输出为本时刻的隐藏层状态。

为了加快lSTM的训练速度,GRU作为LSTM的一种变体被提出。

GRU将忘记门和输入门合成了一个单一的更新门,使用重置门用来决定要忘记多少过去的信息的门,并混合了细胞状态和隐藏状态最终的模型比标准的 LSTM 模型要简单,比LSTM少一个门,这样就少几个矩阵乘法,执行的GRU的张量操作较少。

2、优点

循环神经语言模型能够比NNLM前馈神经网络相比,捕捉到了上下文的语义信息,在一定程度上解决了序列的长期依赖问题。

3、缺点

循环神经语言模型能够解决序列的长期依赖问题,但是对于很长的序列(一般长度超过30),L效果也难以让人满意,所以在处理更精确和更长文本的问题上还稍微欠缺。

五、从循环神经语言模型到注意力机制的预训练语言模型

为了更好的捕捉长距离信息,可以探索一种更强的语言模型方法,即引入注意力机制,用来在长文本中刻画词语之间的相关性分配。并引申出了以transformer结构为基石的预训练语言模型。

1、思想

Transformer是由一组编码Encode组件和Decoder组件组成的特征抽取器,编码器获取输入序列并将其映射到表示整个序列的单个潜在向量,然后将该向量传递给解码器,解码器将其取出到所需的目标序列。位置embedding、多头自注意力机制是该模型的两个重要特征。

其中,Self-Attention机制,不采用RNN的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息,多头注意力机制可以捕获单词之间的多种多维度相关系数;

上面说到,ELMO通过使用两个双层双向LSTM进行编码,并以已知前文预测下文的单词的标准语言模型为目标函数。

到了后来,OpenAI团队则在此基础上提出了GPT(Generative Pre-Training)预训练语言模型。

改进点包括:使用更强大的利用自注意力(self-attention)机制的Transformer解码器(即Transformer的Decoder部分)作为特征抽取器,Decoder使用Masked Multi Self Attention 屏蔽了单词的后面内容,所以是现成的语言模型,这是实现单向的关键,也是GPT作为生成式模型的重要原因;只选用利用上文预测下文进行单向语言训练。

GPT语言模型都是采用单向语言模型来学习的语言表示问题,并不能充分利用到双向信息,

因此,BERT进一步使用了基于双向的训练方法,并在GPT和ELMO的基础上做了多种改进。

例如:采用Transformer编码器(与解码器不同,模型所有上下层全部互相相连);

提出遮挡语言模型(MLM),即在输入的词序列中,随机的挡上15%的词,然后预测挡上的这些词,如此一来,MLM可以从任何方向去预测这些挡上的词,真正实现双向,这一想法与完形填空的思想很类似;

此外,提出预测下一个句子(NSP)任务,即针对传统语言模型并没有对句子之间的关系进行学习的问题,两个任务同时训练,整个预训练的目标函数就变成了两个任务的取和求似然。

2、优点

引入注意力机制的预训练语言模型,能够比NNLM解决序列的长期依赖问题,并且能够捕捉出更丰富的上下文特征,这在现有的方法里最程度地缓解了上述ngram语言模型的稀疏性、泛化性以及长依赖性不足的问题。

Bert预训练语言模型还进一步推出MML语言模型和其他任务一起训练,进行了多样化的延伸,意义也十分重大,使得捕捉到的知识信息越来越丰富。

3、缺点

众所周知,对于工业落地来说,参数太多,模型复杂度高,模型太重,训练成本高以及黑盒程度加深是当前预训练语言模型的劣势。

总结

统计语言模型语言模型(Language Model),是当前非规则自然语言处理的根基。

本文主要介绍了语言模型的简单发展脉络,其本质目标没有变,都在估算P(wi|w1,w2,...,wi−1)。

先后出现的ngram语言模型,nnlm前馈神经语言模型,循环神经语言模型,并最终形成当前大火的Bert预训练语言模型都是有脉络可寻的,都是为了逐步解决前者的不足而展开的。

本文从思想,优点和缺点三个方面进行了论述,从中我们可以到一个个典型的问题,以及问题的解决史,这一点是引人深思的。

本文受到参考文献的启发,感谢前人整理的工作。

参考文献

1、https://zhuanlan.zhihu.com/p/52061158
2、https://zhuanlan.zhihu.com/p/48463579
3、https://www.cnblogs.com/robert-dlut/p/9824346.html

最近文章

EMNLP 2022 和 COLING 2022,投哪个会议比较好?

一种全新易用的基于Word-Word关系的NER统一模型,刷新了14种数据集并达到新SoTA

阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果


下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!  后台回复【五件套】
下载二:南大模式识别PPT  后台回复【南大模式识别】

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

整理不易,还望给个在看!

NLP技术基石:从N-gram统计语言模型到BERT预训练模型演变史概述相关推荐

  1. Day03『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取

    Day03 词法分析作业辅导 本教程旨在辅导同学如何完成 AI Studio课程--『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取 课后作业. 1. 更换预训练模型 在PaddleNLP ...

  2. 【NLP】图解 BERT 预训练模型!

    作者:张贤,哈尔滨工程大学,Datawhale原创作者 本文约7000字,NLP专栏文章,建议收藏阅读 审稿人:Jepson,Datawhale成员,毕业于中国科学院,目前在腾讯从事推荐算法工作. 结 ...

  3. NLP专栏|图解 BERT 预训练模型!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:张贤,哈尔滨工程大学,Datawhale原创作者 本文约7000字 ...

  4. 【NLP】人大团队研究:面向文本生成,预训练模型进展梳理

    文本生成是 NLP 中最重要且颇具挑战性的任务之一.近年来,预训练语言模型 (Pretrained Language Models ,下文简称 "PLM") 的范式,极大地推动了该 ...

  5. 预训练模型在金融 NLP场景下的应用

    本文根据澜舟科技创始人兼CEO周明在「澜舟NLP分享会」上的演讲整理,介绍了大模型技术在金融NLP场景的应用,以及澜舟的实践. 近三年来,大规模预训练模型深入应用于金融场景中,大幅度地提升了业务系统的 ...

  6. NLP预训练模型综述

    文章目录 文章 介绍 背景 2.1语言表示学习 非上下文词嵌 2.2 神经上下文编码器 2.2.1 序列模型s 2.2.2 非序列模型 2.2.3 分析 2.3 为什么预训练? 2.4 NLP的PTM ...

  7. 8种优秀预训练模型大盘点,NLP应用so easy!

    https://www.toutiao.com/a6674855848902132235/ 大数据文摘出品 编译:李雷.蔡婕 如今,自然语言处理(NLP)可谓遍地开花,可以说正是我们了解它的好时机. ...

  8. bert 是单标签还是多标签 的分类_搞定NLP领域的“变形金刚”!手把手教你用BERT进行多标签文本分类...

    大数据文摘出品 来源:medium 编译:李雷.睡不着的iris.Aileen 过去的一年,深度神经网络的应用开启了自然语言处理的新时代.预训练模型在研究领域的应用已经令许多NLP项目的最新成果产生了 ...

  9. NLP算法面试必备!史上最全!PTMs:NLP预训练模型的全面总结

    预训练模型(Pre-trained Models,PTMs)的出现将NLP带入了一个全新时代.2020年3月18日,邱锡鹏老师发表了关于NLP预训练模型的综述<Pre-trained Model ...

  10. PTMs:NLP预训练模型的全面总结

    PTMs:NLP预训练模型的全面总结 转自:https://zhuanlan.zhihu.com/p/115014536 预训练模型(Pre-trained Models,PTMs) 的出现将NLP带 ...

最新文章

  1. 华为IPSEC-×××-典型配置举例1-采用手工方式建立IPsec 安全隧道
  2. js实现模态框点击空白关闭
  3. 国办发明电〔2020〕27号:国务院办公厅关于2021年部分节假日安排的通知
  4. 怎么把程序内部坐标转为屏幕坐标_全网最详细CNC加工中心程序代码大全!
  5. python获取mysql中的数据供js调用_详解js文件通过python访问数据库方法
  6. [芯片] 2、接口技术·实验二·定时/计数器8253
  7. -webkit-有意思的属性
  8. Ubuntu下设置root用户
  9. Visual Studio 最常用的13个快捷键
  10. 十大门店进销存管理系统软件测评,秦丝长年稳居榜首
  11. php判断客户端是否支持cookie,检查是否启用了cookie
  12. sql server日期时间转字符串
  13. 配置 nginx server 出现nginx: [emerg] root directive is duplicate in /etc/nginx/server/blogs.conf:107...
  14. Illegal invocation 解决方法
  15. android之设置app背景图片
  16. 粉丝福利,抽5本《新程序员》004期免费送
  17. 阿里云编码规范答案_令人沮丧的答案是“我如何开始学习编码?”
  18. [轻量化语义分割] Rethinking BiSeNet For Real-time Semantic Segmentation(CVPR2021)
  19. 用好手机上的一款便捷的便签,快速记录我们的想法
  20. css,div在线编辑器(换成html就OK了)

热门文章

  1. mac 安装php7.4
  2. P3802 小魔女帕琪
  3. Python学习笔记day10
  4. Windows 8 页面应用测试(2)
  5. Microsoft Office 2008 for Mac Service Pack 1 更新后无法启动程序问题解决方案
  6. java day01【前言、入门程序、常量、变量】
  7. 『MXNet』第四弹_Gluon自定义层
  8. zTree树形控件讲解
  9. Android开发人员不得不收集的代码(持续更新中)
  10. Codeforces Round #352 (Div. 1) B. Robin Hood