目录

  • 1、自然语言表示学习
    • 1.1 什么是自然语言处理(NLP)
    • 1.2 NLP的基础:语言表示
    • 1.3 自然语言处理任务
      • 1.3.1 序列到类别
      • 1.3.2 同步的序列到序列
      • 1.3.3 异步的序列到序列
    • 1.4 NLP的语义组合
    • 1.5 NLP模型演变
    • 1.6 NLP中的三大模型
    • 1.7 注意力机制:
      • 1.7.1 自注意力模型
      • 1.7.3 多头自注意力模型
    • 1.8 Transformer
  • 2、预训练模型
    • 2.1 预训练模型之前
    • 2.2 为什么要预训练
    • 2.3 预训练任务
    • 2.4 典型模型
      • 2.4.1 Bert
      • 2.4.2 SpanBert
      • 2.4.3 StructBert
      • 2.4.4 XLNet
      • 2.4.5 T5
      • 2.4.6 GPT-3
  • 3、预训练模型的扩展
    • 3.1 Knowledge-Enriched PTMs
    • 3.2 Multilingual and Language-Specific PTMs
    • 3.3 模型压缩
  • 4、迁移到下游任务
    • 4.1 选择适当的预训练任务,模型架构和语料库
    • 4.2 选择合适的预训练模型的神经网络层
    • 4.3 预训练模型的参数是否微调
    • 4.4 句子分类变为句子对分类
    • 4.5 集成Bert
    • 4.6 Self-Ensembel and Self-Distillation
  • 5、未来展望
    • 5.1 预训练模型的上界
    • 5.2 预训练模型的架构
    • 5.3 任务定向的预训练和模型压缩
    • 5.4 除了微调之外的知识迁移
    • 5.5 预训练模型的可解释性和可靠性
  • 6、fsatNLP
    • 6.1 为什么要做fastNLP
    • 6.2 开源框架fastNLP
  • 7、参考资料

1、自然语言表示学习

1.1 什么是自然语言处理(NLP)

自然语言≈\approx人类语言,不同于人工语言(如程序语言);

  • 自然语言处理包括语音识别、自然语言理解、自然语言生成、人机交互以及所涉及的中间阶段;
  • 是人工智能和计算机科学的子学科;

NLP的领域大致可以分为以下几块:

在当前大数据时代,NLP中的基础技术,如词法分析、句法分析等不会很重视了,随着现在以数据驱动的方式越来越流行,基础技术在很多时候变得不再那么重要了。

1.2 NLP的基础:语言表示

  • 语言为离散的符号,不同的词构成句子,表达不同的语义;
  • 计算机没有办法直接理解语言,计算机只能从语义层面上对语言进行理解;

如何在计算机中表示语言的语义?

  • 知识库规则

    词的语义直接在知识库进行表示,并且将不同词的组合通过规则进行限制;

  • 分布式表示

    通过向量来表示词的语义,也就是词嵌入(embedding),用低维、压缩的稠密向量对词的语义进行表示;

    词嵌入方法的优点是可以直接对两个不同词进行计算,比如用两个词之间的 距离来计算两者之间的相似度;词嵌入方法的缺点是很难解释空间中这些点具体代表什么含义;

句子嵌入

有了词嵌入可以进一步做句子嵌入:

  • Non-contextual Embeddings:输入的单词序列,映射为其对应的词向量;
  • Contextual Encoder:可以是各种深度学习模型,输出为有上下文关联的词向量表示;
  • contextual Embeddings:带有上下文关联的词表示;
  • Task-Specifc Model:具体的自然语言处理任务;

1.3 自然语言处理任务

在得到字、句子表示之后,自然语言处理任务类型可以划分为:

1.3.1 序列到类别

(1)情感分类

情感分类模型中,模型输入为一个句子“这部电影太糟了”,通过词嵌入模型映射为Embedding之后,送到深度学习模型Encoder之后,输出其对应的情感预测结果;

(2)文本蕴含

比如“北京市中国首都”和“北京是城市”两个句子之间的关系,将两个句子拼接到一起,在两个句子之间加一个分隔符“[SEP]”,将词映射为词向量之后,通过Encoder层之后对其进行预测,得到预测结果;

