HuggingFace 可以理解为对于AI开发者的GitHub,提供了模型、数据集(文本|图像|音频|视频)、类库。
HuggingFace把AI项目的研发流程标准化,即准备数据集、定义模型、训练和测试。
Hugging Face GitHub:https://github.com/huggingface/
Hugging Face博客:https://huggingface.co/blog/zh

HuggingFace社区
HuggingFace是一个高速发展的社区。
包括Meta、Google、Microsoft、Amazon在内的超过5000家组织机构在为HuggingFace开源社区贡献代码、数据集和模型。
使用官方代码快速加载模型
通过 Hugging Face 提供的
transformers
库直接加载预训练模型。
BertTokenizer
会自动处理文本的分词工作,BertModel
则负责加载模型并初始化其权重。
from transformers import BertModel, BertTokenizer
# 加载BERT模型和分词器
model = BertModel.from_pretrained('bert-base-uncased')
手动下载并导入模型
在 Hugging Face 官网找到需要的模型,下载文件。
config.json
(模型配置)pytorch_model.bin
(模型权重)tokenizer_config.json
(分词器配置)tokenizer.json
(分词器的词表)vocab.txt
(BERT的词汇表)
创建 model
文件夹,将这些文件放入该目录,并通过以下代码加载模型。
import transformers
# 设置本地模型路径
MODEL_PATH = r"D:\model\bert-base-uncased"
# 加载本地存储的分词器
tokenizer = transformers.BertTokenizer.from_pretrained(r"D:\model\bert-base-uncased\vocab.txt")
# 加载模型配置和模型
model_config = transformers.BertConfig.from_pretrained(MODEL_PATH)
model = transformers.BertModel.from_pretrained(MODEL_PATH, config=model_config)
模型构建
通过
BertForQuestionAnswering
类初始化模型,专门用于问答任务。该模型会输出两个重要分数:
start_position
(答案的起始位置)和end_position
(答案的结束位置)。
from transformers import BertTokenizer, BertForQuestionAnswering
import torch
# 加载中文BERT模型和分词器
model = BertForQuestionAnswering.from_pretrained("bert-base-chinese")
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
模型输入与输出
例如,给定问题李明是谁?和文章李明是个学生,模型的输出应该是学生。
# 输入问题和上下文
question = "李明是谁?"
context = "李明是个学生"
# 对问题和上下文进行编码
inputs = tokenizer(question, context, return_tensors="pt")
# 进行推理,获取模型输出
outputs = model(**inputs)
# 提取start_logits和end_logits
start_logits = outputs.start_logits
end_logits = outputs.end_logits
# 找到最可能的答案起始和结束位置
start_position = torch.argmax(start_logits)
end_position = torch.argmax(end_logits)
解码答案:
通过
start_position
和end_position
提取对应的 token,从而得到答案。
# 将token ID转换为词
all_tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"].squeeze())
# 获取答案的token
answer_tokens = all_tokens[start_position : end_position + 1]
# 将tokens合并为最终的答案字符串
answer = tokenizer.convert_tokens_to_string(answer_tokens)
print("Answer:", answer) # 输出:学生