返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

杀鸡用牛刀,微调大模型来实现商品评论情感分析,准确率高达91.70%

[复制链接]
链载Ai 显示全部楼层 发表于 4 小时前 |阅读模式 打印 上一主题 下一主题


大家好,我是程序锅。

最近在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

下面我们来看如何微调大模型来做商品评论情感分析。微调过程与传统深度学习方法类似。无非是准备数据、配环境、训练、最后评测。

一、数据准备

采用数据集的来自于modelscope的商品评论情感预测,其中训练数据集45366条,测试数据集5032条。

下载数据集:

frommodelscope.msdatasetsimportMsDataset
ds_train=MsDataset.load('DAMO_NLP/jd',subset_name='default',split='train')

frommodelscope.msdatasetsimportMsDataset
ds_val=MsDataset.load('DAMO_NLP/jd',subset_name='default',split='validation')

下载后的数据集无法直接应用到微调,我们还需要结合提示工程,将数据集转化为大模型微调所需要的格式(即问答对的形式)

数据转化代码如下:

importjson
frommodelscope.msdatasetsimportMsDataset
fromtqdmimport*
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。输入的用户评价为:"
foriintqdm(range(len(ds_val["sentence"]))):
sentence=ds_val["sentence"][i]
if(ds_val["label"][i]==Noneords_val["sentence"][i]==None):
continue
label=str(int(ds_val["label"][i]))
outout.append({"instruction":SYSTEM_PROMPT+sentence,"input":"","output":label})
withopen("jd_val.json","w")asjson_file:
json.dump(outout,json_file,ensure_ascii=False)

二、环境依赖

  • LLaMA-Factory
  • Qwen1.5-7B

可以自己去安装部署,我也准备了相应依赖pip list

具体关于LLaMA-Factory的部署、使用和自定义数据集,可以参考这篇文章:

只需3个脚本,完成基于LLaMA-Factory的大模型训练、Lora权重合并以及构建推理服务

三、训练

整体训练耗时2.5小时,采用lora的方式,loss图如下所示:

训练可以采用web页面训练 CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui,也可以采用命令行的方式训练,具体训练执行命令如下所示:

CUDA_VISIBLE_DEVICES=0llamafactory-clitrain\
--stagesft\
--do_trainTrue\
--model_name_or_path/home/guo/hub/Qwen1___5-7B-Chat\#选择大模型下载位置
--preprocessing_num_workers16\
--finetuning_typelora\
--templateqwen\
--flash_attnauto\
--dataset_dirdata\
--datasetjd\#设置为你的数据集
--cutoff_len1024\
--learning_rate5e-05\
--num_train_epochs3.0\
--max_samples100000\
--per_device_train_batch_size2\
--gradient_accumulation_steps8\
--lr_scheduler_typecosine\
--max_grad_norm1.0\
--logging_steps5\
--save_steps100\
--warmup_steps0\
--optimadamw_torch\
--packingFalse\
--report_tonone\
--output_dirsaves/Qwen1.5-7B-Chat/lora/train_2024-05-23-14-32-35\
--fp16True\
--plot_lossTrue\
--lora_rank8\
--lora_alpha16\
--lora_dropout0\
--lora_targetq_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应用的案例。也欢迎大家点赞、收藏、关注我。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