1.3.2 同步的序列到序列

(1)中文分词

中文分词一般转换为序列标注问题,输出序列中的B表示一个词组的开始,E表示一个词组的结束,S表示单独的一个词,这样可以把单词划分转换为标签问题。

因为标签之间可能存在依赖关系,所以为了获取不同词之间的依赖关系,需要在Encoder上面加一层CRF获取不同词之间的依赖信息。

1.3.3 异步的序列到序列

(1)机器翻译

机器翻译模型的输入端输入“Machine Learning”,经过词嵌入之后传入到Encoder层中得到输入句子的整体表示(向量表示),再把Encoder的输出传输到解码器Decoder中,然后通过自回归语言模型进行解码,最后输出翻译结果“机器学习”;

自回归模型可以简单理解为给定前面的输出,预测当前的输出;比如前面已经输出“机器”,则通过“机器”和Decoder的当前输入预测当前词“学”。

还有一种自编码语言模型,这种方法用作Bert模型中的mask预测中,自编码模型是已知上下文信息。比如已经知道“机器”和“习”,需要预测当前词“学”;

1.4 NLP的语义组合

语言的性质

  • 层次性

    语言虽然由一个序列进行表示,但是语言具有层次性,比如一个动词短语(VP)可能由一个动词(VV)和一个动词短语组成(VP);一个动词短语(VP)可以由一个介词短语和一个动词短语组成(VP);

  • 递归性:语言规则可以递归应用;

  • 序列性:语言句子表现出来是一个序列形式;

语义组合

  • 句子的语义可以词租车定
  • 长程依赖

1.5 NLP模型演变

1.6 NLP中的三大模型

当使用神经网络来处理一个变长的向量序列时,我们通常可以使用以下模型来编码:

  • 卷积模型:通过卷积核进行信息读取整理;
  • 序列模型:同一层模型之间存在信息传递;
  • 全连接图模型:h1h_1h1的上下文表示依赖输入的所有词,这就是全连接,全连接用虚线表示其权重是动态计算的;

1.7 注意力机制:

注意力机制可以分为两步:

  1. 计算注意力分布α\alphaα
    αn=p(z=n∣X,q)\alpha_{n}=p(z=n \mid \boldsymbol{X}, \boldsymbol{q})αn=p(z=nX,q)=softmax⁡(s(xn,q))=\operatorname{softmax}\left(s\left(\boldsymbol{x}_{n}, \boldsymbol{q}\right)\right)=softmax(s(xn,q))=exp⁡(s(xn,q))∑j=1Nexp⁡(s(xj,q))=\frac{\exp \left(s\left(\boldsymbol{x}_{n}, \boldsymbol{q}\right)\right)}{\sum_{j=1}^{N} \exp \left(s\left(\boldsymbol{x}_{j}, \boldsymbol{q}\right)\right)}=j=1Nexp(s(xj,q))exp(s(xn,q))
  2. 根据α\alphaα来计算输入信息的加权平均
    att⁡(X,q)=∑n=1Nαnxn\operatorname{att}(\boldsymbol{X}, \boldsymbol{q})=\sum_{n=1}^{N} \alpha_{n} \boldsymbol{x}_{n}att(X,q)=n=1Nαnxn=Ez∼p(z∣X,q)[xz]=\mathbb{E}_{\boldsymbol{z} \sim p(z \mid \boldsymbol{X}, \boldsymbol{q})}\left[\boldsymbol{x}_{z}\right]=Ezp(zX,q)[xz]

    如上图,有N个输入[x1,x2,...,xN][x_1,x_2,...,x_N][x1,x2,...,xN],给定一个查询qqq,我们希望从输入[x1,x2,...,xN][x_1,x_2,...,x_N][x1,x2,...,xN]中选出与查询qqq最相关的信息。计算查询qqq与每个输入xxx的相似度,再通过softmax函数进行归一化处理,变为符合概率分布的形式,将计算得到的概率分布分别于各自的xxx相乘累加得到最后的输出信息;

1.7.1 自注意力模型


