HuggingFace

月伴飞鱼 2025-04-13 17:21:08
AI相关 > AI工具
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

HuggingFace 可以理解为对于AI开发者的GitHub,提供了模型、数据集(文本|图像|音频|视频)、类库。

HuggingFace把AI项目的研发流程标准化,即准备数据集、定义模型、训练和测试。

Hugging Face GitHub:https://github.com/huggingface/

Hugging Face博客:https://huggingface.co/blog/zh

7d3a6e9d6898b45486e3992c1b8f291f

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_positionend_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)  # 输出:学生
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!