T5 和 mT5

news2024/11/25 22:30:59

  • T5
      • Architecture:The Best One
        • 1. Main Body
        • 2. Embedding
        • 3. Pertrain and Finetune
        • 4. Multi-Task Pertrain and Finetune
        • 5. T5总结
  • mT5

T5https://arxiv.org/pdf/1910.10683.pdf
T5 blog: https://ai.googleblog.com/2020/02/exploring-transfer-learning-with-t5.html
mT5: https://arxiv.org/pdf/2010.11934.pdf
mT5 code: https://github.com/google-research/multilingual-t5

T5

T5 (Transfer Text-to-Text Transformer),Transfer 来自 Transfer Learning,预训练模型大体在这范畴,Transformer 也不必多说,那么 Text-to-Text 是什么呢。那就是作者在这提出的一个统一框架,靠着大力出奇迹,将所有 NLP 任务都转化成 Text-to-Text (文本到文本)任务

在这里插入图片描述

举几个例子就明白了,比如英德翻译,只需将训练数据集的输入部分前加上“translate English to German(给我从英语翻译成德语)” 就行。假设需要翻译"That is good",那么先转换成 “translate English to German:That is good.” 输入模型,之后就可以直接输出德语翻译 “Das ist gut.”

再比如情感分类任务,输入"sentiment:This movie is terrible!",前面直接加上 “sentiment:”,然后就能输出结果“negative(负面)”。

最神奇的是,对于需要输出连续值的 STS-B(文本语义相似度任务),居然也是直接输出文本,而不是加个连续值输出头。以每 0.2 为间隔,从 1 到 5 分之间分成 21 个值作为输出分类任务。比如上图中,输出 3.8 其实不是数值,而是一串文本,之所以能进行这样的操作,应该完全赖于 T5 模型强大的容量。

T5将任务指令设定在输入文本中,就不需要针对每类任务单独设置特定的FC输出层,所有任务都输出text。对于生成任务(例如机器翻译或文本摘要)很自然,因为任务格式要求模型生成以某些输入为条件的文本。对于分类任务,这是很不寻常的,其中训练T5输出 文本label (例如,用于情感分析的“正”或“负”)而不是类别索引。

通过这样的方式就能将 NLP 任务都转换成 Text-to-Text 形式,也就可以用同样的模型,同样的损失函数,同样的训练过程,同样的解码过程来完成所有 NLP 任务。其实这个思想之前 GPT2 论文里有提,上斯坦福 cs224n 时 Socher 讲的 The Natural Language Decathlon 也有提。

在这里插入图片描述

Architecture:The Best One

一句话总结:T5就是对大型的seq2seq的Transformer结构上做微小改动,进行多任务预训练+微调,把所有NLP任务(翻译、分类、摘要、相似度)转化为text-to-text任务(加入prompt embedding)。

在这里插入图片描述
通过大量实验探索最佳的结构与训练方案:
在这里插入图片描述

  • 不同模型结构比较,LM,BERT-style,Deshuffling,BERT-style的encoder-decoder模型一般比decoder-only(LM)好;
  • 不同目标函数比较,BERT-style denoising objective最好;
  • 不同corruption rate(MLM)比较,10%,15%,25%,50%,15%最好;
  • 不同corrupted span length比较,2,3,5,10,长度为3最好;
  • 训练集数据重复比较;
  • 训练策略比较:先pretrain再fine-tune的multitask learning非常有竞争力,但是需要谨慎选择不同任务训练频次;
  • 模型规模比较:比较了不同size的模型(base,small,large,3B和11B),训练时间,以及融合模型,来决定如何充分利用计算性能。

1. Main Body

首先作者们先对预训练模型中的多种模型架构(Transformer)进行了比对,最主要的模型架构可以分成下面三种。

在这里插入图片描述
三种self-attention:

  • fully-visible attention mask:输出序列的每个元素可以看见输入序列的每个元素,如BERT的Encoder结构。
  • causal attention mask:输出序列的每个元素只能看对应位置及之前的输入序列的元素,无法看见未来的元素。
  • causal with prefix attention mask:输入序列的一部分前缀采用fully-visible attention mask,其余部分采用 causal attention mask。