给定序列“The weather is nice today”,假设现在需要知道"The"的上下文表示,"The"有可能需要依赖序列中的非局部信息,因此我们将其与输入的所有词进行链接;为了得到对应每个词的权重,将"The"与其它所有词计算相似度获得对应的权重,最后进行累加得到"The"的上下文向量表示。

以矩阵形式对上面过程进行分析如下:

对于输入XXX,分别使用三个线性变换将其变为QQQKKKVVV,其中QQQKKK用于计算相似度矩阵,表示每个词与其他词的关系,得到相似度矩阵后需要进行缩放点乘softmax处理,图中的VVV用于进行信息的汇总。

这套模型中引入了三套参数,使得模型的学习能力更强;

1.7.3 多头自注意力模型


多头自注意力模型将自注意力模型进行重复叠加操作,得到多组不同的上下文表示,可以理解为在不同空间中的语组关系,将其拼接起来,最后再使用一个参数矩阵WWW将其变换为输入时对应的向量维度。

1.8 Transformer

Transformer:可能是目前为止最适合NLP的模型;

广义的Transformer指一种基于自注意力的全连接神经网络

  • 核心组件:自注意力(self-attention)
  • 仅仅有自注意力还不够(例如没有考虑位置信息),还包括其它操作:
    • 位置编码
    • 层归一化
    • 直连边
    • 逐位的FNN

Transformer的更新方式可以看成图的方式,每一时刻每个位置上都收集到来自其它词的信息

Transformer的完整结构

2、预训练模型

2.1 预训练模型之前

深度学习在自然语言处理中的“困境”

如果要训练一个比较好的NLP模型,需要改变原来的训练方法,即从端到端从零开始学习转变为进行“数据增强”、“迁移学习”、“多任务学习”。

  • 数据增强:引入外部知识,比如增加人工的辅助损失函数等;
  • 迁移学习:在大语料上把数据训练好,然后再迁移到目标任务中;
  • 多任务学习:一个任务的数据可能很少,可以把多个任务的数据拼接到一起进行模型训练;

2.2 为什么要预训练

  • 获得通用的语言表示;
  • 获得一个好的初始化(Hinton在2006年使用玻尔兹曼机初始化深度神经网络);
  • 预训练可以看做一种正则化方法(避免在小数据集上过拟合),由于模型比较复杂,当训练数据较小时很容易导致过拟合;

2.3 预训练任务

预训练带来一个问题,怎么获取大量的预训练语料?主要有以下三种方法:

  • 监督学习 —— 机器翻译有大量语料;
  • 无监督学习 —— 使用语言模型进行预训练,不需要标签信息;
  • 自监督学习 —— 掩码语言模型(masked language model, MLM),掩码语言模型不依赖标注数据,是一种伪监督任务,其目的是学习数据中的可泛化知识;

预训练任务汇总


预训练模型分类体系

2.4 典型模型

2.4.1 Bert


Bert有两个训练任务,第一个任务是预测被mask的单词,第二个任务是句子级任务——句对预测。


上述图片中有两个特殊的地方,在句子输入中添加了[CLS]和[SEP],[SEP]的作用是区分两句话,[CLS]用于捕捉全局信息;

当使用Bert进行分类任务时,直接在Bert上拼接一个分类器就能执行分类任务;

2.4.2 SpanBert

  • 预测一个范围内的所有词;
  • 去除NSP预训练任务;

2.4.3 StructBert

2.4.4 XLNet

2.4.5 T5

2.4.6 GPT-3

3、预训练模型的扩展

3.1 Knowledge-Enriched PTMs


把知识图谱引进预训练模型中,如上图中,右图中的黄色内圈表示文本的全连接的图结构,在完全的图结构中把知识图谱的结构化信息引进来,这样就丰富了预训练模型的信息,除了可以获得文本的上下文信息,也可以获得知识图谱中的信息。

用类似于Bert的训练方式进行训练,如下所示:

3.2 Multilingual and Language-Specific PTMs

Cross-Lingual Language Understanding(XLU)

跨语言模型训练,例如XLM中句子对的前半句为英语句子,句子对中的后半句为法语句子,只需要在输入的时候给不同的句子加上不同的语言标记,如en或者fr;双语句子对中信息是冗余的,可以充分利用双语语料中的信息预测mask的词;

