模型:
google/byt5-xl
ByT5是 Google's T5 的无分词器版本,并且基本上遵循了 MT5 的架构。
ByT5只在 mC4 上进行了预训练,不包含任何带有平均_span-mask_为20个UTF-8字符的监督训练。因此,在将其用于下游任务之前,必须进行微调。
ByT5在处理噪声文本数据方面表现非常出色,例如,google/byt5-xl在 TweetQA 上明显优于 mt5-xl 。
论文: 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-xl') 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-xl') tokenizer = AutoTokenizer.from_pretrained('google/byt5-xl') 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架构可以在对字节序列进行最小修改的情况下使用。我们在参数计数、训练FLOP和推理速度方面进行了精确的特征化,并表明字节级模型与标记级对应物具有竞争力。我们还证明了字节级模型在噪声方面更加稳健,并在对拼写和发音敏感的任务上表现更好。作为我们的贡献的一部分,我们发布了一组基于T5架构的新的预训练字节级Transformer模型,以及我们实验中使用的所有代码和数据。