2022年,预训练何去何从?

NLP从入门到放弃

共 4249字,需浏览 9分钟

 ·

2022-01-21 18:23

©作者 | 李政 

研究方向 | 自然语言处理 

来源 | PaperWeekly


大规模预训练


预训练+微调的做法,在多个下游领域取得优异的表现。而在过去的一年里,预训练模型更是在往大而深的方向发展。

目前,国内已有智源研究院、鹏城实验室、中科院自动化所、阿里、百度、华为、浪潮等科研院所和企业研相继发出“悟道”、“盘古”、“紫东 · 太初”、M6、PLUG、ERNIE 3.0 等大模型。

但是模型在往大而深方向发展的同时,也存在如下亟待解决的问题:

  • 如何解释预训练模型的理论基础(如大模型智能的参数规模极限存在吗)
  • 如何将大模型高效、低成本的应用于实际系统
  • 如何克服构建大模型的数据质量、训练效率、算力消耗、模型交付等诸多障碍
  • 如何解决目前大部分大模型普遍缺乏认知能力的问题



对比学习


对比学习的出发点在于避免模型坍塌,理想的模型应该符合 alignment 和 uniformity,即语义相近的句子彼此聚集,语义无关的句子均匀分布。

如果仅仅通过数据增强构建正例,随机句子作为负例,并为其打上 0,1 标签,存在以下问题:

  • 数据增强生成正例的变化有限
  • 随机搭配成负例,含有除正例组合外其他组合全部为 0 的诱导
  • 0,1 标签的赋予太过绝对,对相似性表述不够准确


因此对比学习的核心思想转变为:

score(X,X^{'}) >> score(X,Y)



其中,X 代表原样本, 代表数据增强的正样本,Y 代表随机选择的负样本。根据该思想,对比学习采用 InfoNCE 损失函数

loss = -log \frac{exp(score(X,X^{'}))}{score(X,X^{'})+\sum_{i=1}^{N}score(X,Y_i)}



通过该损失函数实现正例拉近,负例推远的效果。



Prompt


prompt 被誉为 NLP 领域的新范式,与预训练+微调的范式相比,其过程分为:"pre-train, prompt, and predict"。

prompt 的出发点在于以更轻量化的方式利用预训练模型,避免微调与预训练之间存在的差异。

prompt 通过构建模版的方式,将下游任务转为与预训练相似的 MLM 任务,以该方式充分发挥预训练模型的性能。

以文本情感分类任务中,"I love this movie."句子为例,prompt 按照以下方式进行处理:

3.1 生成prompt句子

该步骤完成输入句子到模型输入的映射:

x^{'}=f_{prompt}(x)



其中, 为生成的 prompt 句子,x 为输入句子, 为 prompt 函数。

在本例中,使用的模版为:" [X] Overall, it was a [Z] movie."

因此,得到的, 为"I love this movie. Overall it was a [Z] movie.

3.2 模型预测

该步骤将 输入模型,模型完成模版空白位置的词语预测。

在本例中,模型可能预测为:"excellent", "great", "wonderful" 等词语

3.3 结果映射

通常模型预测的词语与任务输出存在一定差距,因此我们需要完成词语到输出结果的映射。

y = f(x^{'})



在本例中,"excellent", "great", "wonderful" 等词语映射为标签 "++"



展望未来


首先我认为当前基于数据驱动方法存在如下的问题:

1. 长尾效应:自然界中的数据分布就是长尾的,在学习的过程中,模型容易发生过拟合,泛化性较差。

2. 数据噪声:有标签的数据,在标注过程中就不可避免的存在噪声。尤其是多位人员一起标注时,不同标注人员根据自身的理解完成数据的标注,但不同的人自身理解存在偏差,因此标注结果极易存在误差。归根到底:标注的规范难以确定,无法统一大家的知识库。

当前我遇到的一些问题分享:模型仍无法很好地处理下述问题:


太阳有几只眼睛?
姚明与奥尼尔身高谁比较高?
猫咪可以吃生蛋黄吗?猫咪是可以吃蛋黄的。这里特定煮熟的白水蛋,猫咪不能吃生鸡蛋,因为生鸡蛋中有细菌。
物质都是由分子构成的吗?物质都是由分子构成的,分子又由原子构成-错的!因为有些物质是不含分子的。


这些问题,我总结为两方面的困难:

1. 缺乏知识,由于预训练与微调领域存在偏差,模型在下游任务中缺乏特定知识,同时模型在一些常识问题上表现较差。

2. 缺乏深度语义的理解,模型表现的更像通过字面匹配完成任务,推理的成分更弱。

当前研究热点仍然在于挖掘预训练模型的能力,但在基于常识性知识与逻辑推理的问题上,这种基于数据驱动的方式从底层就存在问题。引用一下大咖们对 2022 年的展望。


大模型一方面在不少问题上取得了以往难以预期的成功,另一方面其巨大的训练能耗和碳排放是不能忽视的问题。个人以为,大模型未来会在一些事关国计民生的重大任务上发挥作用,而在其他一些场景下或许会通过类似集成学习的手段来利用小模型,尤其是通过很少量训练来 “复用” 和集成已有的小模型来达到不错的性能。


我们提出了一个叫做 “学件” 的思路,目前在做一些这方面的探索。大致思想是,假设很多人已经做了模型并且乐意放到某个市场去共享,市场通过建立规约来组织和管理学件,以后的人再做新应用时,就可以不用从头收集数据训练模型,可以先利用规约去市场里找找看是否有比较接近需求的模型,然后拿回家用自己的数据稍微打磨就能用。这其中还有一些技术挑战需要解决,我们正在研究这个方向。


另一方面,有可能通过利用人类的常识和专业领域知识,使模型得以精简,这就要结合逻辑推理和机器学习。逻辑推理比较善于利用人类知识,机器学习比较善于利用数据事实,如何对两者进行有机结合一直是人工智能中的重大挑战问题。麻烦的是逻辑推理是严密的基于数理逻辑的 “从一般到特殊”的演绎过程,机器学习是不那么严密的概率近似正确的 “从特殊到一般”的归纳过程,在方法论上就非常不一样。已经有的探索大体上是以其中某一方为倚重,引入另一方的某些成分,我们最近在探索双方相对均衡互促利用的方式。


谈谈自己的理解,预训练模型的方式归根到底仍然属于数据驱动的任务,其通过在大规模数据上学习,推断未知数据的概率。如果说数据中存在表述不准确、表述有歧义或者词汇本身就有多个含义的话,以概率的方式难以解决这些问题。 

而人脑在未知问题上,推理成分居多,以一词多义为例,人类会考虑该词汇有几种用法,考虑在这种上下文语境下使用哪一种用法,所以是否可以建立一套类似于标准公理的语言规范,以该规范为基础,对未知句子进行拆解推理,理解句子的完整含义。通过了解模型的推理过程,模型的可解释性增强。当预测错误时,我们可以进行溯源分析,对模型依赖的知识进行调整,或者让模型学习的更充分。

接下来对自己 2022 年的期望:

1. 自身学习更多模型结构变化的同时,更多地理解业务的架构,明白模型在业务中起的作用。

2. 在算法研究上能够研究的更加深入,希望能够找到解决上述困难的方法



回顾自身算法经历


2021 年自身的算法经历主要分为:实习、算法比赛、项目、论文四部分。在这些经历里面主要接触分类、阅读理解、信息抽取三种任务,评估方式均采用精确率、召回率及 F1 值。下面将以这些经历为基础,介绍我处理这些任务的方式。

5.1 需求分析


开展算法工作之前,首先要搞清楚算法需要满足什么样的需求。包括:

  • 业务属于什么样的任务

  • 算法需要侧重的方向

  • 训练数据及线上数据的情况

  • 线上的指标

  • 线下的评估方式

  • ……

需求分析的目的在于了解业务的需求与算法在业务中起到的作用。

5.2 模型选型及设计


在明白需求之后,需要根据任务类型选择模型,并根据需求的不同,对模型结构进行调整。如阅读理解任务下:针对多答案、无答案的情况,我们需要调整模型的结构。

模型选型及设计的目的在于选择或设计能够很好地满足业务需求的模型。

5.3 数据分析


数据分析这一步是最重要的一步,当前模型主要还是以数据驱动,数据对模型的影响很大。

我主要从以下角度进行分析:

  • 数据是否存在噪声:标点、大小写、特殊符号等
  • 训练集测试集分布是否存在差异,测试集能否反映模型在具体业务下的表现
  • 数据存在哪些特征,通过引入额外的特征,模型可以表现地更好
  • 训练集分布:标签分布、长度分布等,是否会给模型带来类别不均衡、长文本等问题
  • 数据量大小,数据量足够时可以继续预训练


数据分析的目的在于数据能否充分发挥模型性能,能否得到符合业务需求的模型


5.4 模型训练及优化


模型进行训练,开始炼丹【调参】。

  • 设置合适的超参数【可以通过一些超参数搜索算法】

  • 选择合适的优化器【adam/adamw/sgd】

  • 学习率调整的策略


进阶版:

  • 对抗训练
  • 对比学习
  • UDA等数据增强方式
  • 继续预训练
  • 多任务学习
  • 伪标签
  • SWA
  • ……

5.5 分析负例


该过程同样重要,我们需要了解模型在测试数据上的表现情况,在什么数据表现较差,如何优化这些负例。

在优化过程中,建议记录每一次优化信息,分析模型的提升/降低是否符合自己预期,充分利用每一次实验

下面总结了我在优化过程常用的分析方式:

5.5.1 检查数据质量是否过差


这种情况通常表现为数据质量较差,模型在原始数据上表现不佳,精确率与召回率都很低。针对这种情况,需要对数据做必要的预处理,让模型能够更好地学习。


5.5.2 根据指标进行分析


recall低


‍‍‍‍‍‍‍

召回率表示召回的数量,测试集数据未召回较多,则从下列角度检查数据:


  1. 训练集测试集数据差异是否较大,即训练集中是否存在类似数据,若不存在则引入更多数据或者对该数据进行数据增强。这种情况,常见原因为数据分布不均衡-少数数据训练不充分;训练集、测试集分布差异较大导致。
  2. 训练集中存在类似数据,检查训练集中该种情况有无标注错误:漏标、错标。


precision低


精确率表示预测出的准确率,测试集数据分错的较多:

  1. 检查数据分布,是否数据分布不均衡。数据不均衡导致模型倾向于预测数量较多的数据,精确率下降。

  2. 标签定义是否准确,是否存在两类标签混淆的情况。这种情况,需要考虑对标签进行融合。

类别不均衡常用解决方式:

  • 数据增强

  • resample

  • reweight

  • 集成学习


数据错误常用解决方式:

  • 交叉验证

  • 置信学习

  • 聚类分析


接下来的过程则是迭代分析,直到模型性能符合业务需求。
浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报