三种NLP模型结构:
在这里插入图片描述

  • BERT(NLU):是一个Transformer Encoder结构(双向attention)。把input从文本空间映射到向量空间,Input经过BERT得到每个token对应的hidden vector。通常我们会把第一个特殊token(CLS)的hidden作为整个input的表示(如图上左), 或者把所有tokens’ hidden的avg pooling作为整个input的表示(如上图右)。此时得到我们假设这个vector(图中黄色方块)包含了input的所有信息, 也就是把input从文本空间映射到向量空间。之后我们可以利用这个vector做分类或者生成等下游任务。
  • GPT(NLG):是一个Transformer decoder结构(单向attention,从左到右),给定一个向量空间的向量,GPT将会把这个向量映射到文本空间。GPT的主要功能是做生成比如对话生成,给定对话历史在向量空间的vector,GPT可以相应生成文本回复。所以可以理解成我们给定一个向量空间的向量,GPT将会把这个向量映射到文本空间。
  • T5(NLU+NLG):不仅仅是BERT+GPT模型,Encoder: 将文本映射到向量空间; Decoder: 将向量映射到文本空间。T5 encoder和decoder间的关联除了上面提到的hidden vector,还有cross attention。并且T5再做NLU任务时也不是仅仅依靠encoder,而是整个模型都参与进来,由decoder直接生成结果。这样一来,T5淡化了中间的hidden vector(通过encoder得到),把encoder和decoder连为一体,这就使得T5的文本表示功能会存疑。

三种语言模型结构:

  • 第一种,Encoder-Decoder 型(Transformer),即 Seq2Seq 常用模型,分成 Encoder 和 Decoder 两部分,对于 Encoder 部分,输入可以看到全体,之后结果输给 Decoder,而 Decoder 因为输出方式只能看到之前的。(Encoder-Decoder结构中,Encoder部分采用fully-visible attention mask,而Decoder部分采用causal attention mask)

  • 第二种,Language Model型(GPT), 相当于上面的 Transformer Decoder 部分,当前时间步只能看到之前时间步信息。典型代表是 GPT2 还有最近 CTRL 这样的(Language model结构中,采用causal attention mask)

  • 第三种,前缀双向可见 Prefix LM 型,可看作是上面 Encoder 和 Decoder 的融合体,一部分如 Encoder 一样能看到全体信息,一部分如 Decoder 一样只能看到过去信息。最近开源的 UniLM 便是此结构。(最右侧的Prefix LM结构中,采用causal with prefix attention mask)

上面这些模型架构都是 Transformer 构成,之所以有这些变换,主要是对其中注意力机制的 Mask 操作。

通过实验作者们发现,在提出的这个 Text-to-Text 架构中,Encoder-Decoder 模型效果最好。于是乎,就把它定为 T5 模型,因此所谓的 T5 模型其实就是个 Transformer 的 Encoder-Decoder 模型(12层Encoder、12层Decoder)。

T5模型和原始的Transformer结构基本一致,除了做了如下几点改动:

  • remove the Layer Norm bias
  • place the Layer Normalization outside the residual path
  • use a different position embedding

2. Embedding

分词:

在这里插入图片描述

位置编码:相对位置编码

在这里插入图片描述
朴素思想解决位置远距离位置编码:为了防止输入序列过长导致位置编码无限增大,设置阈值k限制位置编码增长(类似梯度裁剪)
在这里插入图片描述
T5位置编码:
在这里插入图片描述

T5的 Position Embedding 在 self-attention 的 QK 乘积之后进行:
在这里插入图片描述

相对位置编码 和 绝对位置编码:

在这里插入图片描述

3. Pertrain and Finetune

在这里插入图片描述

Pertrain dataset:C4

在这里插入图片描述
Pertrain

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Finetune: T5采用2种微调方法。

在这里插入图片描述

不冻结模型训练效果最佳,但缺点是慢!Adapter layers效果比Gradual unfreezing效果更好。

在这里插入图片描述

