Transformers: State-of-the-Art Natural Language Processing

发表时间: 2019-10 · arXiv:1910.03771

原文: https://arxiv.org/abs/1910.03771

作者/机构: Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, Pierric Cistac, Tim Rault, Remi Louf, Morgan Funtowicz, Joe Davison, ´ Sam Shleifer, Patrick von Platen, Clara Ma, Yacine Jernite, Julien Plu, Canwen Xu, Teven Le Scao, Sylvain Gugger, Mariama Drame, Quentin Lhoest, Alexander M. Rush

机构: Hugging Face, Brooklyn, USA


速读

一句话结论 本文介绍了 Hugging Face 开发的 Transformers 库,通过统一的 API 设计、模块化架构和社区驱动的模型中心,解决了预训练语言模型在分发、微调和部署环节的工程壁垒,极大促进了自然语言处理技术的工业落地。

要解决什么问题 尽管基于 Transformer 架构的预训练模型在自然语言处理领域取得了突破性进展,但从业者在将这些前沿模型投入实际应用时,面临着严重的工程卡点。原有的开源工具往往局限于特定的框架或单一的任务,导致模型在训练、分析、扩展、微调和部署等环节存在巨大的摩擦力。具体而言,研究人员难以在不同的模型架构之间快速切换和对比,工程师在将庞大的预训练模型从研究环境迁移到生产环境时缺乏标准化的转换路径,且基于 Python 的传统分词机制在处理海量数据时速度极慢。这种研究与生产之间的割裂,使得普通开发者难以低成本地获取、复现和应用最新的预训练模型,阻碍了自然语言处理技术的广泛普及。

怎么做的 Transformers 库通过高度模块化的设计和统一的抽象接口来绕开上述工程卡点。该库将所有支持的模型解耦为三个核心构建模块。首先是分词器,负责将原始文本转换为稀疏索引编码,为了解决 Python 处理大数据的性能瓶颈,库默认采用基于 Rust 语言编写的底层分词库,大幅加速了训练和部署时的分词过程。其次是 Transformer 模型本身,负责将稀疏索引转换为上下文嵌入,所有模型都遵循相同的抽象层次,通过一个基类实现从嵌入矩阵投影到自注意力层的完整计算图,且每个模型通常在独立文件中实现以保证可扩展性。最后是模型头,作为附加在 Transformer 上下文嵌入之上的输出层和可选损失函数,用于执行序列分类、语言建模等特定任务的预测。为了屏蔽底层架构的差异,该库设计了一组 Auto 类,能够根据预训练模型的配置自动实例化对应的分词器和模型,允许用户仅用几行代码就在不同架构甚至 PyTorch 和 TensorFlow 框架之间无缝切换。此外,该库构建了一个领域特定的模型中心,允许社区用户上传和下载包含分词器、模型权重和模型头的完整存档。模型中心不仅通过模型卡片提供训练数据集和偏见说明等元数据,还内置了实时推理功能,让用户无需编写代码即可在真实数据上测试模型输出。在部署层面,该库支持将微调后的模型导出为 TorchScript 以及 ONNX 等中间神经网络格式,并提供了向移动端 CoreML 转换的适配器,从而打通了从模型微调到边缘设备部署的完整链路。

效果如何 由于本文是一篇系统性技术报告,其评估主要侧重于社区采纳度、生态覆盖面以及工程部署的性能提升,而非单一任务的精度对比。在社区活跃度方面,统计数据显示从 2019 年 10 月至 2020 年 5 月,模型中心已汇聚了 2097 个由社区贡献的预训练和微调模型,其中 BERT、GPT-2 以及专为该库开发的轻量化模型 DistilBERT 的日均独立下载量呈现显著的持续增长。在部署性能的量化测试中,作者与 ONNX 团队合作,将库中的 BERT、RoBERTa 和 GPT-2 模型导出为 ONNX 中间格式进行推理实验,结果表明转换后的模型推理速度获得了近 4 倍的提升。此外,论文通过三个真实场景的案例研究证明了该库的普适性:模型架构师能够利用该库训练并分发针对生物医学文本的 SciBERT 模型;任务训练者能够将其作为通用前端接入 Jiant 评测框架,在多种模型上进行微调和横向对比;而应用层用户则无需任何机器学习专业知识,即可直接从模型中心下载并部署预训练好的摘要模型用于自动文档处理。这些结果共同证明了该库在兼顾研究灵活性与工业鲁棒性方面的有效性。

