t5作为将全部NLP任务看作Text-To-Text的开山鼻祖,为后续,包括目前许多模型都产生了借鉴和基础。

一、背景

迁移学习是自然语言处理(NLP)中一种强大的技术,它首先在数据丰富的任务上对模型进行预训练,然后在下游任务上进行微调。迁移学习的有效性导致了方法、方法和实践的多样性。在本文中,我们通过引入一个统一的框架来探索NLP的迁移学习技术的前景,该框架将每个语言问题转换为文本到文本的格式。我们的系统研究比较了几十项语言理解任务的预训练目标、体系结构、未标记数据集、迁移方法和其他因素。通过将我们的探索见解与规模和我们新的“Colossal Clean Crawled Corpus”相结合,我们在许多基准测试上取得了最先进的成果,包括摘要、问答、文本分类等。为了促进NLP迁移学习的未来工作,我们发布了数据集、预先训练的模型和代码。

二、T5

T5是编码器-解码器模型,并将所有NLP问题转换为文本到文本格式。它是通过教师的强迫来训练的。这意味着,对于训练,我们总是需要一个输入序列和相应的目标序列。使用input_ids将输入序列馈送到模型。目标序列向右移动,即,由开始序列标记进行预处理,并使用decoder_input_ids将其馈送到解码器。在教师强制风格中,目标序列随后被EOS令牌附加,并与标签相对应。PAD令牌在此被用作开始序列令牌。T5可以以有监督和无监督的方式进行训练/微调。

2.1 训练
  • 无监督

    span mask任务

    from transformers import T5Tokenizer, T5ForConditionalGenerationtokenizer = T5Tokenizer.from_pretrained("t5-small")
    model = T5ForConditionalGeneration.from_pretrained("t5-small")input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
    labels = tokenizer("<extra_id_0> cute dog <extra_id_1> the <extra_id_2>", return_tensors="pt").input_ids# the forward function automatically creates the correct decoder_input_ids
    loss = model(input_ids=input_ids, labels=labels).loss
    loss.item()
    
  • 有监督

    from transformers import T5Tokenizer, T5ForConditionalGenerationtokenizer = T5Tokenizer.from_pretrained("t5-small")
    model = T5ForConditionalGeneration.from_pretrained("t5-small")input_ids = tokenizer("translate English to German: The house is wonderful.", return_tensors="pt").input_ids
    labels = tokenizer("Das Haus ist wunderbar.", return_tensors="pt").input_ids# the forward function automatically creates the correct decoder_input_ids
    loss = model(input_ids=input_ids, labels=labels).loss
    loss.item()
    
2.2 预测
  • 无监督任务

    from transformers import T5Tokenizer, T5ForConditionalGenerationtokenizer = T5Tokenizer.from_pretrained("t5-small")
    model = T5ForConditionalGeneration.from_pretrained("t5-small")input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_idssequence_ids = model.generate(input_ids)
    sequences = tokenizer.batch_decode(sequence_ids)
    sequences
    

三、t5优化版本

3.1 t5v1.1

无监督预训练的t5,为了更好适应下游特点微调任务,不至于原有t5监督预训练任务造成很大的diff。

  1. feed-forward 使用geglu代替relu
  2. 预训练时 关闭dropout
  3. 仅使用C4数据集进行预训练
  4. 嵌入层和分类器层之间没有参数共享。
  5. 用“xl”和“xxl”代替“3B”和“11B”。模型形状有点不同——较大的d_model和较小的num_heads和d_ff。
3.2 mT5

仅在mC4数据集进行预训练,与t5v1.1类似,训练包含101种语言,在跨语种表现好些。

3.3 byT5

byT5是在字节序列而不是句子片段子词标记序列上预训练的T5模型。主要为了避免不同tokenizer分词,词表带来的对语言模型的影响,考虑直接使用字节list(uft-8) 进行语言模型的实现。

目前广泛使用的预训练语言模型对应于单词或子单词单元的标记序列进行操作。在本文中,我们展示了标准Transformer体系结构可以在处理字节序列时进行最小的修改。我们仔细描述了参数计数、训练FLOP和推理速度方面的权衡,并表明字节级模型与其令牌级模型相比具有竞争力。我们还证明了字节级模型对噪声的鲁棒性明显更强,并且在对拼写和发音敏感的任务中表现更好。

3.4 UL2

基于t5结构的统一预训练和微调策略,实现的模型

本文为预训练模型提供了一个统一的框架,该框架在数据集和设置中普遍有效。我们首先将架构原型与预训练目标分开,这两个概念通常被混为一谈。接下来,我们对NLP中的自我监督提出了一个普遍而统一的观点,并展示了不同的训练前目标如何相互投射,以及不同目标之间的插值如何有效。然后,我们提出了混合名词(MoD),这是一个将不同的预训练范式结合在一起的预训练目标。我们进一步引入了模式切换的概念,其中下游微调与特定的预训练方案相关联。我们进行了广泛的消融实验,以比较多个预训练目标,并发现我们的方法通过在多个不同的设置中优于T5和/或GPT类模型,推动了Pareto前沿。

