1、1背景自然语言处理(英语:Natural Language Process,简称NLP)是计算机科学、信息工程以及人工智能的子领域,专注于人机语言交互,探讨如何处理和运用自然语言。自然语言处理的研究,最早可以说开始于图灵测试,经历了以规则为基础的研究方法,流行于现在基于统计学的模型和方法,从早期的传统机器学习方法,基于高维稀疏特征的训练方式,到现在主流的深度学习方法,使用基于神经网络的低维稠密向量特征训练模型。最近几年,随着深度学习以及相关技术的发展,NLP领域的研究取得一个又一个突破,研究者设计各种模型和方法,来解决NLP的各类问题。下图是Young等1统计了过去6年ACL、EMNLP、EACL和NAACL上发表深度学习长篇论文的比例逐年增加,而2018年下半场基本是ELMo、GPT、BERT等深度学习模型光芒四射的showtime,所以本文会将更多的笔墨用于陈述分析深度学习模型。机器学习是计算机通过模式和推理、而不是明确指令的方式,高效执行指定任务的学习算法。贝叶斯概率模型、逻辑回归、决策树、SVM、主题模型、HMM模型等,都是常见的用于NLP研究的传统机器学习算法。而深度学习是一
2、种基于特征学习的机器学习方法,把原始数据通过简单但非线性的模块转变成更高层次、更加抽象的特征表示,通过足够多的转换组合,非常复杂的函数也能被学习。在多年的实验中,人们发现了认知的两个重要机制:抽象和迭代,从原始信号,做底层抽象,逐渐向高层抽象迭代,在迭代中抽象出更高层的模式。如何形象地理解?在机器视觉领域会比较容易理解,深度学习通过多层神经网络依次提取出图像信息的边缘特征、简单形状特征譬如嘴巴的轮廓、更高层的形状特征譬如脸型;而在自然语言处理领域则没有那么直观的理解,我们可以通过深度学习模型学习到文本信息的语法特征和语义特征。可以说,深度学习,代表自然语言处理研究从机器学习到认知计算的进步。要讲深度学习,得从语言模型开始讲起。自然语言处理的基础研究便是人机语言交互,以机器能够理解的算法来反映人类的语言,核心是基于统计学的语言模型。语言模型(英语:Language Model,简称LM),是一串词序列的概率分布。通过语言模型,可以量化地评估一串文字存在的可能性。对于一段长度为n的文本,文本中的每个单词都有通过上文预测该单词的过程,所有单词的概率乘积便可以用来评估文本存在的可能性。在实践中
3、,如果文本很长,P(w_i|context(w_i)的估算会很困难,因此有了简化版:N元模型。在N元模型中,通过对当前词的前N个词进行计算来估算该词的条件概率。对于N元模型。常用的有unigram、bigram和trigram,N越大,越容易出现数据稀疏问题,估算结果越不准。为了解决N元模型估算概率时的数据稀疏问题,研究者尝试用神经网络来研究语言模型。早在2000年,就有研究者提出用神经网络研究语言模型的想法,经典代表有2003年Bengio等2提出的NNLM,但效果并不显著,深度学习用于NLP的研究一直处在探索的阶段。直到2011年,Collobert等3用一个简单的深度学习模型在命名实体识别NER、语义角色标注SRL、词性标注POS-tagging等NLP任务取得SOTA成绩,基于深度学习的研究方法得到越来越多关注。2013年,以Word2vec、Glove为代表的词向量大火,更多的研究从词向量的角度探索如何提高语言模型的能力,研究关注词内语义和上下文语义。此外,基于深度学习的研究经历了CNN、RNN、Transormer等特征提取器,研究者尝试用各种机制优化语言模型的能力,包括预
4、训练结合下游任务微调的方法。最近最吸睛的EMLo、GPT和BERT模型,便是这种预训练方法的优秀代表,频频刷新SOTA。2模型接下来文章会以循序渐进的方式分成五个部分来介绍深度学习模型:第一部分介绍一些基础模型;第二部分介绍基于CNN的模型;第三部分介绍基于RNN的模型;第四部分介绍基于Attention机制的模型;第五部分介绍基于Transformer的模型,讲述一段语言模型升级迭代的故事。NLP有很多模型和方法,不同的任务场景有不同的模型和策略来解决某些问题。笔者认为,理解了这些模型,再去理解别的模型便不是很难的事情,甚至可以自己尝试设计模型来满足具体任务场景的需求。Basic Embedding ModelNNLM是非常经典的神经网络语言模型,虽然相比传统机器学习并没有很显著的成效,但大家说起NLP在深度学习方向的探索,总不忘提及这位元老。分布式表示的概念很早就有研究者提出并应用于深度学习模型,Word2vec使用CBOW和Skip-gram训练模型,意外的语意组合效果才使得词向量广泛普及。FastText在语言模型上没有什么特别的突破,但模型的优化使得深度学习模型在大规模数据的
5、训练非常快甚至秒级,而且文本分类的效果匹敌CNN/RNN之类模型,在工业化应用占有一席之地。NNLM2003年Bengio等2提出一种基于神经网络的语言模型NNLM,模型同时学习词的分布式表示,并基于词的分布式表示,学习词序列的概率函数,这样就可以用词序列的联合概率来表示句子,而且,模型还能够产生指数量级的语义相似的句子。作者认为,通过这种方式训练出来的语言模型具有很强的泛化能力,对于训练语料里没有出现过的句子,模型能够通过见过的相似词组成的相似句子来学习。模型训练的目标函数是长度为n的词序列的联合概率,分解成两部分:一是特征映射,通过映射矩阵C,将词典V中的每个单词都能映射成一个特征向量C(i) Rm;二是计算条件概率分布,通过函数g,将输入的词向量序列(C(wtn+1), ,C(wt1)转化成一个概率分布y R|V|,g的输出是个向量,第i个元素表示词序列第n个词是Vi的概率。网络输出层采用softmax函数。Word2vec对于复杂的自然语言任务进行建模,概率模型应运而生成为首选的方法,但在最开始的时候,学习语言模型的联合概率函数存在致命的维数灾难问题。假如语言模型的词典大小为1
6、00000,要表示10个连续词的联合分布,模型参数可能就要有1050个。相应的,模型要具备足够的置信度,需要的样本量指数级增加。为了解决这个问题,最早是1986年Hinton等5提出分布式表示(Distributed Representation),基本思想是将词表示成n维连续的实数向量。分布式表示具备强大的特征表示能力,n维向量,每维有k个值,便能表示 kn个特征。词向量是NLP深度学习研究的基石,本质上遵循这样的假设:语义相似的词趋向于出现在相似的上下文。因此在学习过程中,这些向量会努力捕捉词的邻近特征,从而学习到词汇之间的相似性。有了词向量,便能够通过计算余弦距离等方式来度量词与词之间的相似度。Mikolov等4对词向量的广泛普及功不可没,他们用CBOW和Skip-gram模型训练出来的词向量具有神奇的语意组合特效,词向量的加减计算结果刚好是对应词的语意组合,譬如v(King) - v(Man) + v(Woman) = v(Queen)。这种意外的特效使得Word2vec快速流行起来。至于为什么会有这种行为呢?有意思的是Gittens等10做了研究,尝试给出了理论假设:词映射到
7、低维分布式空间必须是均匀分布的,词向量才能有这个语意组合效果。CBOW和Skip-gram是Word2vec的两种不同训练方式。CBOW指抠掉一个词,通过上下文预测该词;Skip-gram则与CBOW相反,通过一个词预测其上下文。以CBOW为例。CBOW模型是一个简单的只包含一个隐含层的全连接神经网络,输入层采用one-hot编码方式,词典大小为V;隐含层大小是N;输出层通过softmax函数得到词典里每个词的概率分布。层与层之间分别有两个权重矩阵W RV N和W RHV。词典里的每个单词都会学习到两个向量vc和vw,分别代表上下文向量和目标词向量。因此,给予上下文c,出现目标词w的概率是:p(w|c),该模型需要学习的网络参数 。词向量是用概率模型训练出来的产物,对训练语料库出现频次很低甚至不曾出现的词,词向量很难准确地表示。词向量是词级别的特征表示方式,单词内的形态和形状信息同样有用,研究者提出了基于字级别的表征方式,甚至更细粒度的基于Byte级别的表征方式。2017年,Mikolov等9提出用字级别的信息丰富词向量信息。此外,在机器翻译相关任务里,基于Byte级别的特征表示方式B
8、PE还被用来学习不同语言之间的共享信息,主要以拉丁语系为主。2019年,Lample等11提出基于BERT优化的跨语言模型XLM,用BPE编码方式来提升不同语言之间共享的词汇量。虽然通过词向量,一个单词能够很容易找到语义相似的单词,但单一词向量,不可避免一词多义问题。对于一词多义问题,最常用有效的方式便是基于预训练模型,结合上下文表示单词,代表模型有EMLo、GPT和BERT,都能有效地解决这个问题。词,可以通过词向量进行表征,自然会有人思考分布式表示这个概念是否可以延伸到句子、文章、主题等。词袋模型Bag-of-Words忽略词序以及词语义,2014年Mikolov等8将分布式向量的表示扩展到句子和文章,模型训练类似word2vec。关于句子的向量表示,2015年Kiros等提出skip-thought,2018年Logeswaran等提出改进版quick-thought。FastText2016年,Mikolov等7提出一种简单轻量、用于文本分类的深度学习模型,架构跟Mikolov等4提出的word2vec的CBOW模型相似,但有所不同:各个词的embedding向量,补充字级别的
9、n-gram特征向量,然后将这些向量求和平均,用基于霍夫曼树的分层softmax函数,输出对应的类别标签。FastText能够做到效果好、速度快,优化的点有两个:一是引入subword n-gram的概念解决词态变化的问题,利用字级别的n-gram信息捕获字符间的顺序关系,依次丰富单词内部更细微的语义;二是用基于霍夫曼树的分层softmax函数,将计算复杂度从O(kh)降低到O(h log2(k),其中,k是类别个数,h是文本表示的维数。相比char-CNN之类的深度学习模型需要小时或天的训练时间,FastText只需要秒级的训练时间。CNN-based Model词向量通过低维分布式空间能够有效地表示词,使其成为NLP深度学习研究的基石。在词向量的基础上,需要有一种有效的特征提取器从词向量序列里提取出更高层次的特征,应用到NLP任务中去,譬如机器翻译、情感分析、问答、摘要,等。鉴于卷积神经网络CNN在机器视觉领域非常出色的特征提取能力,自然而然被研究者尝试用于自然语言处理领域。回顾CNN应用于NLP领域的过去,好像一段民间皇子误入宫廷的斗争史。CNN用于句子建模最早可以追溯到2008年Collobert等12的研究,使用的是查找表映射词的表征方式,这可以看作是一种原始的词向量方法。2011年Collobert等3扩展了他的研究工作,提出一种基于CNN的通用框架用于各种NLP任务。Collobert3、Kalchbrenner14、Kim13等基于CNN的研究工作,推进了CNN应用在NLP研究的普及。CNN擅长捕获局部特征,能够将信息量丰富的潜在语义特征用于下游任务,譬如TextCNN用于文本分类。但CNN却有长距离依赖问题,研究者尝试用动态卷积网络DCNN来改善这个不足。跟RNN的竞争过程中,CNN不停地优化自身能力,现在CNN的研究趋势是:加入GLU/GTU门机制来简化梯度传播,使用Dilated CNN增加覆盖长度,基于一维卷积层叠加深度并用Residual
《解读NLP深度学习的各类模型》由会员一***分享,可在线阅读,更多相关《解读NLP深度学习的各类模型》请在金锄头文库上搜索。