英文

ByT5 - Base

ByT5是 Google's T5 的无需分词的版本,总体上遵循 MT5 的架构。

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

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

论文: 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-base')

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-base')
tokenizer = AutoTokenizer.from_pretrained('google/byt5-base')

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模型,以及我们实验中使用的所有代码和数据。