最后,通过将我们的模型扩展到20B的参数,我们在50个成熟的监督NLP任务上实现了SOTA性能,这些任务包括语言生成(具有自动和人工评估)、语言理解、文本分类、问答、常识推理、长文本推理、结构化知识基础和信息检索。我们的模型在上下文学习方面也取得了很好的效果,在零样本SuperGLUE上表现优于175B GPT-3,在一次性摘要上表现是T5-XXL的三倍。

3.5 Flan-T5

Flan是一种基于提示的预训练方法。Flan-T5是在Flan数据集上训练的T5模型,这些数据集包括:taskmaster2、djaym7/wiki_dialog、deepmind/code_contests、lambada、gsm8k、aqua_rat、esnli、quasc和qed。

T5模型及其后续优化相关推荐

  1. 官方解读,谷歌“T5”模型,如何突破迁移学习局限,实现多基准测试SOTA

    2020-02-25 14:35 导语:实现多基准测试SOTA. 过去几年间,迁移学习给 NLP 领域带来了丰硕的成果,掀起了新一波的发展浪潮.而迁移学习之所以如此有效,得益于其利用自监督任务(如语言 ...

  2. 深度学习模型压缩与优化加速

    1. 简介 深度学习(Deep Learning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩.优化加速.异构计算等方法突破瓶颈. 模型压缩算法能够有效降低参数冗 ...

  3. Transformer T5 模型慢慢读

    Transformer T5 模型慢慢读(我也省略了很多细节,只是大体的阐述,具体,大家可以参看论文.....) 代码地址:https://github.com/google-research/tex ...

  4. NLP: 0基础应用T5模型进行文本翻译代码实例~

    文章目录 前言 一.目标文本是什么? 二.模型调用步骤 1.引入库 2.导入模型,本文使用 t5-base 3.使用分词器对目标文本进行分词 4.对刚刚生成的分词结果进行目标语言的生成工作 5.对生成 ...

  5. 深度学习模型压缩与优化方法

    深度学习(Deep Learning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩.优化加速.异构计算等方法突破瓶颈. 模型压缩算法能够有效降低参数冗余,从而减少 ...

  6. PyTorch主要组成模块 | 数据读入 | 数据预处理 | 模型构建 | 模型初始化 | 损失函数 | 优化器 | 训练与评估

    文章目录 一.深度学习任务框架 二.数据读入 三.数据预处理模块-transforms 1.数据预处理transforms模块机制 2.二十二种transforms数据预处理方法 1.裁剪 2. 翻转 ...

  7. 最全模型效果评估报告上线,百度飞桨企业版EasyDL助力模型效果快速优化

    近些年深度学习持续发展,在视觉.自然语言处理.语音等各个技术方向都诞生了创新智能应用,例如智能识别医疗图像中的病灶,辅助医生做病情诊断:智能判别生产线上有质量问题的产品,减轻人工质检压力:对政务.金融 ...

  8. 如何用pytorch做文本摘要生成任务(加载数据集、T5 模型参数、微调、保存和测试模型,以及ROUGE分数计算)

    摘要:如何使用 Pytorch(或Pytorchlightning) 和 huggingface Transformers 做文本摘要生成任务,包括数据集的加载.模型的加载.模型的微调.模型的验证.模 ...

  9. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

最新文章

  1. quick-cocos2d-x开发环境Lua for IntelliJ IDEA的安装
  2. [转]XCode中修改缺省公司名称/开发人员名称
  3. 彻底弄懂ICG的基本概念
  4. 蓝桥杯C语言指数计算,蓝桥杯 算式900!!!!自己编的程序出毛病 了 求大神帮忙!~...
  5. 下面哪个字段是http请求中必须具备的_理解HTTP协议-HTTP协议详解总结
  6. java 最快平衡几个值_Java 集合框架面试问题集锦
  7. 深圳软件开发向前跳转会略过一些节点
  8. Java的class文件批量反编译成Java文件
  9. 计算机启动需输入两次密码,为什么我的电脑要2次启动才能启动我电脑设置了启动密码后就一定要2 爱问知识人...
  10. (10)js操作符(运算符)
  11. jpg怎么合成一份_海外商标注册申请程序复杂吗?应该怎么注册?
  12. 模板题——贪心(2)
  13. Android开发框架整理
  14. 40套各种风格住宿酒店行业网站html5模板大气商务酒店网站模板度假村酒店官方网站模板旅行酒店宾馆整站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应
  15. CentOS 6.0 安装 Atheros ar8151 网卡驱动
  16. linux 达梦 tcp tcpv6,linux下配置ipv6地址
  17. Win10 Edge浏览器假死解决方案
  18. Krpano元素的一些解析
  19. I.MX6 AW-NB177NF wifi HAL
  20. 男人心疼女人的13种方式

热门文章

  1. 红外光谱分析不翻车,红外三要素你真的学会(废)了吗?(二)
  2. SDL 开发实战(五): SDL 纹理渲染
  3. 学软件测试看什么书好?
  4. 前端开发:JS的构造函数
  5. C# winform基于sql的图书管理系统源码
  6. SSRIT:简单重复序列识别工具
  7. openwrt编译流程分析
  8. 送给瓶颈期的产品人—-突破你瓶颈的建议
  9. bugku-web 你从哪里来 writeup
  10. 鸿蒙工程编译报错:check whether the ‘app‘ sub-tag ‘apiVersion‘ label is notEmpty