基于 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
程序退出!
相关推荐
十铭忘几秒前
个人思考4——价值驱动的重要性
人工智能
项目申报小狂人4 分钟前
一种使用双向长短时记忆网络结合鲸鱼优化算法的类火星矿物元素精确定量分析模型
人工智能·算法·lstm
数智工坊6 分钟前
具身智能人形机器人:从实验室走向现实的下一代通用智能体
人工智能·深度学习·机器人
keineahnung23457 分钟前
PyTorch symbolic_shapes 模組的 is_contiguous 從哪來?── sizes_strides_user 安裝與實作解析
人工智能·pytorch·python·深度学习
MXsoft61815 分钟前
**智能运维如何实现全栈监控与****AI****告警?****——****一体化平台实战解析**
运维·人工智能
想你依然心痛21 分钟前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“代码哨兵“——AI智能体代码安全审计平台
人工智能·安全·harmonyos·智能体
云安全助手25 分钟前
谁能定义云安全AI时代?——具有“安全原生”的聚合与防护平台
人工智能·ai·claude
梅西库里RNG30 分钟前
AI学习纪要——基础篇
人工智能·学习
梦想的颜色32 分钟前
2026最新Claude Code 规范文件 CLAUDE.md 全面解析与超全模板
人工智能·小程序
多年小白44 分钟前
芯片/半导体/CPO光模块 深度分析报告
人工智能·深度学习·microsoft·ai