发布时间:2025-07-21
点击次数: 本文介绍了使用PaddleNLP进行淘宝商品评论情感分析的过程。先处理数据,将原数据集转换为指定格式,再用load_dataset读取。选用ERNIE预训练模型,通过tokenizer处理文本,用DataLoader加载数据。设置优化策略后训练模型,最后用训练好的模型进行预测,实现对评论情感(正向、中立、负向)的分类。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

在我国电子商务飞快发展的背景下,基本上所有的电子商务网站都支持消费者对产品的做工、快递、价格个等进行打分和发表评论。在网络平台上发布大量的留言和评论,这已经成为互联网的一种流行形式,而这种形势必然给互联网带来海量的信息。
对于卖家来说,可以从评论信息中获取客户的实际需求,以改善产品品质,提高自身的竞争力。另一方面,对于一些未知体验产品,客户可以通过网络来获取产品信息,特别是对一些未知的体验产品,客户为了降低自身的风险更加倾向于得到其他客户的意见和看法,这些评论对潜在的买家而言无疑是一笔财富,并以此作为决策的重要依据。
对于客户来说,可以借鉴别人的购买历史以及评论信息,更好的辅助自己制定购买决策。
因此,通过利用数据挖掘技术针对客户的大量评论进行分析,可以挖掘出这些信息的特征,而得到的这些信息有利于生产商改进自身产品和改善相关的服务,提高商家的核心竞争力。
数据标签分别为 {0: 'negative', 1: 'neutral', 2: 'positive'}
In [1]!pip install --upgrade paddlenlp
可见每条数据包含一句评论和对应的标签,0或1。0代表负向评论,1代表中立评论,2代表正向评论。
In [2]# 解压缩# !unzip data/data94812/中文淘宝评论数据集.zipIn [17]
!head -n9 train.txt
质量 很棒 ! 又 厚实 , 就是 做工 不好 , 就是 有点 味道 得 跑跑 做工 0 很好 , 很漂亮 , 质量 问题 就 不知道 了 , 得用 用 才 知道 , 这个 快递 太 垃圾 了 快递 0 价格 上面 反正 折扣 之后 就是 市场 销售价格 , 搞 活动 也 就 随便说说 , 挺好吃 的 价格 0
def read(data_path):
data=['label'+'\t'+'text_a\n'] with open(data_path, 'r', encoding='utf-8-sig') as f:
lines=f.readlines() # 三行为一条记录
for i in range(int(len(lines)/3)): # 读取第一行为内容
word = lines[i*3].strip('\n')
# 读取第三行为标签
label = lines[i*3+2].strip('\n')
data.append(label+'\t'+word+'\n')
i=i+1
return data
with open('formated_train.txt','w') as f:
f.writelines(read('train.txt'))with open('formated_test.txt','w') as f:
f.writelines(read('test.txt'))
In [5]
!head formated_train.txt
label text_a 0 质量 很棒 ! 又 厚实 , 就是 做工 不好 , 就是 有点 味道 得 跑跑 0 很好 , 很漂亮 , 质量 问题 就 不知道 了 , 得用 用 才 知道 , 这个 快递 太 垃圾 了 0 价格 上面 反正 折扣 之后 就是 市场 销售价格 , 搞 活动 也 就 随便说说 , 挺好吃 的 0 漂亮 好看 质量 好 就是 快递 不 给力 , 派个件 要 派 两天 0 宝贝 很 满意 , 发小 刚刚 好 , 质量 也 不错 , 值得 购买 , 就是 快递 太慢 , 昨天 才 到 0 行李箱 就 不错 啊 ! 看上去 是 挺 结实 的 等 用 了 才 知道 是不是 真的 好 ! 拉链 也 很 顺滑 ! 快递 太差 , 太慢 0 质量 很好 , 发货 很快 , 果断 给 好评 ! 快递 小哥 有些 烦 , 让 他 等 我 五分钟 , 结果 五分钟 内 打 了 三次 电话 ! 0 颜色 很小 清新 , 和 图片 一样 的 , 送 的 贴纸 很 可爱 。 轮子 在 瓷砖 上 走 挺 小声 的 , 要是 细节 处理 好 一点 就 完美 了 。 性价比 高 。 快递 没打 满分 一 是因为 不 给 送货 , 二是 我 说 等验 完货 在 签 , 她们 就 给 我 脸色 看 。 0 虽然 安装 师傅 不 给力 , 但是 东西 真的 很 给力 ! 很 喜欢 好评 !In [6]
!head formated_test.txt
label text_a 0 非常 漂亮 的 拉杆箱 , 很 轻 , 跟 店家 描述 的 一致 , 快递 速度 不行 啊 0 款式 设计 的 很 好看 呀 , 客服 态度 很好 , 呃 , 质量 感觉 不太好 奥 , 就是 会 起球 , 而且 快递 好慢 啊 0 超值 啊 哈哈哈 , 就是 颜色 随机 我以 为什么 颜色 都 有 , 结果 全是 一个 颜色 的 , 不过 东西 好 就 可以 , 物超所值 。 0 卖家 很好 , 热情周到 , 包装 严实 , 遇到 快递 问题 都 极力 解决 。 我要 投诉 快递 , 太差 了 。 0 比 想象 的 要 好得多 , 音效 特别 好 , 还 带 环绕 音 , 总之 很 喜欢 , 就是 这个 价格 不是 很 实惠 0 买大 了 一点 , 不过 也 能 穿 , 孩子 很 喜欢 , 三件套 的 , 春秋 都 可以 穿 , 质量 还可以 , 蓝色 的 绒 颜色 感觉 有点 陈旧 , 还有 就是 有点 小贵 。 快递 公司 有点 小 差错 , 不过 老板 很快 就 解决 了 。 0 质量 一般 , 边板 是 多层板 , 快递 太慢 了 , 2 月 8 日 发货 , 21 日才 到 。 0 挺好 的 , 店家 很 用心 , 包装 的 非常 好 , 只是 快递 方面 太慢 了 , 希望 这方面 还是 改进 下 ! 0 好吃 好吃 , 就是 分量 太少 了 , 有点 贵咯
通过查看课件,3行为一条记录,分别为评价内容、评价分类、评价正负标签,根据文件结构,自定义数据集
In [7]from paddlenlp.datasets import load_datasetdef read(data_path):
with open(data_path, 'r', encoding='utf-8') as f: # 跳过列名
next(f) for line in f:
label, word= line.strip('\n').split('\t') yield {'text': word, 'label': label}# data_path为read()方法的参数train_ds = load_dataset(read, data_path='formated_train.txt',lazy=False)
test_ds = load_dataset(read, data_path='formated_test.txt',lazy=False)
dev_ds = load_dataset(read, data_path='formated_test.txt',lazy=False)
In [8]
print(len(train_ds))print(train_ds.label_list)for idx in range(10): print(train_ds[idx])
13339
None
{'text': '质量 很棒 ! 又 厚实 , 就是 做工 不好 , 就是 有点 味道 得 跑跑', 'label': '0'}
{'text': '很好 , 很漂亮 , 质量 问题 就 不知道 了 , 得用 用 才 知道 , 这个 快递 太 垃圾 了', 'label': '0'}
{'text': '价格 上面 反正 折扣 之后 就是 市场 销售价格 , 搞 活动 也 就 随便说说 , 挺好吃 的', 'label': '0'}
{'text': '漂亮 好看 质量 好 就是 快递 不 给力 , 派个件 要 派 两天', 'label': '0'}
{'text': '宝贝 很 满意 , 发小 刚刚 好 , 质量 也 不错 , 值得 购买 , 就是 快递 太慢 , 昨天 才 到', 'label': '0'}
{'text': '行李箱 就 不错 啊 ! 看上去 是 挺 结实 的 等 用 了 才 知道 是不是 真的 好 ! 拉链 也 很 顺滑 ! 快递 太差 , 太慢', 'label': '0'}
{'text': '质量 很好 , 发货 很快 , 果断 给 好评 ! 快递 小哥 有些 烦 , 让 他 等 我 五分钟 , 结果 五分钟 内 打 了 三次 电话 !', 'label': '0'}
{'text': '颜色 很小 清新 , 和 图片 一样 的 , 送 的 贴纸 很 可爱 。 轮子 在 瓷砖 上 走 挺 小声 的 , 要是 细节 处理 好 一点 就 完美 了 。 性价比 高 。 快递 没打 满分 一 是因为 不 给 送货 , 二是 我 说 等验 完货 在 签 , 她们 就 给 我 脸色 看 。', 'label': '0'}
{'text': '虽然 安装 师傅 不 给力 , 但是 东西 真的 很 给力 ! 很 喜欢 好评 !', 'label': '0'}
{'text': '外观 还可以 , 送 了 很多 贴画 , 蛮 细心 的 。 快递 送 在 超市 门口 打个 电话 就 走 了 , 结果 被 别人 拿走 了 , 好歹 又 送 回来 了 & hellip ; & hellip ; 真是 糟心 !', 'label': '0'}
import paddlenlp as ppnlp# 设置想要使用模型的名称MODEL_NAME = "ernie-1.0"ernie_model = ppnlp.transformers.ErnieModel.from_pretrained(MODEL_NAME) model = ppnlp.transformers.ErnieForSequenceClassification.from_pretrained(MODEL_NAME, num_classes=3)
[2025-06-15 23:40:55,574] [ INFO] - Downloading https://paddlenlp.bj.bcebos.com/models/transformers/ernie/ernie_v1_chn_base.pdparams and s*ed to /home/aistudio/.paddlenlp/models/ernie-1.0
[2025-06-15 23:40:55,577] [ INFO] - Downloading ernie_v1_chn_base.pdparams from https://paddlenlp.bj.bcebos.com/models/transformers/ernie/ernie_v1_chn_base.pdparams
100%|██████████| 392507/392507 [00:13<00:00, 29747.03it/s]
[2025-06-15 23:41:15,870] [ INFO] - Weights from pretrained model not used in ErnieModel: ['cls.predictions.layer_norm.weight', 'cls.predictions.decoder_bias', 'cls.predictions.transform.bias', 'cls.predictions.transform.weight', 'cls.predictions.layer_norm.bias']
[2025-06-15 23:41:16,263] [ INFO] - Already cached /home/aistudio/.paddlenlp/models/ernie-1.0/ernie_v1_chn_base.pdparams
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1297: UserWarning: Skip loading for classifier.weight. classifier.weight is not found in the provided dict.
warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1297: UserWarning: Skip loading for classifier.bias. classifier.bias is not found in the provided dict.
warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
预训练模型ERNIE对中文数据的处理是以字为单位。PaddleNLP对于各种预训练模型已经内置了相应的tokenizer。指定想要使用的模型名字即可加载对应的tokenizer。
简小派
简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。
123
查看详情
tokenizer作用为将原始输入文本转化成模型model可以接受的输入数据形式。
tokenizer = ppnlp.transformers.ErnieTokenizer.from_pretrained(MODEL_NAME)
[2025-06-15 23:41:18,286] [ INFO] - Downloading vocab.txt from https://paddlenlp.bj.bcebos.com/models/transformers/ernie/vocab.txt 100%|██████████| 90/90 [00:00<00:00, 3163.87it/s]
从以上代码可以看出,ERNIE模型输出有2个tensor。
NOTE:
使用paddle.io.DataLoader接口多线程异步加载数据。
In [11]from functools import partialfrom paddlenlp.data import Stack, Tuple, Padfrom utils import convert_example, create_dataloader# 模型运行批处理大小batch_size = 200max_seq_length = 128trans_func = partial(
convert_example,
tokenizer=tokenizer,
max_seq_length=max_seq_length)
batchify_fn = lambda samples, fn=Tuple(
Pad(axis=0, pad_val=tokenizer.pad_token_id), # input
Pad(axis=0, pad_val=tokenizer.pad_token_type_id), # segment
Stack(dtype="int64") # label): [data for data in fn(samples)]
train_data_loader = create_dataloader(
train_ds,
mode='train',
batch_size=batch_size,
batchify_fn=batchify_fn,
trans_fn=trans_func)
dev_data_loader = create_dataloader(
dev_ds,
mode='dev',
batch_size=batch_size,
batchify_fn=batchify_fn,
trans_fn=trans_func)
from paddlenlp.transformers import LinearDecayWithWarmupimport paddle# 训练过程中的最大学习率learning_rate = 5e-5 # 训练轮次epochs = 5 #3# 学习率预热比例warmup_proportion = 0.1# 权重衰减系数,类似模型正则项策略,避免模型过拟合weight_decay = 0.01num_training_steps = len(train_data_loader) * epochs
lr_scheduler = LinearDecayWithWarmup(learning_rate, num_training_steps, warmup_proportion)
optimizer = paddle.optimizer.AdamW(
learning_rate=lr_scheduler,
parameters=model.parameters(),
weight_decay=weight_decay,
apply_decay_param_fun=lambda x: x in [
p.name for n, p in model.named_parameters() if not any(nd in n for nd in ["bias", "norm"])
])
criterion = paddle.nn.loss.CrossEntropyLoss()
metric = paddle.metric.Accuracy()
模型训练的过程通常有以下步骤:
每训练一个epoch时,程序将会评估一次,评估当前模型训练的效果。
In [13]# checkpoint文件夹用于保存训练模型!mkdir /home/aistudio/checkpoint
mkdir: cannot create directory ‘/home/aistudio/checkpoint’: File existsIn [14]
import paddle.nn.functional as Ffrom utils import evaluate
global_step = 0for epoch in range(1, epochs + 1): for step, batch in enumerate(train_data_loader, start=1):
input_ids, segment_ids, labels = batch
logits = model(input_ids, segment_ids)
loss = criterion(logits, labels)
probs = F.softmax(logits, axis=1)
correct = metric.compute(probs, labels)
metric.update(correct)
acc = metric.accumulate()
global_step += 1
if global_step % 10 == 0 : print("global step %d, epoch: %d, batch: %d, loss: %.5f, acc: %.5f" % (global_step, epoch, step, loss, acc))
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.clear_grad()
evaluate(model, criterion, metric, dev_data_loader)
global step 270, epoch: 5, batch: 2, loss: 0.43869, acc: 0.80500global step 280, epoch: 5, batch: 12, loss: 0.41893, acc: 0.80792global step 290, epoch: 5, batch: 22, loss: 0.44744, acc: 0.80523global step 300, epoch: 5, batch: 32, loss: 0.38977, acc: 0.80797global step 310, epoch: 5, batch: 42, loss: 0.39923, acc: 0.80774global step 320, epoch: 5, batch: 52, loss: 0.36724, acc: 0.81029global step 330, epoch: 5, batch: 62, loss: 0.40811, acc: 0.81008eval loss: 0.51191, accu: 0.74444
训练保存好的训练,即可用于预测。如以下示例代码自定义预测数据,调用predict()函数即可一键预测。
In [16]from utils import predict
data = [
{"text":'这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般'},
{"text":'怀着十分激动的心情放映,可是看着看着发现,在放映完毕后,出现一集米老鼠的动画片'},
{"text":'作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。'},
]
label_map = {0: 'negative', 1: 'neutral', 2: 'positive'}
results = predict(
model, data, tokenizer, label_map, batch_size=batch_size)for idx, text in enumerate(data): print('Data: {} \t Lable: {}'.format(text, results[idx]))
Data: {'text': '这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般'} Lable: neutral
Data: {'text': '怀着十分激动的心情放映,可是看着看着发现,在放映完毕后,出现一集米老鼠的动画片'} Lable: negative
Data: {'text': '作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。'} Lable: positive
以上就是PaddleNLP之淘宝商品评论情感分析的详细内容,更多请关注其它相关文章!
# git
# ai
# python
# 黄焖鸡米饭的营销推广
# 深圳蛇口小红书营销推广
# 品牌网站建设浩森宇特
# 南海360网站推广平台
# 邯郸有经验的网站seo推广
# 南昌机械公司网络营销推广
# 网站建设之关键技术
# 绵阳网站优化排名
# 滨江整合营销推广
# 育才网站建设
# 数据处理
# 加载
# 五分钟
# 小哥
# 一言
# 中文网
# 太慢
# 看着
# 淘宝
# 很好
# type
# udio
# red
# 为什么
# 异步加载
相关栏目:
【
行业新闻62819 】
【
科技资讯67470 】
相关推荐:
聚焦人工智能大模型、AIGC 徐汇十余场重磅论坛等你来
人工智能在项目管理中的作用
AI创作广告文案等同2.47年工作经验,且消费者无法区分|AI营销前沿
Win11 的画图应用将包含 Windows Copilot 的 AI 工具整合
美图公司:Wink国内首发AI画面拓展功能
塑造全能智能管家:华为小艺AI加成应对大模型挑战
破解零碳产业园建设规范和成果评价难题
眼球反射解锁3D世界,黑镜成真!马里兰华人新作炸翻科幻迷
两架海燕号无人机交付中国气象局 助力建设国家级机动气象观测业务
IBM和NASA合作发布可追踪碳排放的开源AI基础模型
小米首次曝光 64 亿参数的 MiLM-6B AI 大模型,或将应用于小爱同学
音乐制作元工具AudioCraft发布开源AI工具
换流站无线物联网络为新型电力系统铺设“数字之路”
OpenAI CEO 山姆・阿尔特曼呼吁 AI 领域中美应当合作
高质量数据推动AI场景化应用快速发展及落地
BLIP-2、InstructBLIP稳居前三!十二大模型,十六份榜单,全面测评「多模态大语言模型」
国网辉南供电:无人机空中巡检 全力护航端午佳节
陈丹琦ACL学术报告来了!详解大模型「*」数据库7大方向3大挑战,3小时干货满满
人工智能时代 数字文明对话向“尼”走来
AI取代人工先拿教育行业开刀?美版“作业帮”启动裁员
智能技术提高现代商业运营的7七种方式
马斯克预测:特斯拉全自动驾驶将在今年实现 对AI深度变化感到担忧
到中国科技馆体验“一滴油的奇妙旅行”,线上元宇宙展厅同步开启
拓普龙7188ML:轻便壁挂式工控机箱,为人工智能应用场景提供有力保障
社区里,孩子们体验“机器人竞技”
曝索尼在开发新头显设备:游戏中使用AR技术
AI大举入侵内容行业,哪些上市*及动漫公司进行了布局?
【趋势周报】全球元宇宙产业发展趋势:ChatGPT的出现,将元宇宙实现至少提前了10年
编程版GPT狂飙30星,AutoGPT危险了!
AI 程序 Text With Jesus 在海外迅速受到关注:与耶稣和撒旦进行对话
普渡机器人与变形金刚品牌合作,特别活动爆火,商品售罄!
第 66 届格莱美奖规定,AI 作品将无法获得评奖资格
上天下海登极,青岛与昇腾AI握手一起探索星辰大海
抛媚眼给瞎子看?微软、谷歌的AI广告被广告主抵制
华为小艺AI助手将实现强大的大模型能力
对艺术家拒绝置若罔闻,Stability AI 将推出适应多种画风的开源模型
标贝科技亮相国际顶会ICASSP2025 加速布局海外AI数据市场
普林斯顿大学推出 Infinigen AI 模型,生成真实自然环境 3D 场景
天翼云在国际AI顶会大模型挑战赛中获得冠军
VMS的应用:提升多品牌设备管理效能
如何用户外电源给无人机实现持久续航
人脸识别+全景双摄+AI算法 萤石推动智能锁行业革新
AI无法对传统文化符号进行解构和创新
上新7款产品,美图继续“蹭”AI
科学家称,面对人工智能,人类未来或只有灭亡与虚拟永生两个选择
爱设计 AI 一键生成 PPT 工具上线:输入标题即可生成 PPT
OpenAI夺冠:人工智能为云计算带来新变革
静安大宁功能区企业云天励飞亮相2025世界人工智能大会,秀出AI硬实力!
「从未被制造出的最重要机器」,艾伦·图灵及图灵机那些事
AI时代,企业需要什么样的员工?