4. Multi-Task Pertrain and Finetune

仅仅多任务训练不微调,效果不如单任务

在这里插入图片描述

有监督预训练:针对不同的任务设定不同的label进行训练

在这里插入图片描述

多任务有监督预训练+微调:

在这里插入图片描述

模型规模
在这里插入图片描述

5. T5总结

  • 预训练策略:无监督预训练(破坏原sequence的15%,然后进行预测Maks的token)+ 有监督multi-task预训练(针对不同任务数据集分别进行训练)
  • 5种模型大小:S、B、L、3B、11B。

在这里插入图片描述
最后就是结合上面所有实验结果,训练了不同规模几个模型,由小到大:

  • Small,Encoder 和 Decoder 都只有 6 层,隐维度 512,8 头;
  • Base,相当于 Encoder 和 Decoder 都用 BERT-base;
  • Large,Encoder 和 Decoder 都用 BERT-large 设置,除了层数只用 12 层;
  • 3B(Billion)和11B,层数都用 24 层,不同的是其中头数量和前向层的维度。
  • 11B,最后在 GLUE,SuperGLUE,SQuAD,还有 CNN/DM 上取得了 SOTA,而 WMT 则没有。看了性能表之后,我猜想之所以会有 3B 和 11B 模型出现,主要是为了刷榜。看表就能发现

比如说 GLUE,到 3B 时效果还并不是 SOTA,大概和 RoBERTa 评分差不多都是 88.5,而把模型加到 11B 才打破 ALBERT 的记录。然后其他实验结果也都差不多,3B 时还都不是 SOTA,而是靠 11B 硬拉上去的。除了 WMT 翻译任务,可能感觉差距太大,要拿 SOTA 代价过大,所以就没有再往上提。根据这几个模型的对比,可以发现即使是容量提到 11B,性能提升的间隔还是没有变缓,因此我认为再往上加容量还是有提升空间。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

mT5

不幸的是,许多这样的语言模型仅在英语文本上进行过预训练。鉴于世界上大约80%的人口不会说英语,这极大地限制了它们的使用(Crystal,2008年)。 社区解决这种以英语为中心的方法之一就是发布数十种模型,这些模型已经在一种非英语语言上进行了预训练(Carmo等人,2020; de Vries等人,2019; Le等人 ; 2019; Martin等人,2019; Delobelle等人,2020; Malmsten等人,2020; Nguyen和Nguyen,2020; Polignano等人,2019等)。 一个更通用的解决方案是生成,已经在多种语言的混合中进行了预训练的多语言模型。 这种类型的流行模型是mBERT(Devlin,2018),mBART(Liu等,2020)和XLM-R(Conneau等,2019),它们是BERT的多语言变体(Devlin等,2018)。 ,BART(Lewis等人,2019a)和RoBERTa(Liu等人,2019)。

在本文中,我们通过发布mT5(T5的多语言变体)来延续这一传统。 我们使用mT5的目标是生成一个大规模的多语言模型,该模型尽可能少地偏离用于创建T5的方法。 因此,mT5继承了T5的所有优点,例如其通用的文本到文本格式,基于大规模实证研究得出的观点的设计及其规模。 为了训练mT5,我们引入了称为mC4的C4数据集的多语言变体。 mC4包含从公共“Common Crawl”网络抓取中提取的101种语言的自然文本。

具体来说,我们基于“T5.1.1”方法建立了mT5,对mT5进行了改进,使用GeGLU非线性(Shazeer,2020年)激活函数,在更大模型中缩放dmodel而不是改变dff, 对无标签数据进行预训练而没有dropout等措施。 为简洁起见,更多详细信息请参考Raffel et al. (2019)。

