在跑公司给的代码中遇到使用huggingface中的模型提取特征的操作,于是了解一下huggingface的使用流程和背后逻辑。
参考博客:huggingface.transformers速成笔记:Pipeline推理和AutoClass-阿里云开发者社区 (aliyun.com)
Huggingface的介绍,使用(CSDN最强Huggingface入门手册)_huggingface使用教程_小怪兽会微笑的博客-CSDN博客
需要提前安装transformers库,可以直接pip install transformers
安装。
公司代码中包含:
from transformers import AutoFeatureExtractor, AutoModel, AutoConfig
使用时:
feature_extractor = AutoFeatureExtractor.from_pretrained(model_name['WavLM_base_plus'])
config = AutoConfig.from_pretrained(self.model_name[model_key])
self.pre_model = AutoModel.from_pretrained(self.model_name[model_key], config=config)
不理解from_pretrained方法,于是查阅博客:
AutoFeatureExtractor, AutoModel, AutoConfig都属于AutoClass
AutoClass的from_pretrained()方法自动根据预训练模型的名称或路径提取其architecture,使用户可以迅速加载任何architecture的预训练模型,只需要根据任务选择特定的AutoClass即可直接调用模型。
-
AutoFeatureExtractor对于audio和vision任务,feature extractor将audio signal或图像转换为正确的输入格式。
-
AutoConfig用于加载预训练模型的超参,from_pretrained()函数中可以传入修改特定超参的入参。Config的初次构造相对简单,主要是通过hf_bucket_url函数将函数短名映射成为网络URL,形如'https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese-config.json'的一个json文件。下载它到cache目录,再读取构造对象即可。
- AutoModel用于加载预训练模型实例,返回一个标准的torch.nn.Module对象。torch.nn.Module解释:torch.nn.Module模块简单介绍-CSDN博客 PyTorch基础:神经网络工具箱torch.nn(nn.Module类)_torch.nn.module-CSDN博客
Model的构造也相对简单。需要先得到Config对象,然后查MODEL_MAPPING映射表,得到实际的Model Class。Model Class定义了类方法from_pretrained。这个方法会根据模型短名以及该模型是从TF还是PT训练的,利用hf_bucket_url函数转成相应的URL。TF2对应的模型文件名为tf_model.h5,PT对应的模型文件名为pytorch_model.bin。由于模型文件一般比较大,转换时采用了CDN域名,下载时采用了分块下载stream的方式。
from_pretrained方法,这个方法则一气完成了模型类别推理、模型文件列表映射、模型文件下载及缓存、类对象构建等一系列操作。 from_pretrained这个类方法,最重要的一个参数叫做pretrained_model_name_or_path。顾名思义,我们可以给出一个模型的短名,也可以给出一个路径。如果给的是模型短名,则它会想办法映射出要下载的文件的URL位置,并将文件下载到本地一个固定的cache目录。第二次再调用的时候,它会检查cache中是否已经存在同样的文件,如果有则直接从cache载入,不再走网络下载。如果给的是路径名,那么它假设该路径之下已经存在自行训练/预下载/经过微调的模型文件,直接载入。