ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AutoClass 加载预训练模型:[特殊字符] Transformers 自动架构推断与加载实战指南

使用 AutoClass 加载预训练模型:[特殊字符] Transformers 自动架构推断与加载实战指南 使用 AutoClass 加载预训练模型 Transformers 自动架构推断与加载实战指南【免费下载链接】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面对层出不穷的 Transformer 架构为某个 checkpoint 手动匹配正确的模型类往往令人头疼。 Transformers 提供的AutoClass家族能够从给定的权重集合checkpoint中自动推断并加载正确的架构配合from_pretrained()方法可以让你无需从头训练即可快速复用任何架构的预训练模型。读完本文你将掌握AutoTokenizer、AutoImageProcessor、AutoBackbone、AutoFeatureExtractor、AutoProcessor与AutoModelFor*系列类的完整用法并理解其底层自动映射机制从而写出与具体 checkpoint 解耦、可随意迁移的模型加载代码。认识 AutoClass从 checkpoint 自动推断架构Transformer 生态中存在大量不同的模型架构为一个 checkpoint 手动挑选正确的架构类既繁琐又容易出错。AutoClass正是为化解这一痛点而生它根据 checkpoint 中的配置文件自动推断model_type从而在运行时选择合适的类进行实例化让 Transformers 保持易于使用、简单且灵活的核心设计理念。使用from_pretrained()加载的代码与具体 checkpoint 解耦只要你的代码适用于一个 checkpoint它就能适用于另一个 checkpoint——前提是它们针对类似任务进行过训练——即便底层架构完全不同。架构 vs. checkpoint 辨析架构architecture指的是模型的骨架结构checkpoint权重集合则是对应架构下的具体权重。例如 BERT 是一种架构而google-bert/bert-base-uncased是一个 checkpoint。模型是一个通用术语既可以指架构也可以指权重集合。从源码看这套自动推断机制的核心位于 src/transformers/models/auto/ 目录下AutoConfigconfiguration_auto.py首先读取 checkpoint 的config.json确定model_type随后各 Auto 类依据该类型从注册表中选出对应的实现。需要特别说明的是所有 Auto 类都不能通过__init__()直接实例化——例如 AutoTokenizer 的构造函数会直接抛出OSError提示必须通过AutoTokenizer.from_pretrained(pretrained_model_name_or_path)来使用。本教程将依次演示如何加载预训练的分词器tokenizer预训练的图像处理器image processor预训练的特征提取器feature extractor预训练的处理器processor预训练的模型modelAutoTokenizer几乎所有 NLP 任务的起点几乎所有的自然语言处理NLP任务都以 tokenizer 开始。tokenizer 负责将原始文本转换为模型可以处理的输入格式。使用AutoTokenizer.from_pretrained加载分词器 from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained(google-bert/bert-base-uncased)然后对原始文本进行分词 sequence In a hole in the ground there lived a hobbit. print(tokenizer(sequence)) {input_ids: [101, 1999, 1037, 4920, 1999, 1996, 2598, 2045, 2973, 1037, 7570, 10322, 4183, 1012, 102], token_type_ids: [0, 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, 1]}输出中的三个字段含义如下input_ids每个 token 在词表中的索引序列首尾的101与102分别是 BERT 的[CLS]和[SEP]特殊标记token_type_ids区分不同句段的段 ID本例为单句输入故全为 0attention_mask注意力掩码标记哪些位置是真实 token1而非填充0。AutoTokenizer.from_pretrained的参数非常灵活。依据其源码 docstringtokenization_auto.py第一个参数pretrained_model_name_or_path支持三种形式Hugging Face Hub 上的模型 ID 字符串包含词表文件的本地目录路径例如用~PreTrainedTokenizer.save_pretrained保存的目录如./my_model_directory/单个词表文件的路径仅当该 tokenizer 只需一个词表文件时适用如 Bert、XLNet例如./my_model_directory/vocab.txt并非所有派生类都支持。其余常用参数还包括config用于决定加载哪个 tokenizer 类的配置对象cache_dir指定模型权重与配置的本地缓存目录force_download是否强制重新下载并覆盖已有缓存默认Falserevision指定模型版本可以是分支名、标签名或提交 ID默认mainsubfolder模型文件位于 Hub 仓库子目录时指定如facebook/rag-token-basebackend分词后端可选tokenizers默认使用 HuggingFace tokenizers 库或sentencepiecetrust_remote_code是否允许执行 Hub 上自定义模型的代码默认False仅对完全信任且已阅读过源码的仓库开启其余 kwargs 会透传给 tokenizer 的__init__()可用于设置bos_token、eos_token、pad_token、cls_token、mask_token等特殊 token。AutoImageProcessor视觉任务的预处理入口对于视觉任务图像处理器image processor负责将图像处理成模型要求的正确输入格式。 from transformers import AutoImageProcessor image_processor AutoImageProcessor.from_pretrained(google/vit-base-patch16-224)从源码看AutoImageProcessor 会根据 checkpoint 的image_processor_type或配置文件自动选择对应的图像处理类与AutoTokenizer遵循相同的自动映射设计哲学。AutoBackbone复用预训练主干提取多阶段特征图AutoBackbone允许你将预训练模型作为主干网络backbone从主干的不同阶段获取特征图feature maps这在目标检测、语义分割等下游视觉任务中极为常用。使用时需要在~PreTrainedConfig.from_pretrained中指定以下两个参数之一out_indices你想获取特征图的层索引out_features你想获取特征图的层名称。这两个参数可以互换使用但如果同时传入两者务必保证它们彼此对齐若两个参数都未传backbone 默认返回最后一层的特征图。例如下图示意了 Swin backbone 的多个阶段如何产出特征图patch partition 指模型的 stem 部分要获取 Swin backbone 第一阶段stage 1的特征图可设置out_indices(1,) from transformers import AutoImageProcessor, AutoBackbone import torch from PIL import Image import requests url http://images.cocodataset.org/val2017/000000039769.jpg image Image.open(requests.get(url, streamTrue).raw) processor AutoImageProcessor.from_pretrained(microsoft/swin-tiny-patch4-window7-224) model AutoBackbone.from_pretrained(microsoft/swin-tiny-patch4-window7-224, out_indices(1,)) inputs processor(image, return_tensorspt) outputs model(**inputs) feature_maps outputs.feature_maps此时即可访问第一阶段 backbone 产生的feature_maps对象 list(feature_maps[0].shape) [1, 96, 56, 56]输出的[1, 96, 56, 56]表示 batch 大小为 1、通道数为 96、空间尺寸为 56×56 的特征图这正是 Swin-Tiny 第一阶段输出的典型尺寸。AutoBackbone 的实现与完整说明可进一步参考 backbones.md 以及model_doc/auto文档。AutoFeatureExtractor音频信号的特征处理对于音频任务特征提取器feature extractor负责将原始音频信号处理成模型要求的正确输入格式。使用AutoFeatureExtractor.from_pretrained加载特征提取器 from transformers import AutoFeatureExtractor feature_extractor AutoFeatureExtractor.from_pretrained( ... ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition ... )AutoFeatureExtractor 与AutoTokenizer、AutoImageProcessor同属自动映射机制家族会根据 checkpoint 的feature_extractor_type自动选择合适的实现类。AutoProcessor多模态任务的预处理组合器多模态任务需要一个processor处理器将两类预处理工具组合起来。例如 LayoutLMV2 模型既需要图像处理器来处理图片又需要 tokenizer 来处理文本而 processor 将两者合二为一一次调用即可完成多模态输入的预处理。使用AutoProcessor.from_pretrained加载处理器 from transformers import AutoProcessor processor AutoProcessor.from_pretrained(microsoft/layoutlmv2-base-uncased)处理器在推理与微调阶段都能显著简化代码你无需分别调用图像处理器和分词器只需对processor传入图像与文本即可得到模型前向所需的全部输入张量。AutoModelFor*按任务加载对应的模型头最后AutoModelFor*系列类允许你为给定任务加载预训练模型完整的任务列表参见 model_doc/auto 文档。例如使用AutoModelForSequenceClassification.from_pretrained加载一个用于序列分类的模型 from transformers import AutoModelForSequenceClassification model AutoModelForSequenceClassification.from_pretrained(distilbert/distilbert-base-uncased)AutoClass的一个强大特性是可以轻松复用同一个 checkpoint为不同任务加载不同的架构。例如用同一份权重加载一个用于 token 分类如命名实体识别的模型 from transformers import AutoModelForTokenClassification model AutoModelForTokenClassification.from_pretrained(distilbert/distilbert-base-uncased)从源码结构看modeling_auto.py 中定义了庞大的AutoModelFor*家族包括AutoModelForPreTraining、AutoModelForCausalLM、AutoModelForMaskedLM、AutoModelForSeq2SeqLM、AutoModelForQuestionAnswering、AutoModelForTokenClassification、AutoModelForMultipleChoice、AutoModelForImageClassification等起始于 modeling_auto.py 的AutoModel及其后续一系列任务专属类这些类均继承自_BaseAutoModelClass共享同一套基于model_type的自动分发逻辑。⚠️ 安全警告PyTorch 权重加载的 pickle 风险对于 PyTorch 模型from_pretrained()内部使用torch.load()后者基于pickle实现而pickle已知存在安全隐患。永远不要加载可能来自不可信来源、或可能被篡改的模型。这一风险对 Hugging Face Hub 上公开托管的模型已部分缓解——这些模型在每次更新时都会经过恶意软件扫描。建议遵循 Hub 官方安全文档中的最佳实践例如使用 GPG 验证签名提交。TensorFlow 与 Flax 的 checkpoint 不受此问题影响可以通过from_pretrained的from_tf和from_flax参数将其加载到 PyTorch 架构中从而规避该风险。最佳实践总结总的来说官方推荐始终使用AutoTokenizer和AutoModelFor*系列类来加载预训练的 tokenizer 与模型这能保证每次都能加载到正确的架构。本教程中所有加载到的组件——tokenizer、图像处理器、特征提取器与处理器——都可以在下一个预处理教程中组合使用用于对数据集进行预处理并为模型微调fine-tuning做准备。这套checkpoint 无关的加载范式正是 Transformers 让预训练模型复用变得简单、灵活的关键所在。【免费下载链接】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),仅供参考
返回列表