菜单

示例与用法

相关源文件

本页面提供了如何使用 Hugging Face Transformers 库来处理各种 NLP、计算机视觉和多模态任务的实用示例。重点介绍了常见的用法模式、特定任务的示例以及使用 Trainer API 和自定义训练循环的实现方法。有关训练系统的详细信息,请参阅 训练系统

常见使用模式

Transformers 库旨在简化使用预训练模型处理各种任务的流程。以下是最常见的用法模式:

加载和使用预训练模型

最基本的使用模式是加载预训练模型进行推理。

此模式遵循一般的工作流程:

  1. 使用 from_pretrained() 方法初始化分词器和模型。
  2. 使用分词器处理输入。
  3. 将处理后的输入传递给模型。

来源: src/transformers/modeling_utils.py1500-1600 src/transformers/tokenization_utils_base.py2500-2600

使用特定任务模型

对于特定任务,您可以使用 Auto* 系列中的相应模型类。

Auto* 类根据检查点名称自动选择合适的模型架构,方便在不同的模型实现之间切换。

来源

Pipeline API

为了简化推理,Pipeline API 提供了一个高级接口。

Pipeline API 处理所有预处理和后处理步骤,使其成为快速原型设计和简单应用的理想选择。

来源

特定任务的示例

Transformers 库支持广泛的 NLP、视觉、音频和多模态任务。以下是主要特定任务示例的摘要:

语言建模

语言建模示例使用模型来预测序列中的下一个词(CLM)或预测被掩码的词(MLM)。

因果语言建模 (CLM)

用于文本生成等自回归任务。

generate() 方法支持许多参数来控制生成过程,包括采样策略、束搜索和约束。

来源

掩码语言建模 (MLM)

用于预测被掩码的词。

MLM 通常用于预训练,并可针对各种下游任务进行微调。

来源

文本分类

文本分类示例包括情感分析、自然语言推理和其他监督分类问题。

文本分类模型通常输出可以用于通过 softmax 转换为概率的 logits。模型的配置包含从类 ID 到人类可读标签的映射。

来源

Token 分类

Token 分类涉及为单个 Token 打标签,通常用于命名实体识别 (NER) 或词性 (POS) 标注等任务。

Token 分类模型为每个 Token 输出 logits,然后将这些 logits 转换为标签。对于子词分词,需要特殊处理才能聚合被分割成多个子词的 Token 的预测。

来源

问答

问答模型从上下文中提取答案。

问答模型为每个 Token 位置输出开始和结束 logits。通过找到上下文中可能性最大的跨度来提取答案。

来源

摘要生成

摘要示例演示了如何将较长的文本浓缩成较短的摘要。

摘要使用类似 T5 或 BART 的序列到序列模型。对于 T5 模型,需要任务前缀“summarize: ”来指示任务。生成参数控制摘要的长度和质量。

来源

翻译

翻译示例展示了如何将文本从一种语言转换为另一种语言。

翻译使用与摘要类似的序列到序列模型。Pipeline API 为常见的语言对提供了更简单的接口。

来源

图像分类

图像分类示例展示了如何对图像进行分类。

图像分类模型使用图像处理器来处理图像,该处理器负责调整大小、标准化和其他预处理步骤。模型为每个类输出 logits,这些 logits 可以转换为预测标签。

来源

语义分割

语义分割涉及对图像中的每个像素进行分类。

语义分割模型为每个像素和类别输出 logits。结果是一个分割图,其中每个像素都被分配到一个类别。

来源

训练模型

Transformers 库提供了两种主要的模型训练方法:使用 Trainer API 或使用 Accelerate 实现自定义训练循环。

使用 Trainer API 进行训练

Trainer API 提供了一个高级接口,只需少量代码即可训练模型。

来源

使用 Accelerate 实现自定义训练循环

为了获得更大的灵活性,您可以使用 Accelerate 库实现自定义训练循环

来源

训练工作流的关键组件

无论使用 Trainer API 还是自定义训练循环,都有几个关键组件需要理解

1. 数据加载和预处理

来源

2. 模型和优化器初始化

来源

3. 训练循环实现

使用 Trainer API

使用自定义训练循环

来源

常见的训练工作流和示例

Transformers 库支持各种用于不同任务的训练工作流

任务模型类关键组件训练注意事项
因果语言建模AutoModelForCausalLM文本生成,困惑度评估大型模型的梯度检查点,闪存注意力
掩码语言建模AutoModelForMaskedLMToken 掩码,重建损失动态掩码 vs 静态掩码
文本分类AutoModelForSequenceClassification分类指标,标签平滑类别不平衡处理,提前停止
Token 分类AutoModelForTokenClassificationSeqeval 指标,Token 对齐子词 Token 处理,CRF 层
问答AutoModelForQuestionAnswering答案提取,F1/EM 指标上下文窗口限制,答案验证
摘要生成AutoModelForSeq2SeqLMROUGE 指标,束搜索长度惩罚,重复惩罚
翻译AutoModelForSeq2SeqLMBLEU/ROUGE 指标,束搜索不同语言的 Token 化
图像分类AutoModelForImageClassification图像预处理,准确率指标数据增强,分辨率处理
语义分割AutoModelForSemanticSegmentationIoU 指标,像素级分类分辨率权衡,边界细化
语音识别AutoModelForSpeechSeq2SeqWER/CER 指标,音频预处理音频长度处理,语言模型融合

来源

不使用 Trainer 的方法的优势

不使用 Trainer 的方法,而是使用 Accelerate,提供了几个优势

  1. 灵活性:对训练循环拥有完全的控制权
  2. 透明度:对过程的每一步都有清晰的可见性
  3. 自定义性:易于为日志记录、评估、检查点添加自定义逻辑
  4. 分布式训练:跨各种平台(CPU、GPU、TPU)的简化分布式训练
  5. 混合精度:无缝的混合精度训练
  6. 梯度累积:内置梯度累积支持

当出现以下情况时,此方法特别有用

  • 您需要实现自定义训练逻辑
  • 您想与其他库和工具集成
  • 您需要对优化过程进行精细控制
  • 您正在实现不适合标准训练范式的研究思路

有关实现不使用 Trainer 的工作流的更详细信息,请参阅 不使用 Trainer 的工作流