我用LLaMA-Factory微调大模型来实现商品评论情感分析,准确率高达91.70%
大家好,我是程序锅。
最近在modelscope上闲逛的时候,在数据集板块发现有一个商品评论情感预测数据集。这个数据集源自一个比赛,它的目的是为了预测电商平台顾客的评论是好评还是差评。
数据示例如下所示(其中0代表差评,1代表好评):

这个比赛是2021年7月开始举办的。那个时候还没有ChatGPT,如果需要做商品评论情感预测,是需要分词、预处理、选择模型等等一系列机器学习方法。而我最近正好在学习LLaMA-Factory,正好试一试用它来微调大模型,看看最终情感预测结果如何?
好的,首先我们先上结果。
| 大模型微调+提示工程 | 大模型+提示工程 | |
|---|---|---|
| 准确率 | 91.70% | 79.43% |
使用大模型微调相比不微调,提升12.27%
整体技术路线采用:LLaMA-Factory + Lora + Qwen1.5-7B
教程视频如下:
https://www.bilibili.com/video/BV1siuietEYX/?vd_source=d0aa621a464f99754d7108e57e32eab9
下面我们来看如何微调大模型来做商品评论情感分析。微调过程与传统深度学习方法类似。无非是准备数据、配环境、训练、最后评测。
一、数据准备
采用数据集的来自于modelscope的商品评论情感预测,其中训练数据集45366条,测试数据集5032条。
下载数据集:
from modelscope.msdatasets import MsDataset
ds_train = MsDataset.load('DAMO_NLP/jd', subset_name='default', split='train')from modelscope.msdatasets import MsDataset
ds_val = MsDataset.load('DAMO_NLP/jd', subset_name='default', split='validation')
下载后的数据集无法直接应用到微调,我们还需要结合提示工程,将数据集转化为大模型微调所需要的格式(即问答对的形式)
数据转化代码如下:
import json
from modelscope.msdatasets import MsDataset
from tqdm import *
ds_train = MsDataset.load('DAMO_NLP/jd', subset_name='default', split='train')
ds_val = MsDataset.load('DAMO_NLP/jd', subset_name='default', split='validation')
print(len(ds_train["sentence"]))
print(len(ds_val["sentence"]))
outout = []
SYSTEM_PROMPT = "我在做商品评论情感预测,需根据用户评价判断是好评还是差评,其中输出0代表差评,输出1代表好评,请严格保证输出结果为整数并且只能是0或者1。输入的用户评价为:"
for i in tqdm(range(len(ds_val["sentence"]))):sentence = ds_val["sentence"][i]if (ds_val["label"][i] == None or ds_val["sentence"][i] == None ):continuelabel = str(int(ds_val["label"][i]))outout.append({"instruction":SYSTEM_PROMPT+sentence,"input":"","output":label})
with open("jd_val.json", "w") as json_file:json.dump(outout, json_file,ensure_ascii=False)
二、环境依赖
- LLaMA-Factory
- Qwen1.5-7B
可以自己去安装部署,我也准备了相应依赖pip list。
具体关于LLaMA-Factory的部署、使用和自定义数据集,可以参考这篇文章:
https://zhuanlan.zhihu.com/p/696631776
三、训练
整体训练耗时2.5小时,采用lora的方式,loss图如下所示:

训练可以采用web页面训练CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui,也可以采用命令行的方式训练,具体训练执行命令如下所示:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/guo/hub/Qwen1___5-7B-Chat \ #选择大模型下载位置--preprocessing_num_workers 16 \--finetuning_type lora \--template qwen \--flash_attn auto \--dataset_dir data \--dataset jd \ #设置为你的数据集--cutoff_len 1024 \--learning_rate 5e-05 \--num_train_epochs 3.0 \--max_samples 100000 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 8 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--optim adamw_torch \--packing False \--report_to none \--output_dir saves/Qwen1.5-7B-Chat/lora/train_2024-05-23-14-32-35 \--fp16 True \--plot_loss True \--lora_rank 8 \--lora_alpha 16 \--lora_dropout 0 \--lora_target q_proj,v_proj
四、评测
LLaMA-Factory也支持用web界面的方式评估和预测,具体评测使用方式如下所示。

