next.js做纯静态网站,中小学智慧校园建设平台网站,大图网,413 request entity too large wordpress大家好#xff0c;我是程序锅。
最近在modelscope上闲逛的时候#xff0c;在数据集板块发现有一个商品评论情感预测数据集。这个数据集源自一个比赛#xff0c;它的目的是为了预测电商平台顾客的评论是好评还是差评。
数据示例如下所示#xff08;其中0代表差评#xff…大家好我是程序锅。
最近在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_sourced0aa621a464f99754d7108e57e32eab9
下面我们来看如何微调大模型来做商品评论情感分析。微调过程与传统深度学习方法类似。无非是准备数据、配环境、训练、最后评测。
一、数据准备
采用数据集的来自于modelscope的商品评论情感预测其中训练数据集45366条测试数据集5032条。
下载数据集
from modelscope.msdatasets import MsDataset
ds_train MsDataset.load(DAMO_NLP/jd, subset_namedefault, splittrain)from modelscope.msdatasets import MsDataset
ds_val MsDataset.load(DAMO_NLP/jd, subset_namedefault, splitvalidation)下载后的数据集无法直接应用到微调我们还需要结合提示工程将数据集转化为大模型微调所需要的格式即问答对的形式
数据转化代码如下
import json
from modelscope.msdatasets import MsDataset
from tqdm import *
ds_train MsDataset.load(DAMO_NLP/jd, subset_namedefault, splittrain)
ds_val MsDataset.load(DAMO_NLP/jd, subset_namedefault, splitvalidation)
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_PROMPTsentence,input:,output:label})
with open(jd_val.json, w) as json_file:json.dump(outout, json_file,ensure_asciiFalse)二、环境依赖
LLaMA-FactoryQwen1.5-7B
可以自己去安装部署我也准备了相应依赖pip list。
具体关于LLaMA-Factory的部署、使用和自定义数据集可以参考这篇文章
https://zhuanlan.zhihu.com/p/696631776
三、训练
整体训练耗时2.5小时采用lora的方式loss图如下所示
训练可以采用web页面训练CUDA_VISIBLE_DEVICES0 llamafactory-cli webui也可以采用命令行的方式训练具体训练执行命令如下所示
CUDA_VISIBLE_DEVICES0 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(TPTN)/(TPTNFPFN) 五、最后
这是一个大模型微调入门的一个小案例lora权重、数据集全部开源放到我的github repo。 https://github.com/GuoCoder/ai-app 后续我还会分享更多关于AI应用的案例。也欢迎大家点赞、收藏、关注我。