我用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 ):
        continue
    label = 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应用的案例。也欢迎大家点赞、收藏、关注我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

【二叉树】力扣OJ题

文章目录 前言1. 翻转二叉树1.1 题目1.2 解题思路1.3 代码实现1.4 时空复杂度 2. 对称二叉树2.1 题目2.2 解题思路2.3 代码实现2.4 时空复杂度 3. 平衡二叉树3.1 题目3.2 解题思路3.3 代码实现3.4 时空复杂度 结语 前言 本篇博客主要介绍二叉树的经典 OJ 题,题目主…

间接平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (python详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

算法与数据结构汇总

刷题建议步骤 求职硬通货:一,好的学历,这个要下血本。本科,可以考研,读研。专科,可以专升本,再考研,读研,二,软考,一年考两次,有些科…

MySQL:表的约束

文章目录 0.小知识,数据转化1.空属性(非空约束)2.默认值(default)3.comment(列描述)4.zerofill(显示约束)5.primary key(主键约束)6.auto_increment(自增长)7.unique(唯一键)8.foreign key (外键)9.综合表结构的设计 表…

Android 版本与 API level 以及 NDK 版本对应

采用 Android studio 开发 Android app 的时候,需要选择支持的最低 API Level 和使用的 NDK 版本,对应开发 app 的最低 SDK 版本: 在 app 的 build.gradle 文件里,对应于代码如下: 目前各版本的占有率情况如下&#xf…

docker不删除容器更改其挂载目录

场景:docker搭建的jenkins通常需要配置很多开发环境,当要更换挂载目录,每次都需要删除容器重新运行,不在挂载目录的环境通常不会保留。 先给一个参考博客docker不删除容器,修改容器挂载或其他_jenkins 修改容器挂载do…

电子电器架构 - AUTOSAR软件架构Current Features in a Nutshell

电子电器架构 - AUTOSAR软件架构Current Features in a Nutshell 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的…

Gradle的settings.gradle.kts你真的理解吗?

你还在用.gradle文件吗?例如build.gradle、settings.gradle,那么你就out了。现在我们有必要了解一下kts脚本了。在Android项目中,默认有3个文件可以替换成kts脚本,即project的build.gradle、app模块的build.gradle和project的sett…

数据库(5)——DDL 表操作

表查询 先要进入到某一个数据库中才可使用这些指令。 SHOW TABLES; 可查询当前数据库中所有的表。 表创建 CREATE TABLE 表名( 字段1 类型 [COMMENT 字段1注释] ...... 字段n 类型 [COMMENT 字段n注释] )[COMMENT 表注释]; 例如,在student数据库里创建一张studen…

哈希表---闭散列

闭散列 当我们用哈希函数的时候,其中一个就是除留余数法 取这个表的长度len,按照哈希函数:Hash(key) key% len,将这个位置映射到表中 通过上面的除留余数法,会有哈希碰撞的问题,可以通过闭散列来解决 闭散列也叫开放定址法&am…

Django与前端框架协作开发实战:高效构建现代Web应用

title: Django与前端框架协作开发实战:高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories: 后端开发 tags: DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理 第1章:简介 1.1 Django简介 Django是一…

新加坡多ip服务器在跨境电商中有哪些优势?

新加坡多IP服务器**在跨境外贸业务中具有明显的优势,适合需要高性能和网络稳定性的业务场景。Rak部落小编为您整理发布新加坡多ip服务器在跨境电商中有哪些优势? 以下是一些具体的优势: 1. **地理位置优越**:新加坡作为亚太地区的国际商业和…

mysql图形化界面及将mysql注册成后台程序

安装图形化界面版本 右键新建数据库 字符集使用utf8防止以后数据库中存在中文字符导致乱码 将mysql注册成后台程序 cmd进入命令行界面 切换路径到cd /mysql/bin 将mysql注册成后台程序 mysqld.exe --install mysql1 (失败,说明没有权限) 以管理员身份打开成功…

R语言:Mantel Test分析与绘图

Mantel Test 1.什么是Mantel Test2. R语言代码13. R语言代码2 1.什么是Mantel Test Mantel test分析对两个矩阵相关关系进行检验。可以用在生态学上,用来检验群落距离矩阵(如 Bray-Curtis distance matrix)和环境变量距离矩阵(如 pH, 温度 或者地理位置的差异矩阵)之…

MySQL——MySQL目录结构

MySQL安装完成后,会在磁盘上生成一个目录,该目录被称为MySQL的安装目录。在MySQL的安装目录中包含了启动文件、配置文件、数据库文件和命令文件等。 下面对 MySQL 的安装目录进行详细讲解 (1)bin 目录 : 用于放置一些可执行文件,如 mysql.exe、mysqld. …

Java面试八股之什么是锁消除和锁粗化

什么是锁消除和锁粗化 锁消除(Lock Elimination): 锁消除是Java虚拟机(JVM)进行的一种高级优化策略,旨在消除那些没有必要存在的同步操作,以减少不必要的性能开销。这一优化发生在即时编译器&a…

MT7628原厂Uboot修改交互串口

工作中,遇到用户用Skylab的SKW92A模组,在参考设计时,将UART接口预留错的情况,对于这种情况,需要将原厂SDK默认的交互串口UART0,改为UART1。在开发过程中,经常需要在Uboot阶段升级固件&#xff0…

抖音运营_抖音推荐算法的机制

目录 一 抖音流量推荐算法机制 二 4大关键指标 三 完播率 1 黄金3秒 2 内容严谨 3 期待感 4 用户痛点 5 通俗易懂 四 转发量 1 分享需求 2 分享快乐 3 共情表达 4 正义传播 五 评论量 1 话题性 2 争议性 3 参与感 4 评论回评 六 点赞量 1 情感共鸣 2 用户喜…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十)- JUC(6)

目录 wait , notify wait vs sleep 正确使用方法 同步保护性暂停 join的源码 Future 异步生产者/消费者模型 定义 Park & Unpark 原理 wait , notify 小故事小南需要烟才能工作,但它又要占这锁让别人无法进来。那么这个时候开一个waitSet相当于就是休…