搜索引擎优化知识完全手册(ERNIE如何将知识(knowledge)信息融入到模型训练中)
优采云 发布时间: 2022-01-10 09:02搜索引擎优化知识完全手册(ERNIE如何将知识(knowledge)信息融入到模型训练中)
厄尼 1.0
如何将知识信息整合到模型训练中,一种方式是把知识信息作为输入,代价是别人用的时候建立知识库,而fine-tune和pre-train的知识库分布不一致,问题可以解决也随着微调而出现。
另一种方法是将知识信息合并到训练任务中。ERNIE 提出了一种知识掩蔽策略来替代 Bert 的掩码,包括实体级和短语级掩码。实验验证了该策略的有效性。
多级掩码Basic-Level Masking
像bert一样,随机标记被选为掩码。
短语级掩蔽
语法中的短语将被屏蔽,例如:a series of|such as etc。
实体级屏蔽
一些实体会被屏蔽,主要实体包括人、地点、组织、产品名称等。
数据
培训预计包括中文维基百科、百度百科、百度新闻(最新实体信息)、*敏*感*词*。
DLM
其中,*敏*感*词*的Query-Response信息用于DLM训练,即对话语言模型。每个句子都会有一个标记,Q 表示查询,R 表示响应。这个对话embedding其实就是bert中的sentence embedding(segment id)。
影响
实验证明,其提出的两种掩码策略都改善了下游特性。其次,已经证明DLM字符对下游字符有相应的改进。第三,通过完形填空字符,ernie 可以更好地利用单词信息来预测正确的实体。
厄尼 2.0
目前的预训练模型更多地关注单词或句子的共现,并没有很好地利用语料库中的词汇、句法和语义信息,例如实体、语义接近度和话语关系。为了更好地利用训练语料库中的词汇、句法和语义信息,提出了一种ERNIE2.0的多任务预训练框架进行持续学习,实验证明对GLUE的效果是优于 BERT 和 XLNet。
XLNet在论文中提出的方法很有意思,但是在效果提升方面,真的很难说到底是参数量带来的提升还是模型的提升,甚至是调优带来的提升(炼金术) )。看BERT相关的改进方法,只有模型和数据两个方面。添加多语言建模任务实际上是对数据和模型的改进。效果肯定是数据优化带来的提升更加明显。例如,roberta 改进了数据预测处理方面的一些任务改进超过了 XLNet。
ERNIE2.0 帧
基于以上假设,作者提出ERNIE2.0的框架,支持在原有多任务的基础上增加自定义任务和增量预训练,使模型更好地学习词汇(lexical )、句法和语义表示。
个人理解的主要区别在于增加了更多的语言任务。底层模型还是一个Transformer,也可以换成RNN(如果换成RNN图呢)
混帐:
持续的预训练
连续预训练包括两个步骤。首先,通过在大数据上引入先验知识和连续的无监督任务来训练模型,然后逐步添加多个任务来更新 ERNIE 模型。
预训练的第一步,将构建单词感知、结构感知和语义感知的任务。这些任务是无监督或弱监督的信号,可以很容易地从大量的语料库中提取,无需人工标注。
对于第二步的多任务处理,使用持续学习来训练。初始模型首先用一个简单的任务进行训练,然后不断添加新的预训练任务来升级模型。注意添加新任务时,会和之前的任务一起训练,保证模型不会忘记之前学过的东西。基于此,作者认为这种持续学习让ERNIE框架能够不断学习并不断采集知识,而积累的知识保证了模型在新任务上能够更好地学习。
说实话,这不就是走几步就能达到千里吗?
整体框架如下图所示。中间的 Encoder 被各种字符共享。可以是Transformer、RNN,甚至是CNN(随你喜欢,但不需要倒车)。它分为两类损失,一类是句子级损失。 ,一个是词级,后面会介绍。
ERNIE 2.0 模型模型结构
Transformer Encoder:作为底层共享编码层,详情参考:Attention Is All You Need
Task Embedding:底层引入了任务的编码特征来区分不同的任务。不同的任务由唯一的 ID 表示,每个 ID 都有唯一的向量表示(就像词嵌入一样,但这里的 ID 较少)。其他类似于BERT,即Token embedding、sentence embedding、Position embedding。请参见图 3。
看到这里,我对训练方法有点好奇。七项任务是交替训练吗?下面继续阅读。
在此处插入图像描述
单词感知预训练任务
Knowledge Masking Task:与ERNIE1.0类似,使用词、短语、实体级别的掩码LM任务进行训练,专门对整个短语和实体进行掩码,并让模型通过上下文和全局信息来预测这些掩码。字。这个任务是初始化训练模型。
大写预测任务:即大写预测。在英文中,大写字母一般都有特殊的含义,一般都是实体,所以这个任务对识别实体会有帮助。
令牌-文档关系预测任务:这是什么意思,TF?没有以色列国防军?预测一个单词是否在另一个段落中。一般主题词不会出现在其他段落中,但是主题词也可能出现在其他类似的文档中,所以作者期望这样可以让模型具备捕获关键词的能力。
结构感知预训练任务
Sentence Reordering Task:也就是排序任务,怎么建模,哈哈,随机把一段截成[1,m]段,然后随机打乱顺序,怎么预测模型,简单,可能的序列有
k=\sum_{n=1}^{m}n!
有点,这不是一个k分类问题,好吧。然后模型可以学习段落中句子的关系。
说实话,我觉得m比较小就可以了,比如m=2就和BERT中的NSP任务很像,但是m大的话,嘿嘿。不过作者对这个范式的总结还是很不错的。
Sentence Distance Task:如何对句子距离进行建模,仍然是通过分类来完成的,具体来说是一个 3-classification 问题。
语义感知预训练任务
Discourse Relation Task:除了句子的位置距离外,没有语义关系,所以这里是句子之间的语义(实际上是修辞)关系任务。使用Mining discourse markers for unsupervised sentence representation learning中的英文数据来训练模型,中文数据使用周期法自动构建来训练中文模型。
IR Relevance Task:那么真正的语义相似度任务呢,来了,用百度搜索引擎的数据(如果能用google估计会好很多)判断query(第一句)和url title(第二句) ) 关系也是三类。
那么它究竟是如何训练的呢?
持续多任务学习
有两个问题。一种是使用持续学习来学习多个任务,模型不能忘记之前任务的知识。作者使用持续多任务学习的方法,在每次训练一个新任务之前加载之前的模型参数,新的任务会和之前的任务同时训练。
另一个是如何更有效地训练多个任务。通过为不同的任务分配不同的迭代次数N,框架需要在不同的训练阶段自动为每个任务分配N的值,以保证效率并且模型不会忘记之前的任务。
那么问题来了,这个超参数N怎么设置,是炼金术吗?
实验
最重要的数据源,英文数据集来自维基百科、书籍语料库,采集Reddit和Discoery数据[3]作为语义关系数据。中文预计收录百科全书、新闻、对话、信息检索、语义关系和搜索引擎数据。见下表
微调任务
英语自然是一项 GLUE 任务。中文任务收录9个项目:阅读理解、实体识别、NLI、语义相似度、情感分析和QA。
结果自然比之前的一些BERT模型要好。英文数据集 GLUE 结果
中文数据集:
训练方法比较
作者所谓的continual Multi-task Learning分别与MTL和CL进行对比,如图
在三种训练方法中,Continuous Multi-task Learning 是最好的。具体训练为stage1训练任务1,步数为20k,stage2训练任务1和任务2按3:1的比例训练。以此类推,作者任务会是这样的
ReferenceAttention is All You NeedMining discourse marker for unsupervised sentence representation learning[GLUE](