NLP自然语言处理:文本表示总结 - 下篇(ELMo、Transformer、GPT、BERT)

本文详细介绍了NLP领域预训练技术的发展,从Word2vec的局限性到GloVe的改进,再到ELMo、GPT和BERT的创新。ELMo通过上下文调整实现词向量动态变化,GPT利用Transformer进行句子信息建模,BERT则提出了双向Transformer预训练,显著提升了NLP任务的性能。这些模型在预训练和Fine-tuning的两阶段过程中,不断优化词和句子的表示,以适应不同任务需求。
摘要由CSDN通过智能技术生成

上篇:https://blog.csdn.net/qq_35883464/article/details/100042899

再上篇中我们讲解了从one-hotGloVe,都是2014年以前比较火的模型。那么下篇就来探讨最近几年比较火的文本表示,不谈具体推导公式(公式可以看一手论文),只谈解决了问题和最后结果,按照时间顺序和行业发展,详细讲述为什么会出现这个模型,这个模型又有什么缺点,下个模型是如何克服这些缺点的。


文本表示分类(基于表示方法)

  • 离散表示
    • one-hot表示
    • 词袋模型与TF-ID 
  • 分布式表示
    • 基于矩阵的表示方法
      • 降维的方法
      • 聚类的方法
    • 基于神经网络的表示方法
      • NNLM
      • CBOW
      • Skip-gram
      • GloVe
      • ELMo
      • C&W
      • GPT
      • BERT

目录

一、预训练

1.1 预训练在图像领域的应用

1.2 图像与NLP的粗略对应关系

二、ELMO:基于上下文的word-embedding

2.1 ELMO感性认识

2.2 ELMO结构

2.2.1 ELMO第一个阶段:预训练

2.2.2 ELMO第二个阶段:下游任务

2.2.3 ELMO效果分析

三、GPT: Transformer建模句子信息

3.1 Transformer/self-attention介绍

3.2 GPT介绍

3.2.1 GPT第一阶段:预训练pretrain

3.2.2 GPT第二阶段:Fine-tuning

四、BERT:预训练双向Transformer

4.1 深层双向的encoding

4.2 Masked LM

4.3 Encoder:Transformer

4.4 句子级表示

4.4.1 句子级负采样

4.4.2 句子级表示方法

4.5 下游任务接口

4.6 实验效果

参考文献


再上篇我们谈到了Word2vec,这个模型的缺点是缺乏了整体文本和当前词的关系,负样本采用sample的方式会缺失词的关系信息。

从而出现了GloVe,增加了全局的信息(共线矩阵),解决了Word2vec的缺点。这就是GloVe出现的原因。

但是还有一个关键性问题没有解决!

就是一次多意的情况,如果文章中出现了Apple,不知道是指科技公司还是水果,但是他们2个的词向量是一样的。

如何解决这个问题呢,就引出了下面的话题。


一、预训练

 

1.1 预训练在图像领域的应用

预训练过程就是做图像或者视频领域的一种比较常规的做法,能明显促进应用的效果。

上图展示了这个过程,设计好网络结构以后,对于图像来说一般是CNN的多层叠加网络结构,可以先用某个训练集合比如训练集合A或者训练集合B对这个网络进行预先训练,在A任务上或者B任务上学会网络参数,然后存起来以备后用。

假设我们面临第三个任务C,网络结构采取相同的网络结构,在比较浅的几层CNN结构,网络参数初始化的时候可以加载A任务或者B任务学习好的参数,其它CNN高层参数仍然随机初始化。之后我们用C任务的训练数据来训练网络,此时有两种做法:

一种是浅层加载的参数在训练C任务过程中不动,这种方法被称为“Frozen”;

另外一种是底层网络参数尽管被初始化了,在C任务训练过程中仍然随着训练的进程不断改变,这种一般叫“Fine-Tuning”,顾名思义,就是更好地把参数进行调整使得更适应当前的C任务。一般图像或者视频领域要做预训练一般都这么做。

这么做的好处:解决了数据量少而要训练比较深的神经网络的问题

如果手头任务C的训练集合数据量较少的话,现阶段的好用的CNN等网络结构层数很深,几百万上千万参数量算起步价,训练数据少很难很好地训练这么复杂的网络,但是如果其中大量参数通过大的训练集合预先训练好直接拿来初始化大部分网络结构参数,然后再用C任务手头比较可怜的数据量上Fine-tuning过程去调整参数让它们更适合解决C任务,那事情就好办多了。

 

为什么这种预训练的思路是可行的?

目前我们已经知道,对于层级的CNN结构来说,不同层级的神经元学习到了不同类型的图像特征,由底向上特征形成层级结构。

如上图所示,如果我们手头是个人脸识别任务,训练好网络后,把每层神经元学习到的特征可视化肉眼看一看每层学到了啥特征。

第一个隐层学到的是线段等特征,第二个隐层学到的是人脸五官的轮廓,第三层学到的是人脸的轮廓,通过三步形成了特征的层级结构,越是底层的特征越是所有不论什么领域的图像都会具备的(比如边角线弧线等底层基础特征),越往上抽取出的特征越与手头任务相关

正因为此,所以预训练好的网络参数,尤其是底层的网络参数抽取出特征跟具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。

 

1.2 图像与NLP的粗略对应关系

将图像和语言中的处理对象做一个不太严谨的对应。如下图所示,大体上像素类似于语言中的字母;图像中的对象类似于语言中的单词/概念;图像中对象组成的场景类似于语言中的句子表达的语义;视频则类似于语言中的篇章(文章)。

在这种类比下看,NLP在单词层面的处理要比CV中的图像识别简单得多,只需要做一下tokenization、lemmatization、stemming等(中文复杂一些需要额外做自动分词),就可以利用关键词匹配完成很多任务,例如信息检索、文本分类、拼写纠错、情感分析、关键词提取等等。

而由于图像中对象的复杂性和多样性,仅在对象识别层面,甚至特定的人脸识别,还有很多技术挑战。只不过是近年来,由于深度学习对非结构数据的强大表示和学习能力,开始让对象识别走向了实用化。而进入到更高层面,例如面向图像的场景图构建,面向文本的句法语义分析,都需要对复杂语境(上下文)的精准而强大的建模能力。

 

二、ELMO:基于上下文的word-embedding

刚刚说了预训练在图像领域的应用和图像与NLP的粗略对应关系&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值