CSDN 完整博文:本地 Qwen2.5 大模型实现电影评论情感分类(原生 transformers 最简代码)

📅 2026/7/19 18:30:57
CSDN 完整博文:本地 Qwen2.5 大模型实现电影评论情感分类(原生 transformers 最简代码)
目录一、项目前言二、环境依赖安装三、完整原生代码和需求完全一致四、代码逐段详细解析1. 模型与分词器加载2. 提示词工程核心分类逻辑3. 文本编码 tokenizer4. 模型推理 generate 生成5. 解码与结果截取五、运行示例演示输入控制台打印流程六、高频踩坑问题解决问题 1路径报错 HFValidationError: Repo id must use alphanumeric chars问题 2模型输出大量多余文字只想要单一结果问题 3CPU 运行速度极慢问题 4模型文件夹缺失文件报错七、拓展优化方向八、总结一、项目前言很多新手想上手本地开源大模型做文本分类任务但是不知道如何离线加载本地权重、如何通过提示词工程完成分类。本文使用阿里开源轻量模型 Qwen2.5-0.5B-Instruct仅依靠transformers库不需要微调、不需要训练数据集一行输入即可完成电影评论情感三分类正面、负面、中立代码极简、适合新手入门本地 LLM 推理流程。二、环境依赖安装先安装运行所需第三方库终端执行pip install torch transformerstorch深度学习张量计算框架transformersHuggingFace 官方库用于加载本地大模型、分词、推理生成这里是在modelscope平台下载的Qwen2.5-1.5B-Instruct模型三、完整原生代码和需求完全一致from transformers import AutoModelForCausalLM,AutoTokenizer # 本地模型文件夹相对路径 model_namer..\qianwen\Qwen2.5-1.5B-Instruct # 加载预训练大模型 modelAutoModelForCausalLM.from_pretrained(model_name) # 加载对应分词器 tokenizerAutoTokenizer.from_pretrained(model_name) # 提示词模板定义分类任务规则 prompt_template请判断以下文本的情感属于哪个类别:{text}.可选类别有正面、负面、中立。 # 接收用户输入电影评论 input_textinput(请输入电影评价) # 将用户文本填充进提示词模板 prompt_inputprompt_template.format(textinput_text) print(prompt_input:,prompt_input) # 分词编码转为模型可识别张量 inputstokenizer(prompt_input,return_tensorspt) print(inputs:,inputs) # 模型推理生成文本 output_sequencesmodel.generate(inputs.input_ids,max_new_tokens512,attention_maskinputs.attention_mask) print(output_sequences:,output_sequences) # 将数字张量解码为完整文本 generated_texttokenizer.decode(output_sequences[0],skip_special_tokensTrue) print(generated_text) # 截取模型新增回答部分剔除输入prompt textgenerated_text[len(prompt_input):] print(text:,text)四、代码逐段详细解析1. 模型与分词器加载from transformers import AutoModelForCausalLM,AutoTokenizer model_namer..\qianwen\Qwen2.5-1.5B-Instruct modelAutoModelForCausalLM.from_pretrained(model_name) tokenizerAutoTokenizer.from_pretrained(model_name)AutoModelForCausalLM通用因果大模型加载器适配 Qwen、Llama 等生成式 LLMAutoTokenizer自动匹配模型的分词器负责文本与数字 token 相互转换model_name本地模型文件夹路径..\代表向上一级文件夹Windows 原始字符串r避免转义符报错要求文件夹内必须包含config.json、pytorch_model.bin、vocab.json等完整模型权重文件。2. 提示词工程核心分类逻辑prompt_template请判断下面的电影评价属于哪个类别,只告诉我是”正面、负面、中立“中的哪一种只回答两个字电影评价如下{text}. input_textinput(请输入电影评价) prompt_inputprompt_template.format(textinput_text)无需训练依靠自然语言指令约束模型输出分类结果{text}为占位符通过format()填充用户输入的影评文本任务逻辑告诉模型仅从「正面、负面、中立」三选一输出结果。3. 文本编码 tokenizerinputstokenizer(prompt_input,return_tensorspt)大模型无法直接读取文字需要分词转换为数字 IDinput_idsreturn_tensorspt返回 PyTorch 张量格式适配模型输入返回对象包含两个关键参数input_ids文本分词后的数字编码attention_mask掩码1 代表有效文本0 代表填充占位。4. 模型推理 generate 生成output_sequencesmodel.generate(inputs.input_ids,max_new_tokens512,attention_maskinputs.attention_mask)generate()LLM 文本生成核心函数自动续写文本max_new_tokens512限制模型最多生成 512 个词防止无限输出attention_mask传入掩码让模型忽略填充占位符。5. 解码与结果截取generated_texttokenizer.decode(output_sequences[0],skip_special_tokensTrue) textgenerated_text[len(prompt_input):] print(text:,text)decode()将数字 token 还原为可读文本skip_special_tokensTrue过滤eos等模型特殊符号generated_text 原始输入 prompt 模型新增回答textgenerated_text[len(prompt_input):]切片截取只保留模型输出的分类结果。五、运行示例演示输入请输入电影评价这部电影剧情拖沓演员演技很差完全不值得看控制台打印流程打印拼接后的完整 promptprompt_input: 请判断以下文本的情感属于哪个类别:这部电影剧情拖沓演员演技很差完全不值得看.可选类别有正面、负面、中立。打印编码后的张量 inputs打印推理输出 token 序列output_sequences打印完整解码文本请判断以下文本的情感属于哪个类别:这部电影剧情拖沓演员演技很差完全不值得看.可选类别有正面、负面、中立。 该文本情感类别为负面切片后仅输出模型回答text: 该文本情感类别为负面六、拓展优化方向封装 Flask 网页接口前端输入评论实时展示分类结果增加结果清洗逻辑自动提取「正面 / 负面 / 中立」关键词过滤多余描述使用 Qwen 官方对话模板apply_chat_template提升指令跟随准确率增加量化加载load_in_4bitTrue大幅降低内存占用批量读取影评文件批量完成情感分类。七、总结本文使用最原生、无多余封装的 transformers 代码完整演示本地 Qwen2.5 大模型离线推理流程仅依靠提示词工程实现文本情感分类无需数据集、无需微调非常适合新手学习本地 LLM 基础开发流程。代码结构清晰每一步都有打印日志方便调试、理解大模型输入输出完整链路。