ERNIE(二妮儿)模型初探
ERNIE 1.0
1.0版本较BERT更改较少,结构如上图,主要表现在三个方面:(1)调整MASK策略;(2)增加异质数据;(3)增加DLM(Dialogue Language Model)任务。
(1)调整MASK策略
BERT中是随机MASK掉15%的words,并尝试在MLM任务中恢复。而ERNIE模型ERNIE的mask的策略是通过三个阶段学习的,在第一个阶段,采用的是BERT的模式,用的是basic-level masking,然后在加入词组的mask(phrase-level masking), 然后在加入实体级别entity-level的mask。
(2)增加异质数据(俺也不清楚异质数据是什么意思)
训练集包括了 - Chinese Wikepedia - Baidu Baike - Baidu news - Baidu Tieba 注意模型进行了繁简体的转化,以及是uncased。
(3)DLM(Dialogue Language Model)
对话的数据对语义表示很重要,因为对于相同回答的提问一般都是具有类似语义的,ERNIE修改了BERT的输入形式,使之能够使用多轮对话的形式,采用的是三个句子的组合[CLS]S1[SEP]S2[SEP]S3[SEP] 的格式。这种组合可以表示多轮对话,例如QRQ,QRR,QQR。Q:提问,R:回答。为了表示dialog的属性,句子添加了dialog embedding组合,这个和segment embedding很类似。 - DLM还增加了任务来判断这个多轮对话是真的还是假的。
ERNIE 2.0
二妮儿plus
模型结构如上图。
从之前模型的进化史可以发现,增加预训练任务可以显著提高模型在NLU上的表现。但是在无限制增加任务也面临一个重要问题:模型会不会在学完新的任务后在旧的任务上变差。传统的多任务学习,是顺序训练每个任务就会造成学完新的任务后在旧的任务上变差,当然就有人提出为每个任务训练一个模型,不过效率太低。因此,百度提出了sequential multi-task learning方案,如图所示:
每一轮中都要同时训练多个任务,百度的解决方案是,框架自动在训练的过程中为每个任务安排训练N轮,具体的:
(1)初始化 optimized initialization 每次有新任务过来,持续学习的框架使用的之前学习到的模型参数作为初始化,然后将新的任务和旧的任务一起训练。
(2)训练任务安排 task allocating 对于多个任务,框架将自动的为每个任务在模型训练的不同阶段安排N个训练轮次,这样保证了有效率地学习到多任务。如何高效的训练,每个task 都分配有N个训练iteration。
参考链接