来了,来了!它带有全新的分词器API、TensorFlow改进以及增强的文档和教程!G站上最火的NLP项目Transformer,AI界众所周知的最先进的NLP模型,刚刚推出第三代。本次更新诚意满满。它不仅带来了2代的升级,还增加了一些新的功能和特性。让我们看看更新了哪些项目。相较于上一代的重大变化,首先让我们来看看v3相较于Transformerv2所做的更亮眼的更新。BERT分为两种。BERT分为BertForMaskedLM和BertLMHeadModel。因此BertForMaskedLM以后不能再用于因果语言建模,也不能接受lm_labels参数。Trainermovedfromclasstomethodv3还对Trainerdatacollat??or进行了更改,将其从类更改为方法。直接设置tokenizer的特殊token属性在v3中,可以直接设置tokenizer的特殊token属性,比如tokenizer.mask_token=''。目前在v2中,只是将token与tokenizer属性相关联,但如果token不在词汇表中,则不会添加到词汇表中,必须使用tokenizer.add_special_tokens()和tokenizer.add_tokens()方法来添加tokens。prepare_for_model已删除作为新标记器API的一部分,prepare_for_model方法已被删除。新的TokenizerAPI随着rust分词器的加入,分词器在版本2中迅速发展。现在,它有一个更简单、更灵活的API,可以在Python(慢)和Rust(快)分词器之间进行调整。新的API使您可以更深入地控制截断和填充,允许动态填充或填充到8的倍数。重新设计的API有详细说明:https://huggingface.co/transformers/master/preprocessing.html。让我们来看看显着的变化:现在可以在填充批次中的最长序列时截断模型的最大输入长度。填充和截断是解耦的,更容易控制。它可以填充到预定义长度的倍数,例如8,这可以为最新的NVIDIAGPU(V100)带来显着的速度提升。使用tokenizer.__call__的通用包装器,可用于所有情况(例如,单个序列、序列对到组、批次等)。tokenizer现在接受预标记输入。所有Rust分词器现在都像慢速分词器一样经过全面测试。一个新类AddedToken,用于更细粒度地控制添加的标记在标记化过程中的行为方式。特别是,用户可以控制(1)在标记化过程中是否删除标记周围的左右空格,(2)标记是否会在另一个词中被识别,以及(3)标记是否会在规范化形式识别中被识别(例如,如果分词器使用小写字母)。序列化问题已修复NumPy张量可以在标记器上使用return_tensors参数时创建。引入了一个新的枚举TensorType来映射我们支持的所有可能的张量后端:TensorType.TENSORFLOW、TensorType.PYTORCH、TensorType.NUMPY。分词器现在接受一个TensorType枚举作为encode(...)、encode_plus(...)、batch_encode_plus(...)分词器方法的return_tensors参数。BatchEncoding的新属性is_fast指示BatchEncoding是来自Python(慢速)标记器还是Rust(快速)标记器。现在可以选择慢速和快速分词器。他们的输出也是如此,一个继承BatchEncoding的字典。其他令人兴奋的改进对TensorFlow的改进在新版本中,对TensorFlow进行了非常大的升级:TensorFlow模型现在可以使用TFPretrainedModel.compute_loss方法自行计算损失。现在可以在TensorFlow中调整令牌嵌入的大小清理TensorFlow模型已添加MobileBERT《MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices 》MobileBERT已添加到PyTorch和TensorFlow库中。论文地址:https://arxiv.org/abs/2004.02984新增了一个checkpoint:mobilebert-uncased,即根据我们的API转换的uncased_L-24_H-128_B-512_A-4_F-4_OPTcheckpoint。增强的examples/seq2seq内容在新版本中,旧的examples/summarization和examples/translation文件夹已合并到新的examples/seq2seq文件夹中。Finetuning对总结效果很好,但翻译需要更多的实验。Finetuning可以在多个GPU上工作,在验证期间保存rouge分数,并提供--freeze_encoder和--freeze_embeds选项。这些选项使cnn/dailymail数据集上的BART微调速度提高了5倍。在distillation.py中添加了Distillbart代码。目前,它仅支持汇总。评估对于总结和翻译都非常有效。为XSUM摘要任务中的协作添加了权重和偏差共享任务。DistilbartDistilbart模型是bart-large-cnn和bart-large-xsum的较小版本,可以使用BartForConditionalGeneration.from_pretrained('sshleifer/distilbart-xsum-12-6')加载,可以在示例/中找到可重现的命令在文件夹中找到seq2seq。新的BERTLosesPatience基准测试集成了基准脚本并添加了一些功能。为Tensorflow添加推理:CPU、GPU、GPU+XLA、GPU+eager模式、CPU+eager模式、TPU。添加了PyTorch的推理和训练:推理:CPU、CPU+torchscript、GPU、GPU+torchscript、GPU+混合精度、Torch/XLATPU训练:CPU、GPU、GPU+混合精度、Torch/XLATPU。