一、项目需求
1.技术选型
-
核心库:Hugging Face Transformers(大模型调用标准库)
-
模型:Qwen2.5-1.5B-Instruct(通义千问轻量版,兼顾效果与本地部署效率)
-
运行环境:Python 3.8+,PyTorch(模型推理基础框架)
二、完整代码与解析
1.代码:
python
from transformers import AutoModelForCausalLM, AutoTokenizer
# 1. 模型路径配置(本地缓存的Qwen2.5-1.5B-Instruct模型)
model_name = r"C:\Users\28706\.cache\modelscope\hub\models\Qwen\Qwen2___5-1___5B-Instruct"
# 2. 加载模型与分词器
# AutoModelForCausalLM:加载生成式因果语言模型(适配Qwen这类生成式LLM)
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="auto" # 自动分配设备(有GPU用GPU,无则用CPU)
)
# AutoTokenizer:加载与模型配套的分词器(保证文本编码格式匹配)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 3. 定义提示词模板(标准化输入格式,提升模型分类准确性)
prompt_template = "请判断以下文本属于哪个类别:{text}。可选类别有:正面、负面、中立。"
# 4. 交互式循环处理用户输入
while True:
# 获取用户输入
print("\n请输入电影评论(输入空行或q退出):")
input_text = input().strip()
# 退出条件判断
if not input_text or input_text.lower() == 'q':
print("程序退出!")
break
# 构建完整提示词
prompt_input = prompt_template.format(text=input_text)
# 5. 文本编码(转换为模型可识别的张量)
inputs = tokenizer(
prompt_input,
return_tensors="pt", # 返回PyTorch张量
truncation=True, # 截断超长文本(适配模型输入长度限制)
padding=True # 补全文本长度(保证输入格式统一)
)
# 将输入数据移到模型所在设备(GPU/CPU对齐)
inputs = inputs.to(model.device)
# 6. 模型推理生成结果
output_sequences = model.generate(
inputs.input_ids, # 编码后的文本ID
attention_mask=inputs.attention_mask, # 注意力掩码(避免模型关注padding部分)
max_new_tokens=4, # 限制生成长度(仅需输出"正面/负面/中立")
temperature=0.01, # 温度系数(越低越确定,避免随机输出)
do_sample=False, # 关闭采样(确保结果可复现)
pad_token_id=tokenizer.eos_token_id # 填充tokenID(防止运行报错)
)
# 7. 结果解码与提取
generated_text = tokenizer.decode(output_sequences[0], skip_special_tokens=True)
# 提取模型生成的分类结果(去掉原始提示词)
result = generated_text.replace(prompt_input, "").strip()
# 8. 输出结果
print(f"情感分类结果:{result}")
2.核心代码解析
(1)模型与分词器加载
-
AutoModelForCausalLM.from_pretrained():针对生成式大模型 的加载方法,Qwen2.5 属于因果语言模型(通过前文预测后文),因此选用该类,而非用于分类的AutoModelForSequenceClassification。 -
AutoTokenizer.from_pretrained():分词器是大模型的 "翻译官",将自然语言转换为模型能理解的数字 ID,必须与模型配套使用,否则会出现编码不兼容问题。 -
device_map="auto":自动识别并使用 GPU(如有),能大幅提升推理速度,是本地部署的关键优化。
(2)提示词模板设计
prompt_template 采用标准化格式,明确告知模型任务目标(情感分类)、输入文本位置、可选类别,这是提示词工程(Prompt Engineering) 的基础应用 ------ 清晰的提示词能让大模型无需微调即可完成特定任务。
(3)模型推理参数
-
max_new_tokens=4:限制生成 4 个字符,刚好覆盖 "正面 / 负面 / 中立"(最多 3 个字),避免模型生成多余内容。 -
temperature=0.01:温度系数控制生成随机性,值越接近 0,结果越确定,适合分类这类需要固定输出的任务。 -
attention_mask:注意力掩码,让模型只关注有效文本,忽略 padding 补全的部分,保证推理准确性。
(4)结果提取
generated_text.replace(prompt_input, "").strip():模型生成的文本包含原始提示词,因此需要剔除提示词部分,只保留分类结果。
三、结果显示
python
请输入电影评论(输入空行或q退出):
这部电影真是太差劲,我非常不喜欢!
情感分类结果:负面
请输入电影评论(输入空行或q退出):
这部电影剧情紧凑,演员演技在线,值得一看!
情感分类结果:正面
请输入电影评论(输入空行或q退出):
q
程序退出!