目录
一、项目前言
二、环境依赖安装
三、完整原生代码(和需求完全一致)
四、代码逐段详细解析
1. 模型与分词器加载
2. 提示词工程(核心分类逻辑)
3. 文本编码 tokenizer
4. 模型推理 generate 生成
5. 解码与结果截取
五、运行示例演示
输入
控制台打印流程
六、高频踩坑问题解决
问题 1:路径报错 HFValidationError: Repo id must use alphanumeric chars
问题 2:模型输出大量多余文字,只想要单一结果
问题 3:CPU 运行速度极慢
问题 4:模型文件夹缺失文件报错
七、拓展优化方向
八、总结
一、项目前言
很多新手想上手本地开源大模型做文本分类任务,但是不知道如何离线加载本地权重、如何通过提示词工程完成分类。本文使用阿里开源轻量模型 Qwen2.5-0.5B-Instruct,仅依靠transformers库,不需要微调、不需要训练数据集,一行输入即可完成电影评论情感三分类(正面、负面、中立),代码极简、适合新手入门本地 LLM 推理流程。
二、环境依赖安装
先安装运行所需第三方库,终端执行:
pip install torch transformers
- torch:深度学习张量计算框架
- transformers:HuggingFace 官方库,用于加载本地大模型、分词、推理生成
这里是在modelscope平台下载的Qwen2.5-1.5B-Instruct模型

三、完整原生代码(和需求完全一致)
from transformers import AutoModelForCausalLM,AutoTokenizer
# 本地模型文件夹相对路径
model_name=r"..\\qianwen\\Qwen2.5-1.5B-Instruct"
# 加载预训练大模型
model=AutoModelForCausalLM.from_pretrained(model_name)
# 加载对应分词器
tokenizer=AutoTokenizer.from_pretrained(model_name)
# 提示词模板:定义分类任务规则
prompt_template='请判断以下文本的情感属于哪个类别:{text}.可选类别有:正面、负面、中立。'
# 接收用户输入电影评论
input_text=input("请输入电影评价")
# 将用户文本填充进提示词模板
prompt_input=prompt_template.format(text=input_text)
print('prompt_input:',prompt_input)
# 分词编码,转为模型可识别张量
inputs=tokenizer(prompt_input,return_tensors="pt")
print("inputs:",inputs)
# 模型推理生成文本
output_sequences=model.generate(inputs.input_ids,max_new_tokens=512,attention_mask=inputs.attention_mask)
print("output_sequences:",output_sequences)
# 将数字张量解码为完整文本
generated_text=tokenizer.decode(output_sequences[0],skip_special_tokens=True)
print(generated_text)
# 截取模型新增回答部分,剔除输入prompt
text=generated_text[len(prompt_input):]
print("text:",text)
四、代码逐段详细解析
1. 模型与分词器加载
from transformers import AutoModelForCausalLM,AutoTokenizer
model_name=r"..\\qianwen\\Qwen2.5-1.5B-Instruct"
model=AutoModelForCausalLM.from_pretrained(model_name)
tokenizer=AutoTokenizer.from_pretrained(model_name)
2. 提示词工程(核心分类逻辑)
prompt_template='请判断下面的电影评价属于哪个类别,只告诉我是”正面、负面、中立“中的哪一种,只回答两个字,电影评价如下:{text}.'
input_text=input("请输入电影评价")
prompt_input=prompt_template.format(text=input_text)
- 无需训练,依靠自然语言指令约束模型输出分类结果;
- {text}为占位符,通过format()填充用户输入的影评文本;
- 任务逻辑:告诉模型仅从「正面、负面、中立」三选一输出结果。
3. 文本编码 tokenizer
inputs=tokenizer(prompt_input,return_tensors="pt")
- 大模型无法直接读取文字,需要分词转换为数字 ID(input_ids);
- return_tensors="pt":返回 PyTorch 张量格式,适配模型输入;
- 返回对象包含两个关键参数:
- input_ids:文本分词后的数字编码;
- attention_mask:掩码,1 代表有效文本,0 代表填充占位。
4. 模型推理 generate 生成
output_sequences=model.generate(inputs.input_ids,max_new_tokens=512,attention_mask=inputs.attention_mask)
- generate():LLM 文本生成核心函数,自动续写文本;
- max_new_tokens=512:限制模型最多生成 512 个词,防止无限输出;
- attention_mask:传入掩码,让模型忽略填充占位符。
5. 解码与结果截取
generated_text=tokenizer.decode(output_sequences[0],skip_special_tokens=True)
text=generated_text[len(prompt_input):]
print("text:",text)
五、运行示例演示
输入
请输入电影评价:这部电影剧情拖沓,演员演技很差,完全不值得看
控制台打印流程
prompt_input: 请判断以下文本的情感属于哪个类别:这部电影剧情拖沓,演员演技很差,完全不值得看.可选类别有:正面、负面、中立。
请判断以下文本的情感属于哪个类别:这部电影剧情拖沓,演员演技很差,完全不值得看.可选类别有:正面、负面、中立。
该文本情感类别为负面
text: 该文本情感类别为负面
六、拓展优化方向
七、总结
本文使用最原生、无多余封装的 transformers 代码,完整演示本地 Qwen2.5 大模型离线推理流程,仅依靠提示词工程实现文本情感分类,无需数据集、无需微调,非常适合新手学习本地 LLM 基础开发流程。代码结构清晰,每一步都有打印日志,方便调试、理解大模型输入输出完整链路。