A1 主要贡献

本文介绍了 Transformers,一个旨在向更广泛的机器学习社区开放自然语言处理(NLP)领域最新进展的开源库。

图1: 2019年10月至2020年5月,下载量最高的预训练模型的日均独立下载量。
图1: 2019年10月至2020年5月,下载量最高的预训练模型的日均独立下载量。

A3 背景知识与相关工作

A2 方法细节

4. 模型中心(Community Model Hub)

from transformers import AutoTokenizer, AutoModelWithLMHead
tokenizer = AutoTokenizer.from_pretrained("flaubert/flaubert_base_cased")
model = AutoModelWithLMHead.from_pretrained("flaubert/flaubert_base_cased")

5. 部署

A4 实验

实验环境

本文作为一篇系统性论文,并未提供一个统一的、标准的实验环境配置。相关配置信息散布在不同章节的描述中。

实验结果

本文的实验结果主要体现在库的采用率、社区活跃度以及部署性能上。

A5 结论

随着 Transformer 架构和预训练技术在自然语言处理(NLP)中扮演越来越重要的角色,让研究人员和最终用户能够方便地接触和使用这些模型变得至关重要。Transformers 是一个开源库和社区,旨在帮助用户访问大规模预训练模型,在其基础上进行构建和实验,并以最先进的性能将它们部署到下游任务中。自发布以来,Transformers 获得了显著的自然增长,并已准备好继续提供核心基础设施,同时帮助促进对新模型的访问。

