基于 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
程序退出!
相关推荐
lijianhua_97123 小时前
国内某顶级大学内部用的ai自动生成论文的提示词
人工智能
蔡俊锋3 小时前
用AI实现乐高式大型可插拔系统的技术方案
人工智能·ai工程·ai原子能力·ai乐高工程
自然语3 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
大熊背3 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
eastyuxiao4 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
诸葛务农4 小时前
AGI 主要技术路径及核心技术:归一融合及未来之路5
大数据·人工智能
光影少年4 小时前
AI Agent智能体开发
人工智能·aigc·ai编程
ai生成式引擎优化技术4 小时前
TSPR-WEB-LLM-HIC (TWLH四元结构)AI生成式引擎(GEO)技术白皮书
人工智能
帐篷Li4 小时前
9Router:开源AI路由网关的架构设计与技术实现深度解析
人工智能
新缸中之脑4 小时前
在GCP上运行autoresearch
人工智能