共计 4968 个字符,预计需要花费 13 分钟才能阅读完成。
参考文章:
深度分析常识加强语义示意模型——ERNIE_财神 Childe 的博客 -CSDN 博客_ernie 模型
ERNIE_ERNIE 开源开发套件_飞桨
https://github.com/PaddlePaddle/ERNIE/blob/develop/README.zh.md
1. 背景介绍
近年来,语义示意(language representation)技术的倒退,使得“预训练 - 微调”作为解决 NLP 工作的一种新的范式开始呈现。一个通用的示意能力强的模型被抉择为语义示意模型,在预训练阶段,用大量的语料和特定的工作训练该模型,使其编码海量的语义常识;在微调阶段,该模型会被加上不同的简略输入层用以解决上游的 NLP 工作。晚期较为驰名的语义示意模型包含 ELMo 和 GPT,别离基于双层双向 LSTM 和 Transformer Decoder 框架,而真正让语义示意技术大放异彩的是 BERT (Bidirectional Encoder Representations from Transformers) 的提出。BERT 以 Transformer Encoder 为骨架,以屏蔽语言模型 (Masked LM) 和下一句预测(Next Sentence Prediction)这两个无监督预测工作作为预训练任务,用英文 Wikipedia 和 Book Corpus 的混合语料进行训练失去预训练模型。联合简略的输入层,BERT 提出伊始就在 11 个上游 NLP 工作上获得了 SOTA(State of the Art)后果,即成果最佳,其中包含了自然语言了解工作 GLUE 和浏览了解 SQuAD。
能够看到,用语义示意模型解决特定的 NLP 工作是个绝对简略的过程。因而,语义示意模型的预训练阶段就变得非常重要,具体来说,模型构造的选取、训练数据以及训练方法等因素都会间接影响上游工作的成果。以后的很多学术工作就是围绕预训练阶段而开展的,在 BERT 之后各种语义示意模型一直地被提了进去。
ERNIE(Enhanced Representation through kNowledge IntEgration)是百度提出的语义示意模型,同样基于 Transformer Encoder,相较于 BERT,其预训练过程利用了更丰盛的语义常识和更多的语义工作,在多个 NLP 工作上获得了比 BERT 等模型更好的成果。
我的项目开源地址:https://github.com/PaddlePadd…
该我的项目蕴含了对预训练,以及常见上游 NLP 工作的反对,如分类、匹配、序列标注和浏览了解等。
2. 原理介绍
2.1 Transformer Encoder
<font color=Blue>ERNIE </font> 采纳了 Transformer Encoder 作为其语义示意的骨架。Transformer 是由论文 Attention is All You Need 首先提出的机器翻译模型,在成果上比传统的 RNN 机器翻译模型更加优良。Transformer 的简要构造如图 1 所示,<font color=red>基于 Encoder-Decoder 框架, 其次要构造由 Attention(注意力) 机制形成:</font>
- Encoder 由全同的多层重叠而成,每一层又蕴含了两个子层:一个 Self-Attention 层和一个前馈神经网络。Self-Attention 层次要用来输出语料之间各个词之间的关系(例如搭配关系),其外在体现为词汇间的权重,此外还能够帮忙模型学到句法、语法之类的依赖关系的能力。
- Decoder 也由全同的多层重叠而成,每一层同样蕴含了两个子层。在 Encoder 和 Decoder 之间还有一个 Encoder-Decoder Attention 层。Encoder-Decoder Attention 层的输出来自于两局部,一部分是 Encoder 的输入,它能够帮忙解码器关注输出序列哪些地位值得关注。另一部分是 Decoder 曾经解码进去的后果再次通过 Decoder 的 Self-Attention 层解决后的输入,它能够帮忙解码器在解码时把已翻译的内容中值得关注的局部思考进来。例如将“read a book”翻译成中文,咱们把“book”之所以翻译成了“书”而没有翻译成“预约”就是因为后面 Read 这个读的动作。
在解码过程中 Decoder 每一个工夫步都会输入一个实数向量,通过一个简略的全连贯层后会映射到一个词典大小、被称作对数几率(logits)的向量,再通过 softmax 归一化之后失去以后工夫步各个词呈现的概率分布。
<center><img src=”https://ai-studio-static-online.cdn.bcebos.com/416759620c2a45988b1590d66c99eac20f4beccada2f49b4a0def1f21bb0f9cc” style=”zoom: 100%” align=center /></center>
<center>
图 1 Transformer 的简要结构图 </center>
Transformer 在机器翻译工作下面证实了其超过 LSTM/GRU 的卓越示意能力。从 RNN 到 Transformer,模型的示意能力在一直的加强,语义示意模型的骨架也经验了这样的一个演变过程。如图 2 所示,该图为 BERT、GPT 与 ELMo 的构造示意图,能够看到 ELMo 应用的就是 LSTM 构造,接着 GPT 应用了 Transformer Decoder。进一步 BERT 采纳了双向 Transformer Encoder,从实践上讲其绝对于 Decoder 有着更强的语义示意能力,因为 Encoder 承受双向输出,可同时编码一个词的上下文信息。最初在 NLP 工作的理论利用中也证实了 Encoder 的有效性,因而 ERNIE 也采纳了 Transformer Encoder 架构。
<center><img src=”https://ai-studio-static-online.cdn.bcebos.com/0d030c74aeaa4ab581da491065f38c7f653b9675b00b4a12bf0c633d80df417a” style=”zoom: 100%” align=center /></center>
<center>
图 2 BERT、GPT 与 ELMo</center>
2.2 ERNIE
介绍了 ERNIE 的骨架构造后,上面再来介绍了 ERNIE 的原理。
ERNIE 分为 1.0 版和 2.0 版,其中 ERNIE 1.0 是通过建模海量数据中的词、实体及实体关系,学习真实世界的语义常识。相较于 BERT 学习原始语言信号,ERNIE 1.0 能够间接对先验语义常识单元进行建模,加强了模型语义示意能力。例如对于上面的例句:“哈尔滨是黑龙江的省会,国内冰雪文化名城”
<center><img src=”https://ai-studio-static-online.cdn.bcebos.com/ec4efefebbd0482082650b1ad94283fc5dfdcecf66e04027ba99d5c25a1cc18e” style=”zoom: 100%” align=center /></center>
<center>
图 3 ERNIE 1.0 与 BERT 词屏蔽形式的比拟 </center>
BERT 在预训练过程中应用的数据仅是对单个字符进行屏蔽,例如图 3 所示,训练 Bert 通过“哈”与“滨”的部分共现判断出“尔”字,然而模型其实并没有学习到与“哈尔滨”相干的常识,即只是学习到“哈尔滨”这个词,然而并不知道“哈尔滨”所代表的含意;而 ERNIE 在预训练时应用的数据是对整个词进行屏蔽,从而学习词与实体的表白,例如屏蔽“哈尔滨”与“冰雪”这样的词,使模型可能建模出“哈尔滨”与“黑龙江”的关系,学到“哈尔滨”是“黑龙江”的省会以及“哈尔滨”是个冰雪城市这样的含意。
训练数据方面,除百科类、资讯类中文语料外,ERNIE 1.0 还引入了论坛对话类数据,利用对话语言模式(DLM, Dialogue Language Model)建模 Query-Response 对话构造,将对话 Pair 对作为输出,引入 Dialogue Embedding 标识对话的角色,利用对话响应失落(DRS, Dialogue Response Loss)学习对话的隐式关系,进一步晋升模型的语义示意能力。
因为 ERNIE 1.0 对实体级常识的学习,使得它在语言推断工作上的成果更胜一筹。ERNIE 1.0 在中文工作上全面超过了 BERT 中文模型,包含分类、语义类似度、命名实体辨认、问答匹配等工作,均匀带来 1~2 个百分点的晋升。
咱们能够发现 ERNIE 1.0 与 BERT 相比只是学习工作 MLM 作了一些改良就能够获得不错的成果,那么如果应用更多较好的学习工作来训练模型,那是不是会获得更好的成果呢?因而 ERNIE 2.0 应运而生。ERNIE 2.0 是基于继续学习的语义了解预训练框架,应用多任务学习增量式构建预训练任务。如图 4 所示,在 ERNIE 2.0 中,大量的自然语言解决的语料能够被设计成各种类型的自然语言解决工作(Task),这些新构建的预训练类型工作(Pre-training Task)能够无缝的退出图中右侧的训练框架,从而继续让 ERNIE 2.0 模型进行语义了解学习,一直的晋升模型成果。
<center><img src=”https://ai-studio-static-online.cdn.bcebos.com/e3190a68c16c47f38710cf77ebbf46436f578c1c8b8441b2b8dc7bb3cebe64d3″ style=”zoom: 100%” align=center /></center>
<center>
图 4 ERNIE 2.0 框架 </center>
ERNIE 2.0 的预训练包含了三大类学习工作,别离是:
- 词法层工作:学会对句子中的词汇进行预测。
- 语法层工作:学会将多个句子构造重建,从新排序。
- 语义层工作:学会判断句子之间的逻辑关系,例如因果关系、转折关系、并列关系等。
通过这些新增的语义工作,ERNIE 2.0 语义了解预训练模型从训练数据中获取了词法、句法、语义等多个维度的自然语言信息,极大地加强了通用语义示意能力。ERNIE 2.0 模型在英语工作上简直全面优于 BERT 和 XLNet,在 7 个 GLUE 工作上获得了最好的后果;中文工作上,ERNIE 2.0 模型在所有 9 个中文 NLP 工作上全面优于 BERT。
实现预训练后,如何用 ERNIE 来解决具体的 NLP 问题呢?上面以单句分类工作(如情感剖析)为例,介绍上游 NLP 工作的解决过程:
- 基于 tokenization.py 脚本中的 Tokenizer 对输出的句子进行 token 化,即按字粒度对句子进行切分;
- 分类标记符号 [CLS] 与 token 化后的句子拼接在一起作为 ERNIE 模型的输出,通过 ERNIE 前向计算后失去每个 token 对应的 embedding 向量示意;
- 在单句分类工作中,[CLS]地位对应的嵌入式向量会用来作为分类特色。只需将 [CLS] 对应的 embedding 抽取进去,再通过一个全连贯层失去分类的 logits 值,最初通过 softmax 归一化后与训练数据中的 label 一起计算穿插熵,就失去了优化的损失函数;
通过几轮的 fine-tuning,就能够训练出解决具体任务的 ERNIE 模型。
<center><img src=”https://ai-studio-static-online.cdn.bcebos.com/bf5adbd6c7a540a3b6faa78d53b07f13e08ec70780c24208900bb320df412205″ style=”zoom: 30%” align=center /></center>
对于 ERNIE 更具体的介绍,能够参考这两篇学术论文:
- ERNIE: Enhanced Representation through Knowledge Integration
- ERNIE 2.0: A Continual Pre-training Framework for Language Understanding
本教程不对预训练过程作过多开展,次要关注如何应用 ERNIE 解决上游的 NLP 工作。