评测结束后,得到一个generated_predictions.jsonl
{"label": "1", "predict": "1"}
{"label": "0", "predict": "0"}
{"label": "1", "predict": "1"}
{"label": "1", "predict": "1"}
{"label": "0", "predict": "0"}
{"label": "1", "predict": "1"}
{"label": "1", "predict": "1"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "0", "predict": "0"}
{"label": "1", "predict": "1"}
...
自己写一个准确率计算代码Acc=(TP+TN)/(TP+TN+FP+FN)

五、最后
这是一个大模型微调入门的一个小案例,lora权重、数据集全部开源放到我的github repo。
https://github.com/GuoCoder/ai-app
后续我还会分享更多关于AI应用的案例。也欢迎大家点赞、收藏、关注我。
相关文章:
我用LLaMA-Factory微调大模型来实现商品评论情感分析,准确率高达91.70%
大家好,我是程序锅。 最近在modelscope上闲逛的时候,在数据集板块发现有一个商品评论情感预测数据集。这个数据集源自一个比赛,它的目的是为了预测电商平台顾客的评论是好评还是差评。 数据示例如下所示(其中0代表差评ÿ…...
四大进制--详解--以及进制转换规则
进制介绍 对于整数, 有四种表达方式: 二进制BIN: 0,1 , 满2进1.以0b或0B开头 所谓2进制就是使用0和1来表示一个数, 满2进1如果在开发中看到有这种写法: int n1 0b1010; 这种写法没有错, 这是二进制的一种表示方式 十进制DEC: 0-9, 满10进1 十进制就是0-9来表示一个数, 满10进…...
谈谈API和人工智能领域的开发和使用以及AI大模型开发进程。
API,全称为Application Programming Interface,即应用程序编程接口,是一些预先定义的函数。 它的主要目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而无需访问源码,或理解内部工作机制的细节。API函数包含在操作系统的动态连接库文件中,例如Win…...
用Python Pygame做的一些好玩的小游戏
有些游戏的代码比较长就不公布了 1.简简单单 1.疯狂的鸡哥 你要准备的图片: 命名为:ji.png 代码: import pygame import random as r pygame.init() pygame.display.set_caption(aaa) pm pygame.display.set_mode((800,600))class Ls(py…...
【吊打面试官系列】Java高并发篇 - ThreadLocal 是什么?有什么用?
大家好,我是锋哥。今天分享关于 【ThreadLocal 是什么?有什么用?】面试题,希望对大家有帮助; ThreadLocal 是什么?有什么用? ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该…...
Spring MVC的数据转换及数据格式化:java 转换器接口(将一种类型的对象转换为另一种类型及其子类对象)
文章目录 引言I 将String转为BaseEnum的子类对象1.1 注册转换器工厂1.2 实现转换器工厂1.3 实现转换器接口 `interface Converter<S, T> `1.4 根据枚举code和type获取枚举II 枚举2.1 枚举接口2.2 枚举子类2.3 请求实体引言 Spring MVC的数据转换及数据格式化 应用场景:…...
【开源】多语言大型语言模型的革新:百亿参数模型超越千亿参数性能
大型人工智能模型,尤其是那些拥有千亿参数的模型,因其出色的商业应用表现而受到市场的青睐。但是,直接通过API使用这些模型可能会带来数据泄露的风险,尤其是当模型提供商如OpenAI等可能涉及数据隐私问题时。私有部署虽然是一个解决…...
DDL—表—数据类型—日期时间类型相关语法
(1)表格如下: 类型大小范围格式描述DATE31000-01-01 至 9999-12-31YYYY-MM-DD日期值(年月日)TIME3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间(时分秒)YEAR11901 至 2155YYYY年份值DATET…...
Ant Design pro 6.0.0 搭建使用以及相关配置
一、背景 在选择一款比较合适的中台的情况下,挑选了有arco design、ant design pro、soybean、vue-pure-admin等中台系统,经过筛选就选择了ant design pro。之前使用过arco design 搭建通过组件库拼装过后台管理界面,官方文档也比较全&#…...
Vue生命周期钩子是如何实现的
Vue的生命周期钩子是在Vue组件创建、挂载、更新、销毁等过程中自动调用的特殊函数。这些钩子允许开发者在组件的不同阶段执行特定的逻辑。Vue 2 和 Vue 3 在生命周期钩子上有一些差异,主要是因为Vue 3引入了Composition API和更现代的JavaScript特性。 Vue 2 的生命…...
002 仿muduo库实现高性能服务器组件_整体框架
🌈个人主页:Fan_558 🔥 系列专栏:仿muduo 🌹关注我💪🏻带你学更多知识 文章目录 前言项目框架小结 前言 本文不会包含任何项目模块的代码,旨在向你介绍项目具体分为哪几个模块&am…...
车道线识别与预警系统LDWS(代码+教程)
车道线识别与预警系统(Lane Departure Warning System, LDWS)作为智能交通系统中的重要组成部分,旨在通过先进的图像处理和计算机视觉技术,实时监测车辆行驶过程中的车道位置,预防因驾驶员疏忽或疲劳导致的车道偏离事故…...
Python基础学习笔记(七)——元组
目录 一、一维元组的介绍、创建与修改二、组合的基本操作1. 遍历2. 取长度3. 取最值4. 打包5. 批处理5.1 map()函数5.2 lambda 表达式5.3 lambda 表达式 map()函数 一、一维元组的介绍、创建与修改 元组(tuple),一种不可变、有序、可重复的数…...
安卓开发:相机水印设置
1.更新水印 DecimalFormat DF new DecimalFormat("#"); DecimalFormat DF1 new DecimalFormat("#.#");LocationManager LM (LocationManager)getSystemService(Context.LOCATION_SERVICE); LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2…...
Excel工作表单元格单击选中事件,VBA动态数值排序
Excel工作表单元格单击选中事件,VBA动态数值排序(WX公众号:Excel潘谆白说VBA) 文章目录 前言一、运行效果二、代码前言 面对每月的消费账单,面对月底待还的信用卡或花呗,面对不足三位数的余额,你是否怀疑过账单自己的消费。你是否因此开始记账,每个月记流水,想知道当月…...
数据结构~~链式二叉树
目录 一、基本概念 链式存储概念 二、链式二叉树的结构 链式二叉树结构 构建链式二叉树 二叉树的遍历 二叉树节点和高度等 二叉树销毁 三、链式二叉树的练习 相同的树 对称二叉树 另外一颗子树 二叉树前序遍历 二叉树遍历 四、完整代码 Tree.h Tree.c 五、总结 一…...
线程池,日志
所要用到的知识点: 多线程的创建 生产消费模型, 线程锁 条件变量 代码: 线程池日志...
vue的图片上传
关于vue3的图片上传,这里记录一下,有兴趣的朋友可以参考。。。。 <van-uploader:after-read"afterRead"v-model"headImg":max-count"1"class"picture"/> const fileList ref();const afterRead (fil…...
题解 P1150
题解 P1150 因为k个烟蒂1根烟1个烟蒂 所以k-1个烟蒂1根烟 注意减掉最后一根烟的烟蒂 (因这题并没有借烟蒂换烟再还回这一说) 此解法为小学4~6年级水平 #include <bits/stdc.h>using namespace std;int main(){int n,k;cin>>n>>k;cout<<n(n-1)/(k-…...
牛客NC324 下一个更大的数(三)【中等 双指针 Java/Go/PHP/C++】参考lintcode 52 · 下一个排列
题目 题目链接: https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199 思路 第一步:获取数字上每一个数,组成数组arr 第二步:利用“下一个排列” 问题解题方法来继续作答,步骤:利用lintc…...
Qwen3.5-4B-Claude-Opus开源大模型教程:Web镜像安全配置最佳实践
Qwen3.5-4B-Claude-Opus开源大模型教程:Web镜像安全配置最佳实践 1. 模型与镜像概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该版本以…...
Python 工程化: 用 Copier 打造“自我进化“的项目脚手架
什么是 copier安装QuickStart底层机制创建模板模板辅助函数全局变量配置模板exclude: 排除文件tasks: 项目生成/更新后要执行的命令复制项目更新项目什么是 copier Copier 是一个开源的项目模板生成工具 基于 Jinja2 模板引擎模板支持本地路径 和 Git URL项目可以包含任意文件…...
Go语言怎么防SQL注入_Go语言SQL注入防护教程【深入】
必须使用参数占位符(如?或$1)而非字符串拼接来防止SQL注入;sql.RawBytes仅用于读取二进制字段,不可用于拼接SQL;动态表名/字段名需白名单校验;ORM应禁用Raw()并启用PrepareStmt;JSON中的SQL片段…...
蓝桥杯10天备战-day3基础算法
二分:int xxlower_bound(a,an,x)-a;返回>x的指针,减去a才是下标int yyupper_bound(a,an,x)-a;二分万能模板:#include<bits/stdc.h> using namespace std; #define int long long int a[10000]; int n, m; bool isblue(int mid) {if …...
R 4.5深度学习性能断崖式提升?:实测对比R 4.4 vs 4.5在ResNet50训练中GPU利用率提升47.3%的关键配置
第一章:R 4.5深度学习性能断崖式提升的实证发现在 R 4.5 发布后,多个独立研究团队通过标准化基准测试(如 MNIST 分类、LSTM 时间序列预测及 ResNet-18 微调)观察到训练吞吐量平均提升 3.2–5.7 倍,GPU 内存分配延迟下降…...
SmallThinker-3B-Preview多轮对话效果实测:技术方案讨论与迭代
SmallThinker-3B-Preview多轮对话效果实测:一次关于高并发秒杀系统的技术方案迭代 最近在测试一些轻量级的对话模型,想看看它们在处理复杂技术问题时的实际表现。我手头正好有一个叫SmallThinker-3B-Preview的模型,虽然参数规模不大…...
从BERT到GPT:预训练语言模型的技术演进史
一场改变软件测试范式的革命2018年,当谷歌发布BERT模型时,软件测试领域并未意识到这项技术将如何重塑自动化测试工具的设计逻辑。三年后,GPT-3的诞生让测试脚本自动生成从实验室走向工程实践。本文以软件测试工程师的视角,剖析预训…...
Emwin实现Edit控件与数字键盘交互:从点击到Text显示的完整流程
1. Emwin数字键盘交互实现概述 在嵌入式GUI开发中,数字键盘与Edit控件的交互是高频需求场景。想象一下ATM机的密码输入界面,或者工业设备参数设置面板——点击输入框弹出数字键盘,输入完成后数据自动更新到显示区域,这种交互逻辑背…...
千问3.5-9B代码审查自动化:定位Bug与安全漏洞检测
千问3.5-9B代码审查自动化:定位Bug与安全漏洞检测 1. 为什么需要自动化代码审查 在软件开发过程中,代码审查是保证质量的重要环节。但传统的人工审查方式面临几个痛点:首先,资深工程师的时间成本太高,每个pull reque…...
04华夏之光永存:黄大年茶思屋榜文解法「第3期4题」
华夏之光永存:黄大年茶思屋榜文解法「第3期4题」 |小标题:面向元编程的诊断调试技术 一、摘要 本题属于编译器与编程语言领域底层难题,聚焦多门类EDSL统一映射系统、元编程运行时双向调试能力构建,本文采用工程化可复现逻辑,提供两条标准化解题路径,全程符合工程师技…...
