目录
One Model to Serve ALL:多场景下的星型CTR预估模型STAR
解决问题
网络结构
Scenario-Specific FCN
Scenario-Specific Linear Transformation
Master & Auxiliary Network
LinUCB介绍
Mix_Loss:稀疏高客单场景下成交Loss设计
GMSL: GRU-based Multi-Stage Learning for E-commerce Ranking 电商排序多阶段学习模型
WWW 2022 | CVR 预估去偏:不确定性约束的知识蒸馏模型 UKD
关于LLM
预训练-微调 范式的由来?
「预训练-提示」学习范式:解决 LLM 微调成本高的问题
「预训练-微调-提示」学习范式:特定领域的更优解
「预训练-人工反馈强化学习-提示(Pre-train, RLHF and Prompt)」学习范式
预训练-人工反馈强化学习-微调-提示(Pre-train, RLHF, Fine-tune and Prompt)学习范式
One Model to Serve ALL:多场景下的星型CTR预估模型STAR
解决问题
- 一些场景较小,数据量也比较少,这对复杂CTR模型的学习带来困难。对于数据量少难以拟合的问题,常见的做法是复用大场景的模型,比如首猜或者购后的模型来进行服务。但是这样做没有充分利用本场景数据,造成CTR预估准度不足。
- 为每个场景都单独维护一个模型。由于我们的场景数非常多,每个场景维护独立的模型会对系统资源和人力成本带来巨大的压力和挑战。
网络结构
参数共享
Scenario-Specific FCN
不同场景共享相同的embedding、GRU以及attention等非全连接网络的参数;而对于全连接网络(FCN),首先所有场景会共享一个FCN,同时每个场景有自己独自的一套FCN参数。也就是说,假如有m个场景,最终会有m+1份的全连接参数。
Scenario-Specific Linear Transformation
对进入FCN前的输入(embedding进行aggregation后的结果) 进行了一个分场景的变换 ,具体来说,对于第 个场景,进行如下变换:
Master & Auxiliary Network
多场景建模中,描述场景信息的特征非常重要,这些特征可以直接描述场景差异从而降低模型捕捉场景差异性的难度。然而在通常的建模方式中,重要性更强的场景特征和其余特征混在一起被送进了复杂的神经网络进行学习,这让模型难以自动地学习到场景差异性。为了降低建模难度,我们将场景特征单独拿出来,并用一个小的auxiliary network辅助网络来单独对这部分特征进行建模。最终的预测概率通过如下公式计算得到:
LinUCB介绍
统计学中,我们使用置信区间来度量估计的不确定性/置信性。如我们摇骰子一次得到的点数为2,那么得到均值的估计也是2(实际平均点数是3.5),但显然这个估计不太靠谱,可以用置信区间量化估计的变化性:骰子点数均值为2,其95%置信区间的上限、下限分别为1.4、5.2。
UCB思想是乐观地面对不确定性,以item回报的置信上限作为回报预估值的一类算法,其基本思想是:我们对某个item尝试的次数越多,对该item回报估计的置信区间越窄、估计的不确定性降低,那些均值更大的item倾向于被多次选择,这是算法保守的部分(exploitation);对某个item的尝试次数越少,置信区间越宽,不确定性较高,置信区间较宽的item倾向于被多次选择,这是算法激进的部分(exploration)。
其计算item期望的公式:
其中,x_j是item_j的平均回报,n_j是item_j截至当前被选择的次数,n为当前选择所有item的次数。上式反映了,均值越大,标准差越小,被选中的概率会越来越大,起到了exploit的作用;同时哪些被选次数较少的item也会得到试验机会,起到了explore的作用。
UCB大有可为,但是不能利用上下文信息,不能把工业界常用的大规模特征用进来,楚巍老师在《Contextual Bandits with Linear Payoff Functions》论文中提出UCB的改进版本LinUCB。LinUCB算法做了一个假设:一个Item被选择后推送给一个User,其回报和相关Feature成线性关系,这里的“相关feature”就是context,也是实际项目中发挥空间最大的部分。于是试验过程就变成:用User和Item的特征预估回报及其置信区间,选择置信区间上界最大的item推荐,观察回报后更新线性关系的参数,以此达到试验学习的目的。
在实际的工程应用中,我们发现存在arm间数据分布不均匀的情况,其中部分arm训练数据不够导致参数欠拟合,导致线上给用户ranking的时候,部分arm的分数会整体低于其他arm,对效果影响较大。因此我们增加一个共享arm,所有样本学习一套参数,另外的私有arm则学习自身的参数。这样一方面解决了部分arm欠拟合,一方面解决新arm的冷启动问题。在我们的测试中,这个共享arm离线带来+0.7%的auc提高。
同时,我们学习Linear给每个样本增加一个常数为1的偏置特征,用于学习每个arm的偏置,使得不同arm之间更可比,在我们的测试中,这个优化离线带来+0.16%的auc提高。
总结来,LinUCB有如下优缺点
优点
-
只需要提取用户特征,不需要内容特征
-
无需调参,因为算法求解用的是求解析解的方法
-
可将最终的分数拆分成exploit和explore两个分数,从而可在效果和探索间做权衡
-
效果良好
缺点
-
如果item每天递增,则arm数量不好确定
-
目前仅支持dense特征
Mix_Loss:稀疏高客单场景下成交Loss设计
由于auc不连续性,auc loss是不可导的(如图b所示),因此并不能直接作为神经网络的优化目标,这就导致了模型在训练和测试之间存在gap。为了使模型参数的优化方向尽可能与评价指标一致,本文结合目前学术界对auc maximization的研究[1][2],给出了一种易于实现,可导可近似的mix_loss来代替auc loss。
神经网络的分类模型一般会使用softmax来对输出概率进行归一化处理,在神经网络的分类模型的中最常使用的损失函数是交叉熵损失(cross_entropy)。一般来说使用交叉熵损失会使得梯度的计算更加简单(softmax使用指数运算,cross entropy使用对数来计算loss,对数正好可以抵消掉指数运算带来的复杂性)和有效(梯度与输出概率和ground truth的差成正比),在推荐系统中一般会将点击率/购买率的预估建模成二分类任务,二分类的交叉熵损失函数如下所示:
Area Under ROC Curve (AUC) 是机器学习中一种常见的评价指标,其考虑的是样本预测的排序质量。AUC的计算方式是从一批样本中随机抽取一个正样本和一个负样本,然后使用指示函数判断正样本的输出概率是否大于负样本的输出概率,最后累加起来取平均。AUC是一种对类别不平衡不敏感的评价指标,因此可以很好的衡量一个模型在类别不平衡的数据集上的性能。其损失函数定义如下所示:即考虑每一对正、反例,若正例的预测值小于反例,则计算一个“处罚”,若相等则记0.5个“处罚”。M和N分别表示正样本的数量和负样本的数量。II表示指数函数。
从auc的loss function中可以看出auc loss需要使用一个指示函数来判断一个正例是否排在一个负例前面,而指示函数是一个阶跃函数,阶跃函数是离散的,不可导。因此,想要直接对auc loss进行优化比较困难,目前最常见的做法是将auc_loss近似成一个可导的损失函数,本文针对auc的概念设计了一种易于实现且可替代的损失函数,其函数的定义如下所示:
其中
表示一个样本的几率,也可以看成一个样本被判为正样本的程度。如上述的rank_loss所示,首先计算一个batch size中每一对正负样本的几率之差,然后使用clip函数过滤掉大于0的差值(正样本排在负样本前面不计算loss),最后使用平方损失得到最终的rank_loss。由上述公式可知,rank_loss使用了平方损失代替了指数函数,使得整个loss function变得可导,同时也满足auc的定义,即只计算将负例排在正例前面时候的损失,整个loss function越小越好。由于rank_loss只是一种对auc_loss的近似,其梯度的更新不一定能保证朝着最优(局部最优)的方向更新,因此可以将rank_loss与原始的cross entropy进行混合,得到一个最终用于模型梯度更新的mix_loss,其定义如下所示:
对于混合的方式,可以使用相加或相乘。使用相加的方式混合时可以给两种loss定义不同的权重,通过调节不同的权重可以使得权重更大的loss在梯度更新中占据主导地位。
在计算rank_loss时,一个重要的参数是batch_size的大小,因为神经网络使用基于min batch的SGD来更新模型参数,而rank_loss计算又与样本的数量有关,一般认为batch_size越大rank_loss越接近真实的auc loss,但是batch_size太大时对使用cross entropy更新网络参数也有影响,因此batch_size不能过大也不宜太小,一般认为256、512是比较好的选择。
[1]Michael Natole, Yiming Ying, Siwei Lyu : Stochastic Proximal Algorithms for AUC Maximization ICML 2018: 3707-3716
[2]Mingrui Liu, Xiaoxuan Zhang, Zaiyi Chen, Xiaoyu Wang, Tianbao Yang: Fast Stochastic AUC Maximization with O(1/n)-Convergence RateICML 2018: 3195-3203
[3] Experimental binary cross entropy with ranking loss function · GitHub
GMSL: GRU-based Multi-Stage Learning for E-commerce Ranking 电商排序多阶段学习模型
目前采用将 CTR/CVR 任务结果相乘作为曝光到成交(PV-PAY)的预估,存在以下四个问题:
- 问题一:CTR/CVR 任务量纲不一致,由于两个任务是各自训练的,受 CTR 任务和 CVR 任务的训练样本比例的不一致的影响,输出结果的量纲是不一致,导致连乘后的结果不稳定。
- 问题二:CTR/CVR 任务的推理空间不一致,如上文描述,CVR 任务是在点击样本空间训练的,但是需要在曝光样本空间进行推理,导致 SSB(Sample Select Bias) [12] 问题,在广告 ESMM 的文章中也有介绍。
- 问题三:Error Cascade 问题,目前乘法的方式是任务预测结果相乘,训练中的梯度反向传播中存在比较严重的 error cascade 问题,当链路越长,产生的影响越大。同时在推理阶段,前一阶段带来的错误在后一阶段无法挽回。
- 问题四:由于乘法的对偶性,结果相乘没有体现出多阶段任务的序列性,并且后一阶段的任务并没有充分利用到前一阶段的 Task Specific 特征。
目前常用的 CTR/CVR 多任务学习方式是否能避免 SSB 问题:
第一种是 CTR + CVR 独立训练,结果相乘,损失函数是 l=CrossEntrpy(pctr)+CrossEntrpy(pcvr),对于 0/0 样本,l=∑log(1−pctr),也就是只计算 CTR 任务 loss,且只更新 CTR 任务参数,导致 fcvr(x) 对 0/0 样本的预估不置信,导致 fctr(x)×fcvr(x) 不准确,存在 SSB 问题。
第二种是 CTR + CVR 联合训练,结果相乘 ,对于 0/0 样本,同样是只计算 CTR 任务的 loss ,但是由于 share 底层 embedding ,也能对 CVR 任务有影响,因此能够稍微弱化 SSB 问题。
第三种是 CTR × CVR 联合训练 ,也就是 ESMM 的做法,即用CTR Loss 和 PVPAY Loss 作为辅助任务,利用乘法来影响 CVR Task Specific Layer,但是反向传播会存在梯度问题,我们分三种样本类型分别进行分析 :
- 对于 0/0 样本,CTR + PVPAY 的损失函数为 l=∑inlog(1−pctr)+∑inlog(1−pctr×pcvr),由于 0/0 样本对于 ctr 和 cvr 任务都负样本,对 CTR 和 CVR 任务都有影响,因此能够优化 SSB 问题。
- 对于 1/1 样本,CTR + PVPAY 的损失函数为 l=∑inlog(pctr)+∑inlog(pctr×pcvr)=2×CrossEntrpy(pctr)+CrossEntrpy(pcvr),相当于是放大了 ctr 任务的权重。
-
对于 1/0 样本,对于 CTR 任务是正样本,对于 CVR 任务是负样本,此时 CTR + PVPAY 的交叉熵损失函数为 l=∑inlog(pctr)+∑inlog(1−pctr×pcvr),因此会出现梯度问题
- 对于 CTR 任务来说,∂l/∂pctr=−1/pctr−(−pcvr∗1/(1−pctr∗pcvr))=−1/pctr+pcvr/(1−pctr∗pcvr) ,从下图可以看出,当 pcvr=0 的时候,ctr 的梯度等价于单独训练 ctr 任务,当 pcvr<1 时, ctr 的梯度会在 接近 1 的时候由负转正,存在梯度反向问题
- 对于 CVR 任务来说,∂l/∂pcvr=pctr1−pctr∗pcvr ,cvr 任务单独训练的梯度为 ∂l/∂pcvr=1/(1−pcvr) , 从下图可以看到当 当 pctr 为 1 的情况,cvr 的梯度才等价独立训练 cvr 任务,当 pctr<1 时,存在梯度弥散问题
-
出现上述问题的原因是由于我们平常使用的交叉熵损失函数,适用于单个任务,但是在多任务多目标的情况下不能直接套用。在 1/0 样本的情况下,PV-PAY 的目标函数应该为:,不等价于
综上所述,目前采用 CTR/CVR 任务相乘建模搜索排序曝光到成交的方式,面临的 SSB 问题没有得到完全解决。
为了解决多阶段任务相乘建模带来的问题,本文提出了 GMSL 模型:
GMSL 模型的主要贡献:
- 端到端全链路建模:思路来源于 Cascade R-CNN 对 Faster-RCNN 的改进,我们把搜索推荐的排序问题建模成 Multi-Stage Multi-Task 问题,而非仅仅是 Multi-Task 问题,从曝光直接建模到 GMV,相比单独建模各阶段子任务,利用 GRU 显式建模了多阶段任务的序列关系,可以更充分利用不同阶段任务的 task specific layer 表达,同时避免不同阶段任务结果相乘导致的量纲不一致问题,也不存在反向传播中 Error Cascade 问题。
- SSB 问题优化:在 GMSL 中,各阶段任务作为辅助任务,如 CTR/CVR 任务,能够充分利用各自阶段的监督信号,同时提出 SSB Fix Loss 用于优化 后阶段任务的 SSB 问题。本文认为,SSB 问题在CTR/CVR 乘法建模中存在于无点击样本,即 0/0 样本中,对于有点击信号样本,即 1/1 样本 和 1/0,应该保持各自任务的损失函数不变 l=CrossEntrpy(pctr)+CrossEntrpy(pcvr),因为此时监督信号是明确的,对于 0/0 样本,CVR 任务的监督信号不明确,此时我们取 l=CrossEntrpy(pctr)+CrossEntrpy(pctr∗pcvr),这样能够显式消除 CVR 任务的 SSB 问题,同时也不影响 CTR 任务,因此文中定义的 SSB Fix Loss 形式化为:
- 多任务 Loss 平衡:引入Task Heteroscedastic Uncertainty ,量化各个子任务的不确定性,通过加入噪声变量,能够监督各个任务由于数据分布差距过大带来的 loss 不平衡问题。
WWW 2022 | CVR 预估去偏:不确定性约束的知识蒸馏模型 UKD
本文认为,SSB 问题在本质上讲是未点击样本的转化 label 是 unknown 带来的。
解决思路是考虑对未点击样本提供一个“伪转化 label”:将点击样本(有真实的转化 label)、未点击样本(转化=unknown)分别看作源域、目标域,通过领域自适应(domain adaptation)的思想来给未点击样本打标。当未点击样本得到伪转化 label 后,CVR 任务便可以在全空间上进行训练。基于此,我们从未点击样本中提取知识,提出基于不确定性约束的知识蒸馏框架 UKD (Uncertainty-Regularized Knowledge Distillation) 实现全空间 CVR 预估,其包含一个点击自适应的教师模型和一个不确定性约束的学生模型。教师模型借鉴领域自适应的方式,学习曝光样本的点击自适应表示并生成未点击样本的伪转化标签。生成伪标签后,学生模型利用点击样本和未点击样本进行全空间训练。同时,学生模型引入不确定性建模伪标签中的固有噪声,在蒸馏过程中自适应地削弱噪声的影响以取得更优的预估效果。在多个效果外投场景上的在线实验验证了 UKD 在 CVR、CPA 等指标上获得了显著提升。
关于LLM
基本范式
预训练-微调 范式的由来?
完全监督学习的范式非常不优雅,一方面上游标注数据难搞(记作「短板一」),另一方面因为针对特定任务训练,所以下游使用时只能对特定任务起作用(记作「短板二」)。
思路一:构建 NLP 自己的 ImageNet。针对「短板一」是比较为难的,因为自然语言处理 (NLP) 的最大挑战之一就是训练标注数据的匮乏,这与计算机视觉(CV)领域形成鲜明对比。由于 NLP 任务的多元化,因此研究人员都在面向不同任务领域,各领域也只能有各自的、围绕目标任务的标记数据,很难全领域形成合力构筑统一的、海量的训练标记数据。然而,近些年 NLP 深度学习发展到了比拼大模型的阶段,这些大模型对有标注的大数据量有极度的渴求。填补这个 GAP 的其中一种思路就出现了:搞个 NLP 人的 ImageNet。ImageNet 是包含了超过 1400 万张手动标注图像、涵盖 2 万多个类别的大型图像数据库,这一直让 NLP 领域研究人员非常羡慕搞 CV 的,这些年围绕「NLP 的 ImageNet 时刻到来」的说法不少,也有不少相关研究是朝这个方向努力,但其实一直无法真正和 ImageNet 相提并论。
思路二:设计一套免标注的训练方法。仍然是沿着上面这个问题,但是填补这个 GAP 的想法是,能否搞出一套无标注数据(或者是少量标注数据)也能训练的方法。
思路三:上游学习,下游迁移。针对「短板二」,针对特定任务训练的模型,泛化性都很差。那么能否把针对 Task1 任务训练出的模型 M,用一些办法迁移到 Task2 上也能跑呢?所以就有了「迁移学习(Transfer Learning)」。
思路四:上游多任务学习。在迁移学习的路线里,还延伸出一个思路,就是不要模型都训练好了再去迁移,而是一开始训练的时候,就让模型 M 对 Task1、Task2 甚至到 Task n 一起训练,训练好后再去使用。这种方法就叫「多任务学习(Multi-Task Learning)」。
预训练-微调(Pre-train and Fine-tune)学习范式:具体说应该是「语言建模预训练-微调(Pre-train LM and Fine-tune)」范式。一方面以 word2vec、GloVe 等一系列文本表示方法在推动「预训练」先用文本表示做语言建模,这是一股力量,ELMo 在 2018 年的出现是这种思路发展的一个巅峰;另一方面 2017 年出现的 Transformer 能够极强地抽取文本特征进而更好地通过语言建模完成预训练,GPT-1、BERT 等模型都是典型代表,尤其 BERT 把这种范式下的 NLP 研究推向了一个高潮
「预训练-提示」学习范式:解决 LLM 微调成本高的问题
LLM 模型参数规模非常大,以大家熟悉的 2020 年出现的 GPT-3 为例,模型参数就达到了 1750 亿个。这样下游再去「微调」时,针对一个特定任务,都要更新一个巨大的模型,成本就有点高了。变相地拉高了「预训练-微调」范式的泛化成本。
如果面对下游任务时,不用更新参数就好了 —— 也就是预训练之后不用微调。能实现吗?2018、2019 年在这方面的探索蛮多的,例如 Salesforce Research 在 2018 年 6 月、DeepMind 在 2019 年 1 月、OpenAI 在 2019 年 2 月 都提出了这方面类似的论断:语言模型应该可以解决一切文本任务。
这里隐含着语言模型从大量语料里「隐式地」学到了很多任务该怎么做。既然学到了,下游可能就不用微调了,但是你可能需要给出一些「显式」的提醒来唤醒模型学到的「隐式」任务概念,这就是预训练范式下的第二个阶段:
- 预训练-提示(Pre-train and Prompt)学习范式:同样也可以具体说成是「语言建模预训练 - 提示」范式,举例来说比如你在使用模型时输入「北京,中国;纽约,美国;大阪,日本;悉尼,XXX。XXX 应该是什么?」,模型输出「澳大利亚」,这个输入的部分就是「提示(Prompt)」。Prompt 与 Fine-tune 最大的区别,是 Prompt 是不更新模型参数的,这是一种「上下文学习(In-Context Learning,ICL)」能力。
这样就从让预训练模型经过「微调」的笨重方式去缩短与下游任务距离的范式,切换到了让下游任务经过「提示」的轻便方式去缩短与预训练模型的距离。
这个「预训练-提示」范式以 2019 年登场的 GPT-2 模型开始为代表,到 GPT-3 推出后被推向了顶峰,尤其到了 2021 年,甚至衍生出了「提示工程(Prompt Engineering)」。围绕于此的研究论文也井喷式出现。
「预训练-微调-提示」学习范式:特定领域的更优解
对于现实中特定领域的实际应用来说,比如法律、客服、医疗等领域,在「预训练-提示」的范式上也加上针对特定领域的一些训练数据来微调,应用效果会更进一步提高。
虽然会有上面说的「微调 LLM 成本高」的问题,但是对于商业化的应用领域,LLM 带来的 AI 性能显著提升,是值得用微调成本换取商业收益的,而且通常这些领域还有私有数据授权的问题,比如 2023 年 3 月 Meta 放出 LLaMA 并提供预训练好的模型下载后,业界很多人在其上开始使用自己的商业敏感数据进行微调再提供服务。
「预训练-人工反馈强化学习-提示(Pre-train, RLHF and Prompt)」学习范式
发展到「预训练」范式阶段,还有什么显而易见的问题?第一是预训练语言模型对数据、模型、算力的要求都太高了。第二是 LLM 没有与人类的价值观、道德伦理等方面对齐,存在风险,因此需要推进 helpful、harmless、honest 的模型出现,这就是「对齐(Alignment)」议题。
由于 LLM 能力太强,因此带来的负面影响亟需兜底策略,否则可能会对人工智能领域发展带来毁灭式的巨大风险,所以对齐问题的优先级从「预训练」范式蓬勃发展后就变得异常之高,也就引出了第三阶段的范式。在「预训练-提示」的基础上增加了「人工反馈强化学习(Reinforcement Learning with Human Feedback,RLHF)」来通过人工干预解决对齐问题,主流模型里 InstructGPT 是率先这样训练的。RLHF 方法最早由 OpenAI 在 2017 年论文《Deep reinforcement learning from human preferences》中提出,后来 GPT-2、GPT-3 相继发布后出现了虚假新闻、教唆犯罪、消极暗示等大量使用 GPT 系列的负面案例,于是 OpenAI 开始重视 Alignment 并最终在 2022 年上半年的 InstructGPT 上引入 RLHF 方法对齐人类道德伦理,起到很好的效果,后来这也被迭代回了 GPT-3 中以保障 API 调用时遵循人类道德伦理观念。这套范式也被用于大家熟悉的 ChatGPT 中,成为了目前的主流范式。
预训练-人工反馈强化学习-微调-提示(Pre-train, RLHF, Fine-tune and Prompt)学习范式
预训练-人工反馈强化学习,都是上游阶段,微调和提示属于下游阶段。目前提供 fine-tune 的 GPT API 背后的 GPT 模型也是有 RLHF 的,已经不是最初没有考虑 alignment 的 GPT 版本了。
预训练语言模型
语言模型(Language Model)就是词序列的概率分布,因为在给定词序列后能预测下一个词,所以语言模型本身任务就是文本生成。按照技术路线,可以分为统计语言模型(Statistical Language Model)和神经语言模型(Neural Language Model)。 N 元文法就属于统计语言模型,MLP、CNN、RNN、LSTM、Transformer 等等都属于神经语言模型。
目前主流语言模型已经全面拥抱 Transformer,Transformer 变体而来的语言模型,有如下这几类:
自回归语言模型(Auto-Regressive Language Models)
也被一些文献叫做「从左到右语言模型(Left-to-Right LM)」会用已生成的预测结果做后续新的预测,简单说就是「Guess the Next」,然后把生成的词再放回到输入里组成新的输入继续 Guess the Next,从而使模型的注意力都集中在前面的文本上,从注意力机制上说就是 Casual Multi-Head Self-Attention。TransformerXL、XLNet、OpenAI 的 GPT 系列都属于自回归模型。自回归模型需要学习各词、各词组的文本内部依赖关系。从自回归模型的定义你可以看出,文本生成就是一个典型的要使用自回归模型的任务。
自编码语言模型(Auto-Encoding Language Models)
通过破坏文本再尝试恢复来学习语言,简单说就是「完形填空」,会用掩码(Mask,跟计算机网络里说的掩码是一回事儿)挖掉训练预测的词,所以涉及到怎么挖(破坏方法 Corruption)、挖多少(破坏比率 Corruption Rate)、挖多长(破坏长度 Corruption Length)。这类模型也叫 掩码语言模型(Masked Language Models,MLM)。从注意力机制上说,是 Masked Multi-Head Self-Attention。相比自回归模型,自编码模型的学习过程,能看到待预测词的前后内容,所以对文本的理解是更深入的,在同等成本的情况下理论上自编码模型对文本的分类、回归方面的 NLU 问题会有更好性能表现。典型的自编码模型有 BERT、ERNIE、ALBERT、RoBERTa、DistilBERT、ConvBERT、XLM、XLM-RoBERTa、FlauBERT、ELECTRA、Funnel Transformer。
前缀语言模型(Prefix LM)
也是 Left-to-Right 模式,但是与自回归语言模型相比,前缀语言模型在抽取输入文本特征时用了 Fully-Visible Mask(Encoder 用的掩码,能看到「过去」和「未来」)而不是 Future Mask(Decoder 用的掩码,只能看到「过去」),而生成本文部分则与自回归语言模型一样,只看到左侧。从注意力机制上讲,用到了 Masked Multi-Head Self-Attention 和 Casual Multi-Head Self-Attention。采用此架构的模型有 UniLM(Dong et al., 2019)、UniLMv2(Bao et al., 2020)、ERNIE-M(Ouyang et al., 2020)
编码器-解码器语言模型(Encoder-Decoder LM)
是把 Transformer 的 Encoder 和 Decoder 都包括在内。其注意力机制,Encoder 部分是 Masked Multi-Head Self-Attention,Decoder 部分是 Casual Multi-Head Cross-Attention 和 Casual Multi-Head Self-Attention 兼具。典型的 Encoder-Decoder 语言模型有 BART(Lewis et al., 2020a)、T5(Raffel et al, 2020)、MASS(Song et al., 2019)。