4

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

 2 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650429772&%3Bidx=1&%3Bsn=f46aed8ab82e8057663450d36983dd52
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
640?wx_fmt=jpeg

统计语言模型语言模型(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)计算单词序列语句出现的概率:

640?wx_fmt=png

2)预测下一个词出现的概率:640?wx_fmt=png

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

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

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

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

640?wx_fmt=png

1、思想

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

640?wx_fmt=png

如果一个词的出现与它周围的词是独立的,那么我们就称之为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语言模型计算条件概率的方法是简单的用词频做除法然后归一化不同,该方法将所考虑的问题建模后先为其构造一个目标函数,然后对这个目标函数进行优化,从而求得一组最优的参数(即上述的参数量),最后再利用这组参数对应的模型来预测整个句子成立的概率。

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

640?wx_fmt=png

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

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

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

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

640?wx_fmt=png

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

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的实质:上一个时刻的网络状态信息将会作用于下一个时刻的网络状态。

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

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

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

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

640?wx_fmt=png

2、优点

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

3、缺点

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

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

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

1、思想

640?wx_fmt=png

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作为生成式模型的重要原因;只选用利用上文预测下文进行单向语言训练。

640?wx_fmt=png

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

0?wx_fmt=png
AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试自动对联、作诗机、藏头诗生成器,调戏夸夸机器人、彩虹屁生成器,使用中英翻译,查询相似词,测试NLP相关工具包。
343篇原创内容
Official Account
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
640?wx_fmt=jpeg

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

640?wx_fmt=jpeg

阅读至此了,分享、点赞、在看三选一吧🙏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK