当前位置:   article > 正文

Flan-T5: One Model for ALL Tasks_nghuyong

nghuyong
论文:Scaling Instruction-Finetuned Language Models
论文地址: https://arxiv.org/abs/2210.11416
公开模型: google/flan-t5-xxl · Hugging Face

1. Flan-T5是什么

Flan-T5是Google最新的一篇工作,通过在超大规模的任务上进行微调,让语言模型具备了极强的泛化性能,做到单个模型就可以在1800多个NLP任务上都能有很好的表现。这意味着模型一旦训练完毕,可以直接在几乎全部的NLP任务上直接使用,实现One model for ALL tasks,这就非常有诱惑力!

这里的Flan 指的是(Instruction finetuning ),即"基于指令的微调";T5是2019年Google发布的一个语言模型了。注意这里的语言模型可以进行任意的替换(需要有Decoder部分,所以不包括BERT这类纯Encoder语言模型),论文的核心贡献是提出一套多任务的微调方案(Flan),来极大提升语言模型的泛化性。

e922557d08fc825946cfd8f5bd4aa0d2.jpeg

例如下面文章中的例子,模型训练好之后,可直接让模型做问答

模型输入是:"Geoffrey Hinton和George Washington这两个人有没有交谈过?在回答之前想一想原因。“
模型返回是:Geoffrey Hinton是一个计算机科学家,出生在1947年;而George Washington在1799年去世。所以这两个不可能有过交谈。所以答案时“没有”。

2. 怎么做的

d60fb82b631dd041ef29f667ccd6a525.jpeg
                                                           1800+微调任务

(1) 任务收集:工作的第一步是收集一系列监督的数据,这里一个任务可以被定义成<数据集,任务类型的形式>,比如“基于SQuAD数据集的问题生成任务”。需要注意的是这里有9个任务是需要进行推理的任务,即Chain-of-thought (CoT)任务。

(2) 形式改写:因为需要用单个语言模型来完成超过1800+种不同的任务,所以需要将任务都转换成相同的“输入格式”喂给模型训练,同时这些任务的输出也需要是统一的“输出格式”。

930296bd5a95e4479a891bc59b18c953.jpeg
                                                              输入输出格式

如上图所示,根据 “是否需要进行推理 (CoT)” 以及 “是否需要提供示例(Few-shot)” 可将输入输出划分成四种类型:

  • chain-of-thought : ❎ and few-shot: ❎ (图中左上)
    • 输入:指令 + 问题
    • 输出:答案
  • chain-of-thought : ✅ and few-shot: ❎ (图中右上)
    • 输入:指令 + CoT引导(by reasoning step by step) + 问题
    • 输出:理由 + 答案
  • chain-of-thought: ❎ and few-shot: ✅ (图中左下)
    • 输入:指令 + 示例问题 + 示例问题回答 + 指令 + 问题
    • 输出:答案
  • chain-of-thought: ✅ and few-shot: ✅(图中右下)
    • 输入:指令 + CoT引导 + 示例问题 + 示例问题理由 + 示例问题回答 + 指令 + CoT引导 + 问题
    • 输出:理由 + 答案

(3) 训练过程:采用恒定的学习率以及Adafactor优化器进行训练;同时会将多个训练样本“打包”成一个训练样本,这些训练样本直接会通过一个特殊的“结束token”进行分割。训练时候在每个指定的步数会在“保留任务”上进行模型评估,保存最佳的checkpoint。

b866cd3da1d656a7d19d48f5ca35cb4d.jpeg
保留任务

尽管微调的任务数量很多,但是相比于语言模型本身的预训练过程,计算量小了非常多,只有0.2%。所以通过这个方案,大公司训练好的语言模型可以被再次有效的利用,我们只需要做好“微调”即可,不用重复耗费大量计算资源再去训一个语言模型。

2917f1aa1f344190b96241922fe4822c.jpeg
微调过程与预训练本身的计算量对比

3. 一些结论

(1) 微调很重要

c9fb19363247a29a0133c8feca4e7558.jpeg
直接预测(红框)微调(绿框)

与不微调相比,通过基于指令的微调(flan)可以大幅度提高语言模型的效果

(2) 模型越大效果越好

79bbce989e9b51b32348d3b8c0f50d80.jpeg
模型大小与任务数量对效果的影响

伴随模型体积的增加(上图左), 尤其是指数级的增加,比如从8B->62B,再从62B->540B,不论是否微调,效果都有非常显著的提升,而且还没有看到收敛的信号,可能如果有了 “万亿”参数的模型,效果还能继续提升。

(3) 任务越多效果越好

伴随任务数量的增加(上图右),模型的性能也会跟着增加,但是当任务数量超过282个之后,提升就不是很明显了。因为继续增加新的任务,尤其任务形式跟之前一样,不会给模型带来新的知识;多任务微调的本质是模型能够更好的把从预训练学到的知识进行表达,超过一定任务之后,继续新增相似的任务,知识的表达能力不会继续有很大的收益。进一步统计全部微调数据集的token数,发现只占到了预训练数据token数的0.2%,这表明还是有很多的知识没有在微调阶段重新被激发。

(4) 混杂CoT相关的任务很重要

d09b6a27b9517ccd9d27ea9bf2e604e8.jpeg
保留任务中 CoT相关的任务 以及 非CoT相关的任务

尽管在1800多个任务中只有9个需要推理再给出回答的任务(CoT任务),但是混杂了这9个任务之后对整个模型的提升很大。在针对CoT相关任务的预测上,如果在微调中混淆CoT任务能带来明显的提升(左图中蓝色和绿色线);在针对非CoT相关任务的预测上,如果在微调中混淆了CoT任务也不会对模型带来伤害(右图中蓝色和绿色线)。

ea974c8459301aa04753b79b3ba039d2.jpeg
zero-shot上是否引入CoT的对比

另外对于Zero-Shot的任务,微调中混淆CoT任务也能有明显的提升。

00c1b0dc911acf300a8ca43990bf70a8.jpeg
Zero-Shot设定下,混杂CoT能带来明显提升

(5) 整合起来

最终在多个不同尺寸的模型上进行实验,都可以获得一致性的结论:引入Flan微调方案,可以很好提高语言模型在超大规模任务上的整体效果。

6676a5b23dfba030fe498071da1a9a3f.jpeg
不同版本的模型

总结一下,这篇工作提出了Flan的微调框架,核心有四点:统一的输入输出格式(4种类型),引入chain-of-thought,大幅提高任务数量,大幅提高模型体积;实现了用一个模型来解决超过1800种几乎全部的NLP任务,通过较低的成本,极大发掘了现有语言模型的泛化性能,让大家看到了通用模型的希望,即One Model for ALL Tasks


持续NLP领域的硬核技术分享,欢迎点赞收藏关注,往期文章汇总:

  1. 智能问答系列

nghuyong:基于FAQ的智能问答(一): Elasticsearch的调教

nghuyong:基于FAQ的智能问答(二): 召回篇

nghuyong:基于FAQ的智能问答(三): 精排篇

2. 统计学习方法forNLP系列

nghuyong:统计机器学习方法 for NLP:基于HMM的词性标注

nghuyong:统计机器学习方法 for NLP:基于CRF的词性标注

nghuyong:统计机器学习方法 for NLP:基于LSA的主题模型

nghuyong:统计机器学习方法 for NLP:基于LDA的主题模型

3. NLP论文解读

nghuyong:Flan-T5: One Model for ALL Tasks

nghuyong: 如何评价1700亿参数的GPT-3?

nghuyong: 如何评价OpenAI最新的工作CLIP

4. 其他NLP工具/技术

nghuyong:手算KN-based ngram语言模型

nghuyong:Transformers多机多卡的炼丹实践

nghuyong:文本纠错的论文看这一篇就够了

nghuyong:试试在transformers中调用ERNIE

nghuyong: 如何开始在 github 上学习东西?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/722816
推荐阅读
相关标签
  

闽ICP备14008679号