HuggingFace是一家技术公司,他拥有一个著名的开源社区,维护了几乎所有Transformer架构的开源模型和一系列强大的开源库和工具,这些开源工作极大地简化了深度学习模型的开发、训练和部署过程。
HuggingFace的社区非常活跃,包括Meta、Google、DeepSeek、Ali Qwen等再内的超过5000家组织机构都在为HuggingFace开源社区贡献代码、数据集和模型,这种开放的文化和协作精神使得HuggingFace成为了深度学习领域的GitHub。
虽然HuggingFace的很多工具和代码都是开源、免费的,但他也提供了一些商业服务和产品,例如AutoNLP和Inference API,这些服务可以帮助企业更容易地集成和部署NLP模型。





如何下载模型
在HuggingFace上下载模型需要设置镜像,需要设置环境变量:
export HF_ENDPOINT=https://hf-mirror.com也可以配置在代码里:
import os os.environ['HF_ENDPOINT']='https://hf-mirror.com'从Huggingface下载模型需要安装huggingface_hub库:
pip install -U huggingface_hub之后可以使用huggingface-cli download命令下载:
huggingface-cli download bert-based-chinese --resume-download --local-dir ${your_local_dir}或者使用python脚本下载:
from huggingface_hub import snapshot_download # 下载模型 snapshot_download(repo_id="bert-base-chinese", local_dir="/path/to/local/directory")如果在HuggingFace下载模型遇到困难,也可以到魔搭社区 (modelscope) 去寻找对应的模型。
魔搭社区:首页 - ModelScope 魔搭社区
首先需要安装modelscope:
pip install -U modelscope
- 可以通过modelscope hub下载模型:
from modelscope.hub.snapshot_download import snapshot_download # 下载模型到指定目录 model_dir = snapshot_download('damo/nlp_xlmr_named-entity-recognition_viet-ecommerce-title', cache_dir='path/to/local/dir')
- 或者通过命令行下载模型:
modelscope download --model damo/nlp_xlmr_named-entity-recognition_viet-ecommerce-title --local_dir path/to/local/dir
主流的模型文件格式:
PyTorch bin文件:是pyTorch模型权重的存储格式,它是一种二进制文件,用于保存PyTorch模型的参数。这种格式由PyTorch的torch.save方法生成,并且可以通过torch.load方法加载。
.onnx :ONNX是一种开放的模型格式,支持多种深度学习框架之间的模型转换和共享,即可以将模型从一个框架导出,然后在另一个框架中加载和使用。ONNX文件中包含了网络的计算拓扑结构,因此ONNX Runtime可以直接加载ONNX文件进行推理,无需额外的代码。
.safetensors: 是HuggingFace开发的一种高效、安全且易于使用的深度学习模型存储格式,专门用于存储和加载张量。Safetensors不包含可执行代码,因此不会执行潜在的恶意代码。此外,SafeTensors的加载速度快,支持多种语言和平台,是HuggingFace首选的模型文件格式。
Transformers库介绍
Transformers是HuggingFace开源的用于Transformer架构模型训练和推理的库。
HuggingFace网站上有Transformers的文档。
或者从魔搭上下载:
跟进去了bert模型:
对应👇
test_transformers.py:
from transformers import AutoTokenizer, AutoModel import torch # 指定模型名称 model_name = "/Users/wangruonan/Documents/Code/SF130/深度学习/model/bert-base-chinese" # 加载 Tokenizer 和模型 tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModel.from_pretrained(model_name) # 输入文本 input_text = "AutoModel是Hugging Face的Transformers库中的一个非常实用的类,它属于自动模型选择的机制。" # 编码输入 inputs = tokenizer(input_text, return_tensors="pt") input_ids = inputs["input_ids"] attention_mask = inputs['attention_mask'] # 获取模型输出 with torch.no_grad(): outputs = model(input_ids, attention_mask=attention_mask) # 获取最后一层隐藏状态 last_hidden_states = outputs.last_hidden_state # 输出维度 print(f"Last hidden state shape: {last_hidden_states.shape}")
1.Tokenizer
文档:https://huggingface.co/docs/transformers/main_classes/tokenizer
Tokenizer负责将文本转化为模型输入。Tokenizer需要做的事情包括:
- 将文本切分成token序列,每个token用id来表示。
- 在token序列中根据预训练模型的要求添加特殊token。
2.AutoTokenizer
AutoTokenizer用于自动加载与特定训练模型相关联的分词器 (tokenizer)。它能够根据模型的名称或路径自动识别并加载对应的分词器配置和词汇表文件,使得用户无需手动指定分词器的具体类型,从而简化了分词器的使用过程。
从预训练模型名称加载分词器:
from transformers import AutoTokenizer # 指定预训练模型的名称 model_name = "bert-base-chinese" # 自动加载对应的分词器 tokenizer = AutoTokenizer.from_pretrained(model_name) # 使用分词器对文本进行编码 texts = ["梯度检查点(Gradient Checkpointing)在上述两种方式之间取了一个平衡。"] encoded_input = tokenizer(texts, return_tensors="pt") print(encoded_input) # BertTokenizer同时可以输入两个句子 sentence1 = "梯度检查点(Gradient Checkpointing)在上述两种方式之间取了一个平衡。" sentence2 = "它通过在反向传播过程中重新计算某些输出的方式减少显存的使用量。" encoded_input = tokenizer( text=sentence1, text_pair=sentence2, add_special_tokens=True, # 添加[CLS]和[SEP] return_tensor="pt" #返回PyTorch Tensor )Tokenizer的主要接口:
- tokenizer.encode: 将文本编码为标记ID列表
encoded_ids = tokenizer.encode(text) print(encoded_ids)
tokenizer.encode_plus : 将文本编码为标记ID列表,并返回额外的信息 (例如注意力掩码)
encoded_plus = tokenizer.encode_plus(text, return_tensors="pt") print(encoded_plus)
tokenizer.__call__: 支持对多个文本进行编码
encoded = tokenizer(text, return_tensors="pt") print(encoded)
tokenizer.decode : 将标记ID列表解码为原始文本
decoded_text = tokenizer.decode(encoded_ids, skip_special_tokens=True) print(decoded_text)3.AutoModel
AutoModel提供了一种自动加载预训练模型的机制。AutoModel及其子类能够根据模型名称自动加载相应的预训练模型架构和权重。
以下是一些常见的AutoModel类:
类名
描述
AutoModel
加载预训练的基础模型,不包含任何特定任务的输出层
AutoModelForCausalLM
加载用于因果解码 (LLM架构)的模型
AutoModelForMaskedLM
加载用于MLM预训练任务的模型
AutoModelForSeq2SeqLM
加载适用于Seq2Seq任务的模型
AutoModelForQuestionAnswering
加载适用于问答任务的模型
AutoModelForTokenClassification
加载用于序列标注任务的模型
AutoModelForSequenceClassification
加载用于序列分类任务的模型
以下是一个使用AutoModel的示例代码:
from transformers import AutoTokenizer, AutoModel # 指定模型名称 model_name = "bert-base-chinese" # 加载 Tokenizer 和模型 tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModel.from_pretrained(model_name) # 输入文本 input_text = "AutoModel是Hugging Face的Transformers库中的一个非常实用的类,它属于自动模型选择的机制。" # 编码输入 inputs = tokenizer(input_text, return_tensors="pt") # 获取模型输出 with torch.no_grad(): outputs = model(**inputs) # 获取最后一层隐藏状态 last_hidden_states = outputs.last_hidden_state # 输出维度 print(f"Last hidden state shape: {last_hidden_states.shape}")























































9217



被折叠的 条评论
为什么被折叠?



