英文

ByT5 - 大型

ByT5是一个无需分词的版本,其整体架构遵循 MT5 的设计。

ByT5只在 mC4 上进行了预训练,不包括任何带有平均字符遮罩长度为20的UTF-8字符的监督训练。因此,在将此模型用于下游任务之前,需要进行微调。

ByT5在处理噪声文本数据时表现特别出色,例如google/byt5-large在 TweetQA 上明显优于 mt5-large

论文: ByT5: Towards a token-free future with pre-trained byte-to-byte models

作者: Linting Xue, Aditya Barua, Noah Constant, Rami Al-Rfou, Sharan Narang, Mihir Kale, Adam Roberts, Colin Raffel

示例推断

ByT5可处理原始的UTF-8字节,并且可以在没有分词器的情况下使用:

from transformers import T5ForConditionalGeneration
import torch

model = T5ForConditionalGeneration.from_pretrained('google/byt5-large')

input_ids = torch.tensor([list("Life is like a box of chocolates.".encode("utf-8"))]) + 3  # add 3 for special tokens
labels = torch.tensor([list("La vie est comme une boîte de chocolat.".encode("utf-8"))]) + 3  # add 3 for special tokens

loss = model(input_ids, labels=labels).loss # forward pass

然而,建议对于批量推断和训练,使用分词器类进行填充:

from transformers import T5ForConditionalGeneration, AutoTokenizer

model = T5ForConditionalGeneration.from_pretrained('google/byt5-large')
tokenizer = AutoTokenizer.from_pretrained('google/byt5-large')

model_inputs = tokenizer(["Life is like a box of chocolates.", "Today is Monday."], padding="longest", return_tensors="pt")
labels = tokenizer(["La vie est comme une boîte de chocolat.", "Aujourd'hui c'est lundi."], padding="longest", return_tensors="pt").input_ids

loss = model(**model_inputs, labels=labels).loss # forward pass

摘要

目前最常用的预训练语言模型基于与单词或子词单元相对应的令牌序列。将文本编码为令牌序列需要一个分词器,通常该分词器是从模型中独立创建的。而直接在原始文本(字节或字符)上操作的无令牌模型具有许多优点:它们可以直接处理任何语言的文本,对噪声更有鲁棒性,并通过消除复杂且容易出错的文本预处理流程来减少技术债务。由于字节或字符序列比令牌序列更长,以往关于无令牌模型的研究通常引入了新的模型架构,旨在摊销直接在原始文本上操作的成本。在本文中,我们展示了标准的Transformer架构可以进行最小修改来处理字节序列。我们仔细分析了参数数量、训练FLOPs和推断速度等方面的权衡,并展示了字节级模型与令牌级模型的竞争力。我们还证明了字节级模型对噪声更具鲁棒性,并在对拼写和发音敏感的任务上表现更好。作为贡献的一部分,我们发布了基于T5架构的一组新的预训练字节级Transformer模型,以及我们实验中使用的所有代码和数据。