Cross-Lingual Language Generation(XLG)

用类似于序列到序列的方法建模预训练模型,把训练句子中的一部分进行mask,放进Encoder中进行编码,然后在Decoder中将其预测出来;这个模型不同于Bert,Bert只使用Transformer中的Encoder部分,而MASS使用了整个Transformer结构;

可以看到,在MASS模型中,如果仅仅mask一个词,该模型可以近似看做Bert模型;如果把MASS中的所有词进行mask,这时候可以把MASS模型看做一个标准语言模型;

Language-Specific PTMs


原始Bert在进行中文预训练任务时是mask一个一个字,这样丢失了字与字之间的关联信息,ERNIE通过预测一个词捕捉句子中词的依赖关系,其得到的中文预训练模型效果更好;

VL-Bert

VideoBert

  • 将文本和视频对作为BERT的输入,同时Mask词以及图像块

3.3 模型压缩

  • 模型剪枝 —— 去掉一些不重要的参数;
  • 权重矢量化 —— 使用简单的二值数表示参数;
  • 参数共享;
  • 知识蒸馏;
  • 模块替换;

4、迁移到下游任务


在预训练数据集上训练得到一个模型,将得到的模型迁移到下游任务中,这种是sequential transfer learning;

4.1 选择适当的预训练任务,模型架构和语料库

  • 不同的预训练任务有自己的侧重方向,并且对不同的任务产生不同的影响;
  • 预训练模型的结构同样对下游任务很重要;举个例子,bert模型对自然语言理解非常友好,但是对生成语言模型不大友好;
  • 下游任务的数据分布需要和预训练模型的数据分布大体一致;

4.2 选择合适的预训练模型的神经网络层

4.3 预训练模型的参数是否微调

是否微调依赖于具体的任务,在ELMO中不进行微调效果更好,在Bert中进行微调效果更好;

微调策略

  • 多步迁移

    有两种方法,如上图,第一种是蓝色线方法,先预训练,接着在单一目标任务上进行微调;第二种方法是红色线方法,先预训练,然后在多任务数据集上进行微调,接着在单一目标任务上进行微调;
  • 用额外的自适应模块进行微调

4.4 句子分类变为句子对分类

当标签含有语义信息时,将单句(single sentence)分类问题转换为句对(sentence-pair)分类。

4.5 集成Bert


图(a)是将预测结果进行平均;图(b)是将多个Bert的参数进行平均,然后对输入x进行预测;

4.6 Self-Ensembel and Self-Distillation

5、未来展望

5.1 预训练模型的上界

5.2 预训练模型的架构

  • transformer已经被证明是一种有效的预训练模型结构,但是计算效率比较复杂,目前大部分预训练模型都不能处理序列长度大于512的文本;
  • 为预训练模型寻找更有效的模型架构对于捕获更广泛的上下文信息很重要;

5.3 任务定向的预训练和模型压缩

  • 预训练模型与下游任务之间的差异通常在于两个方面:

    • 模型架构
    • 数据分布
  • 较大的差异可能会导致预训练模型的收益微不足道;
  • 任务导向型预训练模型;
    • 模型压缩

5.4 除了微调之外的知识迁移

  • 当前,微调是将预训练模型的知识转移到下游任务的主要方法;

    • 参数无效 ;
  • 从预训练模型挖掘知识可以更加灵活,例如:
    • 特征提取;
    • 知识蒸馏;
    • 数据增强;
    • 将预训练模型作为额外知识;

5.5 预训练模型的可解释性和可靠性

6、fsatNLP

6.1 为什么要做fastNLP


6.2 开源框架fastNLP

7、参考资料

  1. 演讲PPT链接:《自然语言处理中的预训练模型》
  2. 邱锡鹏老师个人github
  3. fastNLP:Github链接
  4. 预训练模型综述论文:《Pre-trained Models for Natural Language Processing: A Survey》

