使用HuggingFace 模型并预测

下载HuggingFace 模型

首先打开网址:https://huggingface.co/models 这个网址是huggingface/transformers支持的所有模型,目前大约一千多个。搜索gpt2(其他的模型类似,比如bert-base-uncased等),并点击进去。

进入之后,可以看到gpt2模型的说明页,点击页面中的list all files in model,可以看到模型的所有文件。
image

通常需要把保存的是三个文件以及一些额外的文件

  • 配置文件 -- config.json
  • 词典文件 -- vocab.json
  • 预训练模型文件
    pytorch -- pytorch_model.bin文件
    tensorflow 2 -- tf_model.h5文件

额外的文件,指的是merges.txtspecial_tokens_map.jsonadded_tokens.jsontokenizer_config.jsonsentencepiece.bpe.model等,这几类是tokenizer需要使用的文件,如果出现的话,也需要保存下来。没有的话,就不必在意。如果不确定哪些需要下,哪些不需要的话,可以把图1中类似的文件全部下载下来。

image

看下这几个文件都是什么:

  • config.json配置文件
    image
    包含了模型的类型、激活函数等配置信息

  • vocab.json 词典文件
    image

  • merges.txt
    image

使用HuggingFace模型

将上述下载的模型存储在本地:
image

加载本地HuggingFace模型
  1. 导入依赖
import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel

导入PyTorch框架和HuggingFace Transformers库的GPT-2组件

  1. 初始化分词器
tokenizer = GPT2Tokenizer.from_pretrained("../../Models/gpt2/")
text = "Who was Jim Henson ? Jim Henson was a"
indexed_tokens = tokenizer.encode(text)
print(indexed_tokens) # [8241, 373, 5395, 367, 19069, 5633]
# 转换为torch Tensor
token_tensor = torch.tensor([indexed_tokens])
print(token_tensor) # tensor([[ 8241,   373,  5395,   367, 19069,  5633]])

tokenizer.encode(text)执行流程如下:
分词器处理:
首先将文本分词为子词(subwords),如:
"Who was Jim Henson ?" → ['Who', 'Ġwas', 'ĠJim', 'ĠHen', 'son', '?']
ID转换:
然后将每个子词转换为对应的整数ID(来自vcab.json),如:
['Who', 'Ġwas', 'ĠJim', 'ĠHen', 'son', '?'] -> [8241, 373, 5395, 367, 19069, 5633]
可以查看vcab.json文件:
image

返回的是 token ID 列表(整数列表),而非词向量

  1. 加载预训练模型并预测
# 加载预训练模型
model = GPT2LMHeadModel.from_pretrained("../../Models/gpt2/")
# print(model)

model.eval()

with torch.no_grad():
    outputs = model(token_tensor)
    predictions = outputs[0]

# 我们需要预测下一个单词,所以是使用predictions第一个batch,最后一个词的logits去计算
# predicted_index = 582,通过计算最大得分的索引得到的
predicted_index = torch.argmax(predictions[0, -1, :]).item()
# 反向解码为我们需要的文本
predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])
# 解码后的文本:'Who was Jim Henson? Jim Henson was a man'
# 成功预测出单词 'man'
print(predicted_text)

输出结果:
image

原创作者: whiteBear 转载于: https://www.cnblogs.com/whiteBear/p/18881632
<think>好的,用户想了解如何使用Hugging Face的模型API,且需要教程和示例代码。首先,我需要根据提供的引用内容整理出一个清晰的步骤指南。 首先,用户提到的引用[2]、[3]、[4]都涉及Hugging Face Transformers库的使用,包括加载模型、创建API服务等步骤。因此,我应该从环境准备开始,然后逐步介绍模型选择、数据预处理、微调模型、评估和部署API服务这些步骤。 接下来,需要确保每个步骤都有对应的代码示例。例如,引用[2]中提到了加载BERT模型和分词器的代码,这部分可以直接作为示例。同时,引用[4]提到了使用FastAPI部署翻译服务,这可以作为API部署的示例。 还要注意用户提到的系统级指令,比如行内公式使用$...$,独立公式用$$...$$,但当前问题可能不涉及数学表达式,所以可能不需要这部分。但需要保持回答结构清晰,用中文回答,生成相关问题。 在整理步骤时,需要分点说明:环境准备、模型选择与加载、数据预处理、微调模型、评估、部署API。每个部分需要简短的说明和代码示例,代码部分用反引号包裹,注明语言。例如,加载模型的Python代码,FastAPI的示例代码。 最后,生成的相关问题需要与Hugging Face API使用相关,比如模型选择、性能优化、中文处理、FastAPI集成等。这些问题应基于提供的引用内容,确保有据可依。 检查是否有遗漏的步骤,比如数据预处理部分,引用[1]提到了数据预处理的小结,可能需要简要说明。但引用[2]、[4]中的示例更具体,所以应重点放在模型加载和API部署上。 确保回答符合用户要求的结构,步骤清晰,代码正确,引用标识正确添加。例如,在提到加载模型时引用[^2],在部署API时引用[^4],适合初学者的说明引用[^3]。 最后,验证所有引用是否正确对应,避免错误引用。例如,引用[1]虽然提到数据准备和预处理,但用户的问题更关注API使用,所以可能不需要深入数据预处理,但可以简要提及。 总结:回答应包括环境安装、模型加载、预处理示例、微调、评估、部署API,每个部分有代码和说明,结尾生成相关问题,正确引用来源。</think>### 使用Hugging Face模型API的教程与示例代码 以下是基于Hugging Face Transformers库的API调用流程,涵盖模型加载、数据预处理、微调及部署的完整步骤: --- #### 一、环境准备 首先安装必要的库: ```python pip install transformers torch fastapi uvicorn ``` Hugging Face Transformers库提供丰富的预训练模型接口,支持文本分类、翻译等任务。 --- #### 二、模型选择与加载 根据任务选择预训练模型。以中文文本分类为例,使用BERT模型: ```python from transformers import BertForSequenceClassification, BertTokenizer model_name = 'bert-base-chinese' model = BertForSequenceClassification.from_pretrained(model_name) tokenizer = BertTokenizer.from_pretrained(model_name) # 加载中文分词器[^2] ``` --- #### 三、数据预处理 对输入文本进行编码,生成模型可接受的张量格式: ```python text = "这是一个示例句子" inputs = tokenizer( text, padding=True, truncation=True, return_tensors="pt" # 返回PyTorch张量 ) ``` `padding`和`truncation`确保文本长度统一,避免维度错误[^1]。 --- #### 四、模型推理 调用模型进行预测: ```python outputs = model(**inputs) predictions = outputs.logits.argmax(dim=-1) # 获取分类结果 ``` --- #### 五、微调模型(可选) 如果需要适应特定任务,需准备数据集调整模型: ```python from transformers import Trainer, TrainingArguments training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=16 ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset # 需提前构建数据集 ) trainer.train() # 执行微调 ``` --- #### 六、部署API服务 使用FastAPI构建翻译API服务(以英中翻译为例): ```python from fastapi import FastAPI from transformers import pipeline app = FastAPI() translator = pipeline("translation", model="Helsinki-NLP/opus-mt-en-zh") @app.post("/translate/en2zh") def translate_en_to_zh(text: str): result = translator(text) return {"translation": result[0]['translation_text']} ``` 启动服务后可通过HTTP请求调用翻译接口[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值