NLP【08】深度学习模型在NLP中的发展——从Word2vec到Bert的演变过程

上一篇:NLP【07】transformer原理、实现及如何与词向量做对接进行文本分类(附代码详解)

不同版本bert文本分类实现:https://github.com/ttjjlw/NLP/tree/main/Classify%E5%88%86%E7%B1%BB

不同版本bert文本匹配实现:https://github.com/ttjjlw/NLP/tree/main/QAmatch%E6%96%87%E6%9C%AC%E5%8C%B9%E9%85%8D

注:内有数据,可直接运行

目录

一、NLP发展历程

二、深度学习在NLP中发展

bert模型异同点

三、汇总

1、nlp经典论文

2、模型参数汇总

3、效果对比


一、NLP发展历程

1950-1970:基于规则形式语言理论

1970-2010:主流是基于统计

2010-至今:机器学习,深度学习,目前主流是深度学习

二、深度学习在NLP中发展

深度学习在NLP中的任务目标:一是解决文本表示,毕竟计算机只认识0和1,所以必须把文本转换成计算机能识别的;二是解决NLP四大基本任务,生成式任务、分类任务、匹配任务,序列标注。

1、目标一,如何表示文本?

深度学习之前,文字的向量表示的方法有one-hot,tfidf和bm25,one-hot表示的文字之间是独立的,没有关联并且用来表示文字的向量稀疏而维度过高。tfidf和bm25本质是基于词频共现的规律来理解文本,因而无法做到理解文本的语序和多意。

由于上述方法局限性,以及硬件设备性能的提高,研究者就思考能不能机器自动学习向量表示呢?

2001年  Bengio 等人就正式提出神经网络语言模型nnlm,这应该算是第一个用来学习词向量表示的神经网络模型。但是当时NLP的主流还是基于统计,加之,nnlm模型训练词向量的复杂度太高,只能应用于小语料,因此效果也很一般,所以当时未引起广泛的注意。直到12年后,也就是2013年,Google团队发表了word2vec工具,引起NLP领域的巨大轰动,直接标志着NLP告别基于统计和传统机器学习,而彻底迈入深度学习。后来者看的话,会发现,word2vec和NNLM整体思路是很接近,只是做了一些细节优化,但引起的反应却大相径庭,说明的一个技术的诞生是否能成为宠儿还和时代有关啊,当然Google的公关能力也功不可没。不过话说回来,隔了12年深度学习才走了这么一小步,当时的人是多么沉迷统计学习啊,所以说嘛,多数人追捧的未必就好啊,哈哈哈哈哈。

往后的几年,多数研究者在word2vec的基础上或进行优化,或在它的下游任务进行优化,NLP的任务是与word2vec息息相关的。2014年,Jeffrey Pennington等人提出了一种新的词向量学习方法,称为GloVe方法,该方法在word2vec的基础上引进了词频共现的统计特征,算的上是个小小的优化吧。我猜这个人对统计的方法没少研究吧,不过变通还挺快,至少喝到了一些Google的汤(哈哈哈,我胡思乱想的)。当然,多数人在借用word2vec对下游任务,如文本分类,序列标注等进行优化。

词向量有了,也就意味着终于可以把一个个的词输进计算机并让它来理解,文本分类作为四大基本任务中最简单的一个,研究者们自然会想构建一个怎样的模型来实现文本分类呢?很快,大家都会想到早年间(很早很早,具体时间不详)的rnn网络以及1997年,人工智能研究所的主任Jurgen Schmidhuber 提出长短期记忆(LSTM),还有后来的GRU,反正一时间rnn类型的网络层出不穷,取得效果还不错,正当大家都沉迷如何优化rnn类型的网络时, Yoon Kim 从图像中获取灵感,于2014 年8月份提出来textcnn用于短文本分类,相比rnn,textcnn简直不要太好用,又快,效果又好,关键算法还简单,容易理解。当大家都在用word2vec时,facebook生气了,于2016提出fasttext模型用于文本分类,该方法摆脱预训练word2vec,并在word-level的基础上引入char-level的特征,在完成文本分类的同时,还可以获得一套词向量。实践证明,fasttext对于简单的文本分类效果还是不错的,但是训练出来的词向量的效果还是比google的word2vec要差一些的。值得一提的是,在研究机器翻译的时候,研究者们提出了attention思想,谁又能想到,几年之后,这个attention会替代word2vce成为NLP中的主角。特别是,谷歌在 17 年做机器翻译任务的“Attention is all you need”的论文中提出Transformer,直接把attention推向高潮,人们直呼,还可以这样操作?(黑人三问),特别是沉迷优化rnn模型的的人们,因为Transformer几乎可以取代rnn。

总而言之,在2013,word2vec出来之后,一直到2018年,word2vec是预训练模型的主角(忽略glove,谁叫他名气小呢)而attention方法逐渐从一个配角变成一个独挑大梁的角色,而此时,绝大多数人都在关注如何优化rnn,cnn以及怎么rnn与cnn的结合。少有人直接优化预训练模型,当然仍然有部分人意识到word2vec只能得到每个词的静态词向量,也就是每个词有且仅有一个词向量,这明显是和实际情况相悖的,实际情况中,每个词在不同的上下文有不同的意义。