预训练多语言模型的主要因素是如何从每种语言中采样数据。最终,这种选择是零和博弈:如果对低资源语言的采样过于频繁,则该模型可能过拟合;反之亦然。如果高资源语言没有经过足够的训练,则该模型将欠拟合。因此,我们采用(Devlin,2018; Conneau et al.,2019; Arivazhagan et al.,2019)中使用的方法,并根据p(L)∝ |L|α的概率通过采样样本来增强资源较少的语言,其中p(L)是在预训练期间从给定语言采样文本的概率和|L|是该语言中样本的数量。超参数α(通常α<1)使我们可以控制在低资源语言上“boost”训练概率的程度。先前工作使用的值,mBERT(Devlin,2018)是α= 0.7,XLM-R(Conneau等人,2019)的α= 0.3,MMNMT(Arivazhagan等人,2019)的α= 0.2。我们尝试了所有这三个值,发现α= 0.3可以在高资源语言和低资源语言的性能之间做出合理的折衷。

我们的模型涵盖了100多种语言,这需要更大的单词表量。 遵循XLM-R(Conneau et al.,2018)之后,我们将单词表量增加到250,000个单词。 与T5一样,我们使用SentencePiece(Kudo and Richardson,2018; Kudo,2018)单词模型,这些单词模型以与训练期间,使用的相同语言采样率进行训练。 为了适应具有大字符集(例如中文)的语言,我们使用0.99999的字符覆盖率,但还启用了SentencePiece的“byte-fallback”特征,以确保可以唯一编码任何字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1014949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无涯教程-JavaScript - AGGREGATE函数

描述 返回列表或数据库中的聚合。 AGGREGATE函数可以将不同的聚合函数应用于列表或数据库,并且可以选择忽略隐藏的行和错误值。 AGGREGATE函数具有两种不同的格式- 参考格式数组格式 参考格式 语法 AGGREGATE (function_num, options, ref1, [ref2] …)争论 Argument描述…

Linux驱动中断与时间篇——中断下半部的三种方法

文章目录 什么是中断下半部softirq软中断实例 tasklettasklet使用tasklet实例 work queue 什么是中断下半部 当产生一个中断时&#xff0c;会进入中断处理程序。 但中断处理程序必须快速、异步、简单的对硬件做出迅速响应并完成那些时间要求很严格的操作。 因此&#xff0c;对…

课程学习成绩评分F2计算器

前言&#xff1a; 由于大二的时候计算成绩太麻烦了&#xff0c;特别是综测评定小组还需要验证其他同学的是否正确&#xff0c;对于这种重复性高的工作&#xff0c;首先要想到的就是用计算机来实现&#xff0c;想起来上学期学了一点Java&#xff0c;就想简单的写一个程序。 C …

【PowerQuery】PowerBI Pro账户的自动刷新

在数据和模型通过发布或者上传方式上传到PowerBI Pro中,如何来进行数据刷新呢?数据源依然在本地,而数据模型已经发布到PowerBI Pro云端服务中。如果数据源更新,我们的模型如何进行自动刷新呢? PowerBI Pro如果需要基于本地数据源更新进行模型更新需要部署相应的数据网关服…

Pytorch学习笔记(模型训练)

模型训练 在同一个包下创建train.py和model.py&#xff0c;按照步骤先从数据处理&#xff0c;模型架构搭建&#xff0c;训练测试&#xff0c;统计损失&#xff0c;如下面代码所示 train.py import torch.optim import torchvision from torch import nn from torch.utils.da…

Leetcode165. 比较版本号

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码如下&#xff1a; class Solution {public int compareVersion(String version1, String version2) {int i 0, j 0;while(i < version1.length() || j < version2.length()){long num1 0…

交换两数整有几种途径

原本以为利用变量或者异或可以交换两个整数&#xff1b;今天学到&#xff0c;加减也可以实现两个整数的交换。 (本笔记适合熟悉一种编程语言的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程…

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造&#xff1a;MAC与PHY的关系&…

【JavaSE笔记】方法

一、前言 Java中的方法是一种在Java编程中非常常见的概念。 我们可以将方法看作是一种可重复使用的代码块&#xff0c;类似于生活中的工具。就像我们在日常生活中会使用各种各样的工具来完成不同的任务一样&#xff0c;我们在编程中也可以使用方法来完成各种不同的操作。 二…

如何去掉word上方页眉处的横线

