本页面提供了如何使用 Hugging Face Transformers 库来处理各种 NLP、计算机视觉和多模态任务的实用示例。重点介绍了常见的用法模式、特定任务的示例以及使用 Trainer API 和自定义训练循环的实现方法。有关训练系统的详细信息,请参阅 训练系统。
Transformers 库旨在简化使用预训练模型处理各种任务的流程。以下是最常见的用法模式:
最基本的使用模式是加载预训练模型进行推理。
此模式遵循一般的工作流程:
from_pretrained() 方法初始化分词器和模型。来源: src/transformers/modeling_utils.py1500-1600 src/transformers/tokenization_utils_base.py2500-2600
对于特定任务,您可以使用 Auto* 系列中的相应模型类。
Auto* 类根据检查点名称自动选择合适的模型架构,方便在不同的模型实现之间切换。
来源
为了简化推理,Pipeline API 提供了一个高级接口。
Pipeline API 处理所有预处理和后处理步骤,使其成为快速原型设计和简单应用的理想选择。
来源
Transformers 库支持广泛的 NLP、视觉、音频和多模态任务。以下是主要特定任务示例的摘要:
语言建模示例使用模型来预测序列中的下一个词(CLM)或预测被掩码的词(MLM)。
用于文本生成等自回归任务。
generate() 方法支持许多参数来控制生成过程,包括采样策略、束搜索和约束。
来源
用于预测被掩码的词。
MLM 通常用于预训练,并可针对各种下游任务进行微调。
来源
文本分类示例包括情感分析、自然语言推理和其他监督分类问题。
文本分类模型通常输出可以用于通过 softmax 转换为概率的 logits。模型的配置包含从类 ID 到人类可读标签的映射。
来源
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 提供了一个高级接口,只需少量代码即可训练模型。
来源
为了获得更大的灵活性,您可以使用 Accelerate 库实现自定义训练循环
来源
无论使用 Trainer API 还是自定义训练循环,都有几个关键组件需要理解
来源
来源
使用 Trainer API
使用自定义训练循环
来源
Transformers 库支持各种用于不同任务的训练工作流
| 任务 | 模型类 | 关键组件 | 训练注意事项 |
|---|---|---|---|
| 因果语言建模 | AutoModelForCausalLM | 文本生成,困惑度评估 | 大型模型的梯度检查点,闪存注意力 |
| 掩码语言建模 | AutoModelForMaskedLM | Token 掩码,重建损失 | 动态掩码 vs 静态掩码 |
| 文本分类 | AutoModelForSequenceClassification | 分类指标,标签平滑 | 类别不平衡处理,提前停止 |
| Token 分类 | AutoModelForTokenClassification | Seqeval 指标,Token 对齐 | 子词 Token 处理,CRF 层 |
| 问答 | AutoModelForQuestionAnswering | 答案提取,F1/EM 指标 | 上下文窗口限制,答案验证 |
| 摘要生成 | AutoModelForSeq2SeqLM | ROUGE 指标,束搜索 | 长度惩罚,重复惩罚 |
| 翻译 | AutoModelForSeq2SeqLM | BLEU/ROUGE 指标,束搜索 | 不同语言的 Token 化 |
| 图像分类 | AutoModelForImageClassification | 图像预处理,准确率指标 | 数据增强,分辨率处理 |
| 语义分割 | AutoModelForSemanticSegmentation | IoU 指标,像素级分类 | 分辨率权衡,边界细化 |
| 语音识别 | AutoModelForSpeechSeq2Seq | WER/CER 指标,音频预处理 | 音频长度处理,语言模型融合 |
来源
不使用 Trainer 的方法,而是使用 Accelerate,提供了几个优势
当出现以下情况时,此方法特别有用
有关实现不使用 Trainer 的工作流的更详细信息,请参阅 不使用 Trainer 的工作流。