引用文献汇总

  1. 【Ashish Vaswani et al., Attention is all you need, 2017, NIPS】
    • 引用位置:A1 主要贡献
    • 引用描述:指出 Transformer 已迅速成为自然语言处理的主导架构。
  2. 【Bryan McCann et al., Learned in translation: Contextualized word vectors, 2017, NIPS】
    • 引用位置:A1 主要贡献
    • 引用描述:作为模型预训练的早期代表工作之一被引用。
  3. 【Jeremy Howard and Sebastian Ruder, Universal language model fine-tuning for text classification, 2018, ACL】
    • 引用位置:A1 主要贡献
    • 引用描述:作为模型预训练的代表工作之一被引用。
  4. 【Matthew E Peters et al., Deep contextualized word representations, 2018】
    • 引用位置:A1 主要贡献
    • 引用描述:作为模型预训练的代表工作之一被引用。
  5. 【Jacob Devlin et al., BERT: Pre-training of deep bidirectional transformers for language understanding, 2018, NAACL】
    • 引用位置:A1 主要贡献, A3 背景知识与相关工作
    • 引用描述:作为模型预训练的代表工作之一被引用;Transformers 的结构受到了其原始源代码的启发。
  6. 【Ashish Vaswani et al., Tensor2tensor for neural machine translation, 2018, CoRR】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:Transformers 的结构受到了该库的启发。
  7. 【Matt Gardner et al., AllenNLP: A deep semantic natural language processing platform, 2018】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:预训练模型缓存的概念源自 AllenNLP。
  8. 【Myle Ott et al., fairseq: A fast, extensible toolkit for sequence modeling, 2019】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为相关的神经翻译和语言建模系统之一被提及。
  9. 【Guillaume Klein et al., OpenNMT: Open-source toolkit for neural machine translation, 2017, ACL】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为相关的神经翻译和语言建模系统之一被提及。
  10. 【Zhiting Hu et al., Texar: A modularized, versatile, and extensible toolkit for text generation, 2018】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为相关的神经翻译和语言建模系统之一被提及。
  11. 【Mohammad Shoeybi et al., Megatron-lm: Training multi-billion parameter language models using gpu model parallelism, 2019, arXiv】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为相关的神经翻译和语言建模系统之一被提及。
  12. 【Marcin Junczys-Dowmunt et al., Marian: Fast neural machine translation in c++, 2018】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为相关的神经翻译和语言建模系统之一被提及,Transformers 提供了使用其模型进行推理的工具。
  13. 【Edward Loper and Steven Bird, NLTK: The natural language toolkit, 2002】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为历史悠久的通用NLP库被提及。
  14. 【Christopher D Manning et al., The stanford CoreNLP natural language processing toolkit, 2014, ACL】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为历史悠久的通用NLP库被提及。
  15. 【Matthew Honnibal and Ines Montani, spacy 2: Natural language understanding with bloom embeddings, convolutional neural networks and incremental parsing, 2017】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为现代通用NLP库被提及,现已使用 Transformers 作为底层框架。
  16. 【Alan Akbik et al., Flair: An easy-to-use framework for state-of-the-art nlp, 2019, NAACL】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为现代通用NLP库被提及,现已使用 Transformers 作为底层框架。
  17. 【Peng Qi et al., Stanza: A python natural language processing toolkit for many human languages, 2020】
    • 引用位置:A3 背景知识与相关工作
    • 引用描述:作为现代通用NLP库被提及,现已使用 Transformers 作为底层框架。
  18. 【Margaret Mitchell et al., Model cards for model reporting, 2018】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:模型中心使用“模型卡片”来提供模型元数据。
  19. 【Benjamin Hoover et al., exBERT: A visual analysis tool to explore learned representations in transformers models, 2019】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:模型页面可链接到 exBERT 这样的可视化工具。
  20. 【Hendrik Strobelt et al., Lstmvis: A tool for visual analysis of hidden state dynamics in recurrent neural networks, 2017, IEEE transactions on visualization and computer graphics】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:引用其对架构师、训练者和最终用户的分类。
  21. 【Iz Beltagy et al., SciBERT: A pretrained language model for scientific text, 2019, EMNLP-IJCNLP】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:作为模型架构师使用模型中心的案例,AllenAI 开发并分发了 SciBERT。
  22. 【Yada Pruksachatkun et al., jiant: A software toolkit for research on general-purpose text understanding models, 2020, arXiv】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:作为任务训练者使用 Transformers API 的案例,纽约大学的研究人员在 Jiant 框架中使用了它。
  23. 【Ian Tenney et al., Bert rediscovers the classical nlp pipeline, 2019, ACL】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:作为纽约大学研究工作的成果被引用。
  24. 【James Bradbury et al., JAX: composable transformations of Python+NumPy programs, 2018】
    • 引用位置:A2 方法细节 (部署)
    • 引用描述:作为团队正在试验的有前景的中间格式之一被提及。
  25. 【Tianqi Chen et al., {TVM}: An automated end-to-end optimizing compiler for deep learning, 2018, OSDI】
    • 引用位置:A2 方法细节 (部署)
    • 引用描述:作为团队正在试验的有前景的中间格式之一被提及。
  26. 【Victor Sanh et al., DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter, 2019】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:作为一个为本库开发的、被社区广泛下载的专门模型。
  27. 【Hang Le et al., Flaubert: Unsupervised language model pre-training for french, 2020, LREC】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:作为从模型中心加载模型的代码示例。
  28. 【Mike Lewis et al., BART: Denoising Sequence-to-Sequence pre-training for natural language generation, translation, and comprehension, 2019】
    • 引用位置:A2 方法细节 (模型中心)
    • 引用描述:作为模型中心自动推理小部件的示例。