一、问题描述 有时候word总会莫名其妙在页眉处出现一条横线&#xff0c;如图&#xff1a; 二、解决步骤 1.首先点击任一页眉进入页眉编辑状态&#xff0c;然后点击设计&#xff1a; 2.选择页面边框&#xff1a; 3.选择边框——选择无——选择应用于段落——完成。

基于matlab实现的额 BP神经网络电力系统短期负荷预测未来(对比+误差)完整程序分享

基于matlab实现的额 BP神经网络电力系统短期负荷预测 完整程序&#xff1a; clear; clc; %%输入矢量P&#xff08;15*10&#xff09; P[0.2452 0.1466 0.1314 0.2243 0.5523 0.6642 0.7105 0.6981 0.6821 0.6945 0.7549 0.8215 0.2415 0.3027 0; 0.2217 0.1581 0.1408 0.23…

Java基础(二十五):JDBC

文章目录 一、JDBC1.1 概述1.2 快速入门 二、获取数据库连接的5种方式三、ResultSet四、Statement与PreparedStatement4.1 Statement存在SQL注入4.2 PreparedStatement 五、JDBC API六、事务七、批处理八、数据库的连接方式8.1 传统的连接方式8.2 数据库的连接池技术8.2.1 C3P0…

OpenCV项目实战(2)— 如何用OpenCV实现弹球动画

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。OpenCV能够在画布上绘制静态的图形&#xff0c;例如&#xff0c;线段、矩形、正方形、圆形、多边形、文字等。那么&#xff0c;能不能让这些静态的图形移动起来&#xff1f;如果能&#xff0c;又该如何编写代码呢&#xff…

S7-1200PLC硬件上升沿中断(VN积分法计算实时卷径)

VN积分法计算实时卷径的算法原理请参考下面文章链接: VN积分法卷径计算FB(SCL代码)_RXXW_Dor的博客-CSDN博客卷径计算的其他方法请参看专栏的相关文章,链接如下:卷径计算(V/N法)_RXXW_Dor的博客-CSDN博客。https://rxxw-control.blog.csdn.net/article/details/131612206PL…

八月 NFT 行业解读:数据下滑,熊市持续

作者: stellafootprint.network 8 月份&#xff0c;加密货币市场经历了明显的波动&#xff0c;比特币价格波动幅度较大。与此同时&#xff0c;NFT 市场出现大幅下跌&#xff0c;引发了人们对这一新兴行业未来发展趋势的担忧。 我们是否已经到达熊市的底部&#xff1f;行业利好…

JDK8 升级至JDK19

优质博文IT-BLOG-CN 目前部分项目使用JDK8&#xff0c;部分项目使用JDK19因此&#xff0c;环境变量中还是保持JDK8&#xff0c;只需要下载JDK19免安装版本&#xff0c;通过配置IDEA就可以完成本地开发。 一、IDEA 环境设置 【1】通过快捷键CTRL SHIFT ALT S或者File->P…

Network: use --host to expose

Network: use --host to expose vite 项目启动后 只能通过 localhost 访问 无法使用 IP 地址访问 原因因为 没有将网络服务暴露在网络中 vite 项目启动 出现如下图 提示&#xff1a; 注意这条提示&#xff1a; Network: use --host to expose 没有将网络服务暴露在网络中 所以 …

【数据结构】用3500字学会优先级队列(堆)

文章目录 &#x1f490;1. 优先级队列1.1 概念 &#x1f490;2.堆的概念及存储方式2.1 什么是堆2.2 为什么要用完全二叉树描述堆呢&#xff1f;2.3 为什么说堆是在完全二叉树的基础上进行的调整&#xff1f;2.4 使用数组还原完全二叉树 &#x1f490;3. 堆的常用操作-模拟实现3…

【CMU 15-445】Proj0 C++ Primer

C Primer Task1 Copy-On-Write TrieTask2 Concurrent Key-Value StoreTask3 DebuggingTask4 SQL String Functions CMU-15445汇总 本文对应的project版本为CMU-Spring-2023的project0 默认读者已经学会了字典树Trie Task1 Copy-On-Write Trie Task1要求实现一个可持久化字典树…