面向自然语言处理的词向量模型研究综述
2023-12-30安俊秀蒋思畅
安俊秀,蒋思畅
(成都信息工程大学 软件工程学院,四川 成都 610225)
0 引 言
自然语言处理主要研究实现人与计算机之间用自然语言进行有效通信的理论方法及应用,它的一般流程如图1所示。
图1 NLP的一般流程
语言的数据称为语料库(Corpus),特征工程指的就是将自然语言转换成词的特征向量(简称词向量)的处理过程,因为词是自然语言中表示语义的最小单位。词向量的好坏直接决定了任务模型的性能高低,因此NLP的特征工程是关键的一步,为此构建、训练针对词向量的模型是最优解法。
词向量的发展过程大致分为“规则-统计-深度学习”三个阶段[1]。20世纪50至70年代,学者们用电脑模拟人脑,结果是一无所获。70年代后,研究者们重新审视这个问题,提出了基于统计和数学模型的方法,加之机器学习的快速发展,NLP领域终于有了实质性的突破。进入21世纪后,Bengio等人[2]在2003年提出的NNLM模型首次采用了神经网络来训练词向量,为研究者们打开了新的思路。Hinton等人[3]在2006年首次提出了深度学习的概念,将人工智能领域的研究推向了高潮,随后一系列经典的词向量模型被陆续提出,尤其是预训练技术成为主流的2018年,其训练出的词向量在大多数NLP的下游任务中都表现出了优异的性能,为后续发展带来了更多可能性。
预训练技术来源于迁移学习[4],最初应用在计算机视觉(Computer Vision,CV)领域,大获成功后被应用到NLP领域。其本质是利用海量数据通过无监督学习,更准确地说是自监督学习的方式去训练一个模型,得到数据的通用特征,然后通过微调(Fine Tune)词向量模型的参数以便应用于不同的任务模型。因此,词向量模型、任务模型越来越多地被称为预训练模型、下游任务。
1 现代词向量模型
1.1 NNLM
针对语义问题,Harris[5]提出了分布假说:“上下文相似的词,其语义也是相似的”,Firth[6]提出了语言学概论,完善了这一假说,指出“词的语义由其上下文决定”。针对编码稀疏、维数灾难[7]问题,Hinton[8]提出了分布式表示方法,指将高维稀疏向量嵌入(也称映射)到低维稠密向量中,该方法将信息分布在向量的各个维度上(即值不为0),此时词向量也称为词嵌入(Word Embedding),具有更强的表示能力。
为了解决语义和维度这两个问题,Bengio等人借鉴了基于统计的N元模型[9](N-Gram Model)的思想,提出了神经网络(概率)语言模型(Neural Network (Probabilistic) Language Model,NNLM)。
语言模型指在给定若干个词的情况下预测下一个词。假设S是某个句子,由词w1,w2,…,wn组成,其中n表示句子长度。S出现的概率等于每个词出现的条件概率的乘积,计算式表示为:
P(S)=P(w1,w2,…,wn)=
P(w1)…P(wn|w1,w2,…,wn-1)
(1)
式(1)的缺点很明显,位置越靠后的词的概率越难计算,涉及到的变量太多。N元模型为了简化问题,利用了N-1阶马尔可夫假设,即某个词wi出现的概率仅与它前面的N-1个词有关,计算式表示为:
(2)
N的取值一般为1,2,3,对应的语言模型分别称为一元模型(Unigram)、二元模型(Bigram)、三元模型(Trigram),N取更大的值时,性能提升并不显著,却对资源的耗费愈发严重,因此N>3的情况极少。因此上下文的跨度不能太大,否则会出现长距离依赖[10](Long Distance Dependency)问题。
NNLM将深度学习的思想融入语言模型中,其结构依次为输入层(Input Layer)、嵌入层(Embedding Layer)、隐含层(Hidden Layer)、输出层(Output Layer)。模型训练好后,词向量就是输入与嵌入矩阵的乘积。这直接启发了后来的研究。与N元模型不同的是,NNLM中N可以取更大的值,减小了长程依赖性的影响。
1.2 Word2Vec
NNLM所产生的词向量,其语义只是基于上文,没有包含下文,同时定长向量使得计算复杂度并不低,Google团队对此提出了Word2Vec[11-12],包含两种模型,结构依次为输入层、隐含层、输出层。连续词袋模型(Continuous Bag-of-Words,CBOW)的思想是通过上下文词去预测中心词,跳元模型(Skip-Gram)的思想与之相反,通过中心词去预测上下文词。上下文词的数量需要人为设置。
为了减小损失函数的计算复杂度O(|V|)(|V|指词表中词的数量),Google提出了两种训练方式:负采样(Negative Sampling)和层次(Hierarchical)Softmax。负采样指的是将预测的词w0记为正例,然后根据词频和概率从词表中抽取K个词wi(i=1,2,…,K)作为负例,训练目标就成了最大化似然函数,如式(3)所示。
(3)
其中,context(w0)表示词w0的上下文词,P()是Sigmoid函数。这使得计算复杂度O(|V|)降到了O(K)。
层次Softmax指根据词频对词表构建哈夫曼树(Huffman Tree),每个叶节点表示一个单词,且从根节点到叶节点只有一条路径,因此不再需要像普通的Softmax去遍历词表,而是计算从根到对应叶的路径的概率,计算复杂度便从O(|V|)降到了O(log|V|)。
需要注意的是,在应用时,CBOW模型使用上下文词向量作为词表示,而Skip-Gram模型使用中心词向量作为词表示。
1.3 FastText
Facebook团队在Word2Vec的基础上提出了基于CBOW的FastText模型[13]和基于Skip-Gram的FastText模型[14](分别简写为CBOW-FT,SG-FT)。CBOW-FT的网络结构与CBOW的网络结构是相似的,但训练任务是对文档进行分类,属于监督学习。在模型中,文档的所有词都会作为输入,并且增加了词级的N-Gram输入(以“I am fine”的Bigram为例,会增加“I am”、“am fine”两个输入)。输入层会对两者都进行嵌入处理,考虑到N-Gram的数据量庞大以及存在重复的情况,作者做了哈希处理。
SG-FT的网络结构和训练任务与Skip-Gram是一样的。输入层除了独热编码的词向量以外,还增加了字符级的N-Gram嵌入(也称子词嵌入(Subword Embedding))输入(以“word”的Trigram为例,会增加“
作者为了减小损失函数的计算复杂度,同样采用了层次Softmax的训练方式。
FastText模型遇到未知的词时能够直接使用N-gram嵌入向量的和去表示该词,提高了容错能力,这是Word2Vec所不具备的。另外一点,FastText,正如其名,速度非常快,通常能够将耗时单位为小时甚至是天的训练时间大幅缩短到分钟之内。
1.4 GloVe
对于语义问题,Word2Vec与FastText仅利用了窗口范围内的局部上下文的信息,Pennington在此基础上将语料库中关于词的全局共现统计信息考虑进来,提出了GloVe[15](Global Vectors for Word Repre-sentation)。需要注意的是,该模型不属于神经网络语言模型,而是基于矩阵分解的方式。
作者用词的共现矩阵来表示全局信息,假设矩阵为X,那么Xij表示词wj出现在词wi的上下文的次数,Xi=ΣkXik表示所有词出现在词wi的上下文的次数。对于词wj出现在词wi的上下文的概率,用式子表示为:
P(wj|wi)=Xij/Xi
(4)
计算该矩阵需要遍历一次语料库,虽然计算量较大,但这仅是一次性的前期投入成本。
在Skip-Gram模型中,词wj出现在词wi的上下文的概率是以Softmax的方式计算的,如式(5)所示。
(5)
其中,W表示词的数量。
结合式(4)与式(5),作者提出了最小二乘法的损失函数,用式子表示为:
(6)
为了降低计算复杂度,作者用了3种方法:丢弃计算概率用的归一化因子;对概率取对数;引入权重函数,如式(7)所示。
(7)
其中,α,xmax为超参数。
最终的损失函数如式(8)所示。
(8)
其中,bi,bj是偏置项。
26岁赚到人生第一桶金之后,他决定收权,将加盟改为直营,收权的方式则是“一刀切”,想留下来的,产权全部回购,否则走人。
全局对数双线性回归模型的名称便是由此而来。GloVe模型结合了矩阵分解和Word2Vec的优势,能够充分利用全局统计信息和局部上下文信息,训练速度更快,且词向量拥有了更丰富的语义信息。
1.5 ELMo
Word2Vec,FastText,GloVe模型在语义上还存在一个缺陷:一个词只有一种词向量,即仅能表示词的一种含义。由此这些模型又被称为静态词向量模型。为了使多义词在不同的语境下能够拥有对应的词向量,学者们将研究重点放在了动态词向量模型上,Peters等人提出的EMLo[16](Embeddings from Language Models)便是一个典范,其网络结构依次为输入层、隐含层、输出层。
输入层是预训练的静态词向量,一般使用上文介绍的模型,但作者用的是Char-CNN与LSTM相结合的模型[17]。隐含层的双向LSTM用来从前后两个方向去“阅读”文本(即综合上下文的信息),其层数为2L(L是超参数)。正向LSTM的任务是给定前文,预测下一个词,反向LSTM的任务是给定后文,预测上一个词,两者目标都是最大化预测概率,如式(9)所示。
(9)
为了降低计算复杂度,作者对概率取了对数。ELMo的思想体现在输出层,该层会对双向LSTM所训练出的隐含输出(hidden output,简写为h)和输入层进行组合得到词向量,如式(10)所示。
(10)
其中,hi,0是输入层的词向量,hi,j(j≠0)是双向LSTM的h拼接起来的向量。对于不同的下游任务,作者认为可以再有针对性地微调词向量Ti,如式(11)所示。
(11)
其中,Θtask表示模型参数,stask是归一化的Softmax权重,γtask是缩放系数。
可以看出,ELMo的本质其实就是根据完整的文本信息对静态词向量做调整,使词向量能够准确反映出当前语境下的含义,这便有效地解决了一词多义的问题。在自然语言处理领域的6个典型下游任务的数据集上全面刷新了最优成绩。
1.6 预训练语言模型
ELMo使用大规模无监督语料进行预训练和在下游任务中微调的做法为词向量模型的研究提供了全新思路,成功证明了预训练和微调的可行性。基于此思想,NLP领域的学者大展身手,提出了更加优秀的动态词向量模型,尤其是OpenAI团队的GPT[18](Generative Pre-Training)与Google团队的BERT(Bidirectional Encoder Representations from Transfor-mers[19])。两模型都是基于Transformer[20]改进得来的。
1.6.1 GPT
GPT是基于Transformer的解码器改进而来的,属于自回归(Auto-Regressive)语言模型,也称单向语言模型,即只能利用上文的信息去生成下文。这类模型适合自然语言生成类(Natural Language Generation,NLG)的下游任务,如问答系统。
在预训练阶段,GPT的目标是最大化预测概率,如式(12)所示。
(12)
其中,N表示某文档中词的数量,k表示窗口大小。
在微调阶段,GPT的目标仍是最大化预测概率,不同的是此时的数据是有标签的,如式(13)所示。
(13)
其中,x表示文档中的词,共有m个,y表示对应的标签。
为了更好地适应迁移学习,GPT对输入和输出做了精简和通用的设计。对于输入,会添加首尾标记和分隔标记;对于输出,只需要接入全连接层或其它简单结构。
得益于Transformer强大的表征能力,GPT在公布的结果中,一举刷新了自然语言处理领域的9项典型任务。但GPT的不足在于单向,利用不了下文的信息,无法发挥出Transformer的最佳效果。但让人惊奇的是,GPT可以实现一些零样本学习(Zero-Shot Learning[21])的任务。随后为了进一步研究零样本学习,并加强GPT的泛化能力,OpenAI团队提出了GPT-2[22]。进而为了继续增强泛化能力,聚焦于更通用的模型,OpenAI团队提出了规模更加庞大的GPT-3[23],该模型尝试用更少的领域数据,且不再进行微调,训练好后直接应用于下游任务。
GPT,GPT-2,GPT-3的模型结构都是基于Transformer改进而来,创新性并不高,但证明了规模越来越大的语言模型是可行的,只要算力足够强,性能还会不断提升。
1.6.2 BERT
BERT是基于Transformer的编码器改进而来的,属于自编码(Auto-Encoder)语言模型,也称双向语言模型,即能够同时利用上下文的信息。这类模型适合自然语言理解类(Natural Language Understanding,NLU)的任务,比如文本分类。
BERT在模型结构上并无大的改进,其创新性体现在预训练上,不再是之前的模型那样根据上文或下文去预测下一个词,而是掩码语言模型(Masked Language Model,MLM)和预测下一句(Next Sentence Prediction,NSP)两个任务。MLM如同英语考试中的完型填空,模型会预先对15%的词做掩码处理,训练目标便是预测这些词。NSP的提出是为了更高层次地去理解文本,训练目标是判断两个句子的关系,连贯的或是随机的。
BERT将无监督的预训练和有监督的微调应用到深层的双向结构中,弥补了GPT单向的不足,在自然语言处理领域的11项基本任务上都获得了显著的效果提升。BERT可谓是集前期研究大成之作,极大地推动了自然语言处理的发展,成为一个里程碑事件,自此预训练和微调的方法成为了主流。
2 扩展模型
大规模的预训练语言模型都存在参数量、数据量过大的问题,从而导致极大的资源消耗。对此,目前主要的轻量化方法有两种:剪枝(Pruning[24])和知识蒸馏(Knowledge Distillation[25])。
剪枝技术是指通过减少神经网络中的冗余部分,从而达到压缩模型的目的。基于BERT,McCarley等人[26]为提升问答系统的速度,在保证精确度损失最小的情况下裁剪了隐含层和全连接层的参数,另外又研究了针对Transformer的冗余结构的剪枝方法;Michel等人[27]受到门控机制的启发,通过裁剪注意力头加快了BERT约17.5%的速度,且性能在机器翻译和自然语言推理任务上几乎没影响;Gordon等人[28]不同程度地去除掉接近零的参数,发现30%~40%的裁剪程度不会影响精确度;Lan等人[29]提出了ALBERT,对每个注意力层使用同样的权重矩阵,将参数减少至BERTlarge的1/18,速度加快了1.7倍。
知识蒸馏是指将强力的大模型所包含的知识,蒸馏到轻量的小模型中,使得后者能拥有前者的能力,就像教师对学生传道授业解惑,因此大小模型又分别称为教师(Teacher)模型、学生(Student)模型。基于BERT,Sanh等人[30]提出了更小、更快、更廉价、更轻量的DistilBERT,它的规模只是BERT的40%左右,但语言理解能力依然强悍,并且速度加快了约60%;Jiao等人[31]在预训练和微调两个阶段都进行蒸馏,实现了TinyBERT,它不仅掌握到了通用知识,还学到了特定任务的知识;Sun等人[32]只在输出层进行蒸馏,并提取出教师模型的中间层的知识输入给学生模型,最终只损失了些许性能。
为了使模型学习出更准确的语义表示,除了所给文本的上下文语境之外,加入外部知识是必要的。对此,百度团队提出了ERNIE[33]、清华大学团队提出了ERNIE(THU)[34],两模型的结构与BERT基本一致,区别在于BERT是对字进行掩码,而ERNIE是对词进行掩码,并且在预训练阶段将知识图谱的信息实体整合到模型中,要求模型同时汇聚上下文和先验知识的信息;Liu等人[35]提出了K-BERT模型,将各个领域的下游任务的知识整合起来进行预训练;Peters等人[36]提出了KnowBERT模型,一种将先验知识嵌入到模型中的通用方法。
3 应用现状
对GPT-3进行改进和优化得到GPT-3.5后,进一步地,受InstructGPT[37]的启发,OpenAI团队通过专业的人工标注训练数据和来自人类反馈的强化学习方法(Reinforcement Learning from Human Feedback,RLHF)调整模型参数,让GPT-3.5具备了更加逼真、自然的语言能力。基于GPT-3.5开发的ChatGPT,代表着自然语言生成领域的巨大突破,使得计算机能够与人类进行自然语言交互,任何领域的问题都可以解答,类似于百科全书,还能实时学习新的知识。一经推出便引起了全社会的极大关注,具有革命性的意义,让人们不得不重新思考人工智能的发展及其影响。
在ChatGPT之后,学术界、工业界迅速意识到了通用大模型的主流趋势,纷纷加入到了对该方向的研究。大模型的有复旦大学的MOSS、清华大学的ChatGLM、百度的文心一言、阿里的通义千问、亚马逊(Amazon)的Titan等,小工具的有ChatPDF,ChatDOC,ChatPPT,ChatExcel,ChatPaper,各种AI问答机器人等。
遵循GPT,GPT-2,GPT-3和GPT-3.5的研究路径,OpenAI团队提出了更加复杂和强大的GPT-4[38]。与ChatGPT相比,GPT-4具有以下优势:接受图像作为输入,具有多模态能力;能够处理超过25 000个词的超长文本;实际应用中更具创造性和技术性;引入了更多的人工反馈并实时监控,保证安全性。
4 结束语
从20世纪50年代,自然语言处理取得了长足的发展,该文概述了主要成果,并介绍了近些年的扩展、改进和应用现状。当前存在的挑战在于语料、规模和安全三方面:获取大规模且高质量的语料非常困难,数据标注是必需的;规模不断增大,模型更加复杂和黑盒化,训练和部署需要耗费大量的能源和资源,其预测结果和内部决策过程也难以解释;科研人员需要及时维护以严防恶意攻击和恶意内容,同时需要遵循相关法律和标准,避免产生危害。
未来的研究既会致力于解决语料、规模、安全的问题,也会加快实践多模态的思想,并结合其它领域共同发展,单模态、单领域信息的局限性无法避免,将图像、文本、语音、视频等信息综合起来学习,势必会取得更大进展。