基于 Qwen2.5-1.5B 模型实现电影评论情感分类

一、项目需求

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
程序退出!
相关推荐
头发够用的程序员3 分钟前
从滑动窗口到矩阵运算:img2col算法基本原理
人工智能·算法·yolo·性能优化·矩阵·边缘计算·jetson
ydmy25 分钟前
transformer超参数配置(个人理解)
人工智能·深度学习
AI原来如此30 分钟前
AI 编程助手常见问题 10 问 10 答
人工智能·ai·大模型·编程
科技林总2 小时前
【论文】MemGPT: Towards LLMs as Operating Systems
人工智能
黎阳之光2 小时前
黎阳之光透明管理:视频孪生重构智慧仓储新范式
人工智能·算法·安全·重构·数字孪生
qq_411262422 小时前
四博CozyLife AI智能音响方案:技术化设计与实现
人工智能·智能音箱
水如烟2 小时前
孤能子视角:OpenAI,再看强关系与弱关系
人工智能
MediaTea2 小时前
AI 术语通俗词典:权重参数
人工智能
基因改造者2 小时前
Hermes Agent 配置指南
人工智能·ai·hermes agent
QuestLab2 小时前
【第22期】2026年4月25日 AI日报
人工智能