2018年3月份,ELMo[1][2]出世(Deep Contextualized Word Representations),ELMO与word2vec不同,是用来获取动态词向量,实现了不同上下文,相同的词的词向量是不同的。从我的认知来看,ELMO是具有划时代意义的,与glove对word2vec的优化或者Gru对lstm的优化,以及后面新出的一些模型所做的优化相比,ELMO的效果提升是一大截的提升,而且开启了动态词向量先河。在同年,gpt-1模型也诞生了,gpt-1模型的与elmo并无本质差别,只是把elmo中的双向LSTM换成了单向的Transformer,效果得到了不错的提升,但是此时,这种预训练模型仍然没有大火,直到那一刻,也是在同年,Google推出Pre-training of Deep Bidirectional Transformers for Language Understanding 简称BERT,BERT一经发布,便引起轰动,对不熟悉ELMO与GPT模型的人们来说,BERT简直是横空出世,思想超前。而但对于熟悉GPT与ELMO模型的人来说,BERT其实是他们两者的综合版。所以说还是Google的公关厉害啊。ELMO与GPT心里苦啊,风头全是别人的,所以后面又推出了GPT-2和GPT-3。

2018年,bert发布之后,也就算是告别了word2vec时代,而步入了bert时代,从2018年至今(2020-12-30),再做文本分类,文本匹配和序列标注时,多数已经不再用word2vec先预训练词向量,而是直接下载bert模型,然后再根据具体的任务,再在bert后面接网络,如crf,cnn等等。而对于文本生成,一般使用gpt系列模型。2年时间内,针对bert的优化,研究者们做了很多工作,出现了很多优化版的bert如:robert,xlnet,bert-wwm-exa,不断刷新公开数据集的榜单。历史的一幕总是惊人的相似,当年word2vec出来的时候,也是这个场景啊。而5年之后,bert的发布,NLP的发展产生了质的进步。所以我相信在不就的将来,NLP还会引来一个大的进步,毕竟目前NLP的技术仍然无法模拟人类做到智能理解文本及知识推理。我期待有一天,给模型喂入大量的关于足球的语料进行训练,然后问模型,你怎么评价中国足球?模型能给出观点并能进行较为深刻的点评。扯远了,说回正题,那这些优化版的bert具体与bert有哪些不同呢?

bert模型异同点

Model 不同点
albert

1、对embeding进行了因式分解,把参数量从O(V\times H)降低到了(当E远小于H时)

2、Transformer层参数共享

3、增加句间连贯的任务

robert

1、去掉下一句预测(NSP)任务

2、动态mask

3、Byte-Pair Encoding(BPE)是字符级和词级别表征的混合

4、增大batch_size,由256增大到4K

5、增大训练数据,用质量更高数据的训练

bert-wwm

1、wwm 即 Whole Word Masking(对全词进行Mask)

bert-wwm-ext则是在bert-wwm基础上增加了训练数据集同时也增加了训练步数。

xlnet

1、融合自回归LM和DAE LM两者的优点,替换bert的mask,从而解决bert训练阶段和fine-tune阶段不一致的问题

2、Transformer XL替换Transformer ,解决Transformer对于长文档NLP应用不够友好的问题

3、增大训练数据,用质量更高数据的训练

gpt系列

1、GPT用的是transformer中去掉中间Encoder-Decoder Attention层的decoder,且是单向的

2、Bert引入Marked LM和Next Sentence Prediction;而GPT-2只是单纯的用单向语言模型进行训练,没引入这两个

3、Bert不能做生成式任务,而GPT可以。

三、汇总

1、nlp经典论文

NNLM: A Neural Probabilistic Language Model

Word2vec: Efficient Estimation of Word Representations in Vector Space

GloVe: Global Vectors for Word Representation

Textcnn: Convolutional Neural Networks for Sentence Classification

Fasttext: Convolutional Neural Networks for Sentence Classification

Transformer: Attention is all you need

Elmo: Deep Contextualized Word Representations

Gpt: Improving Language Understanding by Generative Pre-Training

Bert: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

Gpt-2: Language Models are Unsupervised Multitask Learners

Robert: A Robustly Optimized BERT Pretraining Approach

Gpt-3: Language Models are Few-Shot Learners

2、模型参数汇总

Model Parameters
bert-base 108M 
bert-large 334M
bert-xlarge 1270M
robert-base 同bert-base
robert-large 同bert-large
RoBERTa-wwm-ext 102M
RoBERTa-wwm-ext-large 325M
albert-base 12M
albert-large 18M
albert-xlarge 59M
albert-xxlarge 233M
xlnet ~110M
xlnet-large ~340M
GPT-2 124M/355M/774M
GPT-3 175M

注:bert-base 在GTX1060 6GB  机器下,max_len=128(忘了,有可能是64),batch_szie=8,可运行

3、效果对比

NLP【08】深度学习模型在NLP中的发展——从Word2vec到Bert的演变过程_第1张图片

注:仅供参考,不同数据集,效果是不一样的,对于比赛可优先使用bert-wwm-ext和robert模型,如果是做生成式优先使用gpt和xlnet,如果要求小模型,考虑albert模型,如果要推理速度快的模型考虑使用distibert模型(albert不能加快推理速度)

你可能感兴趣的:(【NLP】遇见电商❤️,概述/导读❤️,NLP,Bert,word2vec)