自然语言处理中的预训练模型 —— 邱锡鹏老师的演讲记录相关推荐

  1. 重磅!复旦邱锡鹏老师NLP实战code解读开源!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 今天给大家分享一门很好的NLP入门学习实战仓库,很好,学它!! 一  邱锡鹏老师N ...

  2. 论文阅读笔记:《自然语言处理中的预训练模型》

    Pre-trained Models for Natural Language Processing: A Survey 写在前面: 随着2018年ELMo.BERT等模型的发布,NLP领域进入了&q ...

  3. 复旦大学邱锡鹏教授:NLP预训练模型综述

    ©PaperWeekly 原创 · 作者|王馨月 学校|四川大学本科生 研究方向|自然语言处理 引言 随深度学习的发展,多种神经网络都被应用在 NLP 任务中,比如 CNN.RNN.GNN 和 att ...

  4. ACL 2021 | 复旦大学邱锡鹏组:面向不同NER子任务的统一生成框架

    ©作者 | 刘兴贤 学校 | 北京邮电大学硕士生 研究方向 | 自然语言处理 论文题目: A Unified Generative Framework for Various NER Subtasks ...

  5. 豆瓣评分9.4!跟邱锡鹏教授一起学「神经网络与深度学习」,7月19日开课

    我们经常会在后台收到一些比较简要的技术咨询,描述了是什么任务,发现用BERT粗暴精调效果不好之后,问我们有什么办法可以提升.我们: 在面对第一把梭就失败时,我们通常是这么判断的: 1. 如果效果差的很 ...

  6. 推荐:复旦邱锡鹏教授开源发布的《神经网络与深度学习》

    本文作者:Datawhale 4月7日下午,邱锡鹏教授在知乎上达文称整本书终于写完了,虽然还有很多不足.但先告一段落,不然就得无限期拖延下去.感谢众多热心网友的意见和建议.全书的内容可以从这里(htt ...

  7. 最全中文深度学习入门书:小白易入,课程代码PPT全有 | 复旦邱锡鹏出品

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 入门深度学习的最大阻碍是啥,课程资料太少.难度太大? 可能对于大部分中国AIer来说,语言门槛高过了一座大山.网红课虽好,但是英语听不懂啊. ...

  8. ppt 深度学习绘图_最全中文深度学习入门书:小白易入,课程代码PPT全有 | 复旦邱锡鹏出品...

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 入门深度学习的最大阻碍是啥,课程资料太少.难度太大? 可能对于大部分中国AIer来说,语言门槛高过了一座大山.网红课虽好,但是英语听不懂啊. ...

  9. 复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 超全预训练语言模型概览,入门学习.搭建知识体系.找文献资料.找资源代码,这里有 N ...

最新文章

  1. Socket 阻塞模式和非阻塞模式
  2. [dts]TI-am437x dts
  3. USACO Section 4.2 Drainage Ditches(最大流)
  4. 使用com.alibaba.fastjson.JSONObject构造简单的JSON数据
  5. Windows 编程[11] - WM_SIZE 消息
  6. zoj 3599 Game 博弈论
  7. mysql数据库查询总条数
  8. 信捷PLC跟西门子700IE通信
  9. 牛客 送分啦-QAQ
  10. apache启动失败原因
  11. “真正的”欧洲杯,鸡冻不鸡冻?
  12. PHP后端接入短信接口为用户发送通知短信
  13. Markdown语法笔记
  14. 计算机专业进国企有什么难度,大学毕业后才发现,国企与私企的差距不是一星半点,希望你没选错...
  15. 深入理解立即数与直接寻址
  16. Vim位置标记mark详解
  17. 2022年新消费趋势洞察(护肤篇):时下大热的美妆成分全面复盘
  18. 中国量化融业解金工计机计金领就指
  19. 运放OPA的关键参数,输入偏置电流,输入失调电流,增益带宽积,共模抑制比,是否轨到轨,运放如何选型?
  20. C99中带声明的for语句

热门文章

  1. MySQL参数配置优化
  2. [转]异步性能:了解 Async 和 Await 的成本
  3. 购买原装三星内存注意事项
  4. oracle 内核参数设置
  5. Javascript实现导出word - jquery jquery.wordexport.js 实现导出word
  6. docker 守护进程
  7. Python第七章-面向对象高级
  8. UWP通过机器学习加载ONNX进行表情识别
  9. SpringBoot 动态创建多定时任务
  10. 知网直接下载pdf文档