资讯动态

[特殊字符] Transformers 快速上手指南:pipeline 推理、AutoClass 加载与 Trainer 训练实战

发布时间:2026/9/10 11:33:20 来源:尧图企业网站定制
Transformers 快速上手指南pipeline 推理、AutoClass 加载与 Trainer 训练实战【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本文基于仓库 docs/source/fr/quicktour.md法语版快速入门的核心脉络展开并结合 src/transformers 源码进行深度佐证。内容覆盖三类关键能力用pipeline一行代码完成文本、图像、音频、多模态推理用AutoClass家族自动加载预训练模型与预处理器以及用Trainer/ Keras 快速完成模型微调训练。读完本文你将掌握从安装、推理到微调、保存与跨框架转换的完整实战链路。环境准备与安装在开始之前请确保已经安装了 Transformers 及其生态依赖库!pip install transformers datasets evaluate accelerate同时安装你偏好的深度学习框架本指南以 PyTorch 为例pip install torchdatasets加载与预处理数据集下文 ASR 示例会用到evaluate评估模型指标accelerate为Trainer提供分布式训练与混合精度等能力。用 pipeline 快速开始推理pipeline是使用预训练模型做推理的最简单方式——它会自动完成「预处理 → 模型前向 → 后处理」的完整链路。你只需要指定任务标识符即可在不同模态文本、图像、音频、视频、多模态下开箱即用。官方文档给出了如下任务总览任务说明模态pipeline 标识符文本分类为给定文本序列分配类别文本pipeline(tasksentiment-analysis)文本生成根据提示生成文本文本pipeline(tasktext-generation)命名实体识别为序列中每个 token 分配类别人物、组织、地点等文本pipeline(taskner)问答根据上下文和问题从文本中抽取答案文本pipeline(taskquestion-answering)掩码词预测预测序列中被掩码的 token文本pipeline(taskfill-mask)图像分类为图像分配类别图像pipeline(taskimage-classification)图像分割为图像每个像素分配类别支持语义、全景、实例分割图像pipeline(taskimage-segmentation)目标检测预测图像中物体的边界框与类别图像pipeline(taskobject-detection)音频分类为音频文件分配类别音频pipeline(taskaudio-classification)自动语音识别将音频中的语音转写为文本音频pipeline(taskautomatic-speech-recognition)视觉问答给定图像与问题回答关于图像的问题多模态pipeline(taskvqa)第一个示例情感分析创建pipeline实例并指定任务即可 from transformers import pipeline classifier pipeline(sentiment-analysis)首次调用时pipeline会从模型中心下载并缓存一个默认的情感分析模型源码注册表中text-classification任务对应的默认模型为distilbert/distilbert-base-uncased-finetuned-sst-2-english见 src/transformers/pipelines/init.py及其默认 tokenizer。之后就可以直接对任意文本做分类 classifier(We are very happy to show you the Transformers library.) [{label: POSITIVE, score: 0.9998}]输出是一个字典列表包含label类别与score置信度。批量推理向pipeline传入一个文本列表即可一次性得到多个结果 results classifier([We are very happy to show you the Transformers library., We hope you dont hate it.]) for result in results: ... print(flabel: {result[label]}, avec le score de: {round(result[score], 4)}) label: POSITIVE, avec le score de: 0.9998 label: NEGATIVE, avec le score de: 0.5309在数据集上迭代自动语音识别实战pipeline还可以对整个数据集进行迭代处理。以自动语音识别ASR为例先加载指定模型 import torch from transformers import pipeline speech_recognizer pipeline(automatic-speech-recognition, modelfacebook/wav2vec2-base-960h)automatic-speech-recognition任务在源码注册表中的默认模型正是facebook/wav2vec2-base-960h见 src/transformers/pipelines/init.py此处显式指定模型以加深印象。接着用datasets加载一个音频数据集此处以PolyAI/minds14的en-US子集为例 from datasets import load_dataset, Audio dataset load_dataset(PolyAI/minds14, nameen-US, splittrain) # doctest: IGNORE_RESULT关键一步必须确保数据集的采样率与模型训练时的采样率一致。通过cast_column配合speech_recognizer.feature_extractor.sampling_rate自动完成重采样 dataset dataset.cast_column(audio, Audio(sampling_ratespeech_recognizer.feature_extractor.sampling_rate))这样在访问audio列时音频文件会被自动加载并重采样。取前 4 个样本的原始波形数组传给 pipeline result speech_recognizer(dataset[:4][audio]) print([d[text] for d in result]) [I WOULD LIKE TO SET UP A JOINT ACCOUNT WITH MY PARTNER HOW DO I PROCEED WITH DOING THAT, FODING HOW ID SET UP A JOIN TO HET WITH MY WIFE AND WHERE THE AP MIGHT BE, I ID LIKE TOY SET UP A JOINT ACCOUNT WITH MY PARTNER IM NOT SEEING THE OPTION TO DO IT ON THE AP SO I CALLED IN TO GET SOME HELP CAN I JUST DO IT OVER THE PHONE WITH YOU AND GIVE YOU THE INFORMATION OR SHOULD I DO IT IN THE AP AND IM MISSING SOMETHING UQUETTE HAD PREFERRED TO JUST DO IT OVER THE PHONE OF POSSIBLE THINGS, HOW DO I THURN A JOIN A COUNT]性能提示对于输入体积较大如语音、视觉领域的大数据集建议使用生成器generator逐个产出输入而不是一次性把全部数据加载进内存避免内存溢出。在 pipeline 中更换模型与 tokenizerpipeline可以与模型中心上的任意模型搭配使用从而轻松适配不同场景。例如需要处理法语文本时可以选用一个多语言情感分析模型nlptown/bert-base-multilingual-uncased-sentiment model_name nlptown/bert-base-multilingual-uncased-sentiment用AutoModelForSequenceClassification与AutoTokenizer加载对应的预训练模型和分词器AutoClass的细节见下一节 from transformers import AutoTokenizer, AutoModelForSequenceClassification model AutoModelForSequenceClassification.from_pretrained(model_name) tokenizer AutoTokenizer.from_pretrained(model_name)将模型与 tokenizer 显式传入pipeline即可处理法语文本 classifier pipeline(sentiment-analysis, modelmodel, tokenizertokenizer) classifier(Nous sommes très heureux de vous présenter la bibliothèque Transformers.) [{label: 5 stars, score: 0.7273}]如果找不到适合你场景的现成模型就需要在自有数据上微调finetune一个预训练模型微调完成后还可以把模型分享到模型中心供社区复用。AutoClass自动加载预训练模型与预处理器上一节中的AutoModelForSequenceClassification与AutoTokenizer协同工作构成了pipeline的底层。AutoClass是一个便捷的快捷方式只需给定预训练模型的名称或本地路径它就会自动推断并加载正确的模型架构与对应的预处理类。你只需要为任务选择合适的AutoClass及其关联的预处理类即可。AutoClass 系列的统一工厂实现位于 src/transformers/models/auto/auto_factory.py各预处理自动类则分布在 src/transformers/models/auto 目录下如tokenization_auto.py、image_processing_auto.py、feature_extraction_auto.py、processing_auto.py。AutoTokenizer文本 → 数字数组tokenizer 负责把文本预处理成模型可消费的数字数组。分词规则繁多如何切分单词、切分到何种粒度等因此必须使用与预训练模型同名同路径的 tokenizer确保采用与模型预训练时完全一致的分词规则。 from transformers import AutoTokenizer model_name nlptown/bert-base-multilingual-uncased-sentiment tokenizer AutoTokenizer.from_pretrained(model_name)对文本进行编码 encoding tokenizer(We are very happy to show you the Transformers library.) print(encoding) {input_ids: [101, 11312, 10320, 12495, 19308, 10114, 11391, 10855, 10103, 100, 58263, 13299, 119, 102], token_type_ids: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}tokenizer 返回的字典包含字段的规范释义可查阅词汇表文档 docs/source/en/glossary.mdinput_idstoken 的数字表示每个 id 对应词表中的一个 token[CLS]101 与[SEP]102 为特殊标记attention_mask指示哪些 token 应参与注意力计算通常用于标记填充位token_type_ids区分序列片段如句子对任务中的第一句/第二句。tokenizer 同样支持文本列表并通过padding、truncation与max_length参数将批次规整为统一长度、返回指定框架的张量 pt_batch tokenizer( ... [We are very happy to show you the Transformers library., We hope you dont hate it.], ... paddingTrue, ... truncationTrue, ... max_length512, ... return_tensorspt, ... )paddingTrue按批次内最长样本补齐truncationTrue超长文本截断max_length512最大序列长度上限return_tensorspt返回 PyTorch 张量tf对应 TensorFlow。关于 tokenizer 的底层机制可进一步阅读 docs/source/en/tokenizer_summary.md。此外AutoImageProcessor、AutoFeatureExtractor与AutoProcessor分别负责图像、音频与多模态内容的预处理用法与AutoTokenizer一致——其中图像处理自动类与特征提取自动类的实现位于 src/transformers/models/auto/image_processing_auto.py 与 src/transformers/models/auto/feature_extraction_auto.py。AutoModel统一加载预训练实例 Transformers 提供了统一便捷的预训练实例加载方式加载AutoModel与加载AutoTokenizer的方法完全一致唯一区别是根据任务选择合适的AutoModel子类。对文本/序列分类任务应选择AutoModelForSequenceClassification from transformers import AutoModelForSequenceClassification model_name nlptown/bert-base-multilingual-uncased-sentiment pt_model AutoModelForSequenceClassification.from_pretrained(model_name)将预处理好的样本直接传入模型——只需用**解包字典 pt_outputs pt_model(**pt_batch)模型的最终激活值保存在logits属性中对其施加 softmax 即可得到概率分布 from torch import nn pt_predictions nn.functional.softmax(pt_outputs.logits, dim-1) print(pt_predictions) tensor([[0.0021, 0.0018, 0.0115, 0.2121, 0.7725], [0.2084, 0.1826, 0.1969, 0.1755, 0.2365]], grad_fnSoftmaxBackward0)重要原理所有 Transformers 模型PyTorch 与 TensorFlow输出的都是激活函数如 softmax之前的张量因为最终激活通常与损失函数计算合并在一起。模型输出的结构是特殊的数据类如SequenceClassifierOutput其属性在 IDE 中支持自动补全同时它又表现得像 tuple 或 dict可用整数、切片或字符串索引其中为None的属性会被忽略。保存与重载模型微调完成后可以用save_pretrained将模型连同 tokenizer 一起保存PreTrainedTokenizerBase.save_pretrained与PreTrainedModel.save_pretrained的实现分别位于 src/transformers/tokenization_utils_base.py 与 src/transformers/modeling_utils.py pt_save_directory ./pt_save_pretrained tokenizer.save_pretrained(pt_save_directory) # doctest: IGNORE_RESULT pt_model.save_pretrained(pt_save_directory)需要复用时用from_pretrained重新加载 pt_model AutoModelForSequenceClassification.from_pretrained(./pt_save_pretrained) Transformers 一个非常实用的特性是模型保存后可以跨框架加载。通过from_pt或from_tf参数可以在 PyTorch 与 TensorFlow 之间相互转换 from transformers import AutoModel tokenizer AutoTokenizer.from_pretrained(pt_save_directory) pt_model AutoModelForSequenceClassification.from_pretrained(pt_save_directory, from_ptTrue)自定义模型结构从 AutoConfig 出发你可以通过修改模型配置configuration来改变模型的构建方式。配置指定了模型的各项属性例如层数、注意力头数等。从自定义配置初始化模型相当于从零开始——模型参数是随机初始化的必须先训练才能产生有意义的输出。先导入AutoConfig再加载想要修改的预训练模型配置。在from_pretrained中可以直接覆盖想要修改的属性例如注意力头数 from transformers import AutoConfig my_config AutoConfig.from_pretrained(distilbert/distilbert-base-uncased, n_heads12)然后用AutoModel.from_config基于该配置创建自定义模型from_config的实现见 src/transformers/models/auto/auto_factory.py from transformers import AutoModel my_model AutoModel.from_config(my_config)TrainerPyTorch 优化的训练循环所有 Transformers 模型都是标准的torch.nn.Module可以直接放进任何常规训练循环。虽然你可以手写训练循环但 Transformers 为 PyTorch 提供了Trainer类定义于 src/transformers/trainer.py它封装了基础训练循环并额外提供分布式训练、混合精度等能力。根据任务类型通常按以下 6 步向Trainer组装素材1. 一个PreTrainedModel或torch.nn.Module from transformers import AutoModelForSequenceClassification model AutoModelForSequenceClassification.from_pretrained(distilbert/distilbert-base-uncased)2.TrainingArguments包含可调的超参数学习率、批次大小、训练轮数等。不指定时使用默认值。以学习率为例源码默认值为5e-5、每设备训练批次默认 8、训练轮数默认 3.0见 src/transformers/training_args.pyoutput_dir为必填参数用于指定检查点与日志的保存目录 from transformers import TrainingArguments training_args TrainingArguments( ... output_dirpath/to/save/folder/, ... learning_rate2e-5, ... per_device_train_batch_size8, ... per_device_eval_batch_size8, ... num_train_epochs2, ... )3. 一个预处理类tokenizer、图像处理器或特征提取器 from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained(distilbert/distilbert-base-uncased)4. 加载数据集 from datasets import load_dataset dataset load_dataset(rotten_tomatoes) # doctest: IGNORE_RESULT5. 编写将数据集文本 token 化的函数并用map应用到整个数据集 def tokenize_dataset(dataset): ... return tokenizer(dataset[text]) dataset dataset.map(tokenize_dataset, batchedTrue)6. 用DataCollatorWithPadding把样本拼成批次自动完成动态 padding from transformers import DataCollatorWithPadding data_collator DataCollatorWithPadding(tokenizertokenizer)将以上所有组件组装进Trainer from transformers import Trainer trainer Trainer( ... modelmodel, ... argstraining_args, ... train_datasetdataset[train], ... eval_datasetdataset[test], ... processing_classtokenizer, ... data_collatordata_collator, ... ) # doctest: SKIP一切就绪后调用train()开始训练核心训练流程实现在 src/transformers/trainer.py trainer.train() # doctest: SKIP训练循环的定制方式翻译、摘要等序列到序列任务改用Seq2SeqTrainer与Seq2SeqTrainingArguments类深度定制如自定义损失函数、优化器、学习率调度器通过子类化Trainer并重写内部方法实现轻度扩展接入第三方库、监控训练进度、提前停止使用Callbacks。回调不修改训练循环本身需要修改类似损失函数这样的核心逻辑时必须重写Trainer子类。回调基类与内置回调可参见 src/transformers/trainer_callback.py。TensorFlow 训练prepare_tf_dataset Keras所有 Transformers 模型同时也是标准的tf.keras.Model可以用 Keras API 训练。 Transformers 提供prepare_tf_dataset函数把数据集便捷地包装成tf.data.Dataset随后即可用 Keras 的compile与fit立即开始训练。1. 加载一个TFPreTrainedModel或tf.keras.Model from transformers import TFAutoModelForSequenceClassification model TFAutoModelForSequenceClassification.from_pretrained(distilbert/distilbert-base-uncased)2. 准备预处理类 from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained(distilbert/distilbert-base-uncased)3. 编写 token 化函数 def tokenize_dataset(dataset): ... return tokenizer(dataset[text]) # doctest: SKIP4. 对整个数据集应用map再传给prepare_tf_dataset可在此设置批次大小与是否打乱 dataset dataset.map(tokenize_dataset) # doctest: SKIP tf_dataset model.prepare_tf_dataset( ... dataset, batch_size16, shuffleTrue, tokenizertokenizer ... ) # doctest: SKIP5. 调用compile与fit开始训练 from tensorflow.keras.optimizers import Adam model.compile(optimizerAdam(3e-5)) model.fit(tf_dataset) # doctest: SKIP提示文档原始示例中fit传入的是dataset但在实际使用时应传入第 4 步由prepare_tf_dataset生成的tf_dataset以确保输入已经过 token 化与批次组装。小结与延伸阅读至此你已经走完 Transformers 的完整快速上手链路推理pipeline一行代码覆盖文本/图像/音频/多模态任务支持批处理、数据集迭代与自定义模型替换加载AutoTokenizer、AutoModelFor*、AutoConfig自动推断架构支持保存、重载与 PyTorch/TensorFlow 跨框架转换训练PyTorch 侧用TrainerTrainingArgumentsDataCollatorWithPadding组装训练循环TensorFlow 侧用prepare_tf_dataset Keras 的compile/fit。官方文档本身也给出了后续进阶方向创建自定义模型架构、针对具体任务微调模型、用脚本训练模型以及深入学习 Transformer 的基础概念。可对照英文版快速入门 docs/source/en/quicktour.md 与任务总览 docs/source/fr/task_summary.md 继续探索微调后的模型分享给社区的方法见 docs/source/en/model_sharing.md。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价