当前位置: 首页 > ds >正文

关于simplifyweibo_4_moods数据集的分类问题

本来打算用情感分类数据集拿Transformer模型来练练手,发现训练效果并不好。当我分析了这个数据集的标签后发现问题了:

  1. 查看标签的分布:
import pandas as pd# 先直接读取数据,不进行后续处理
data_file = '~/data/simplifyweibo_4_moods.csv'
df = pd.read_csv(data_file)
print(df.head()) 
df['label'].value_counts().sort_index()

输出如下:

   label                                             review
0      0  啊呀呀!要死啦!么么么!只穿外套就好了,我认为里面那件很多余啊周小伦喜歡 你各種 五角星的...
1      0  嗯……既然大姚通知了……那我也表示下收到……姚,你知道吗?假如外星人入侵地球,只要摧毁我们的...
2      0                                  风格不一样嘛,都喜欢!最喜欢哪张?
3      0  好呀,试试D .I .Y .去死皮面膜1.将燕麦片加水中浸泡6小时,加入木瓜牛奶搅拌。2.放...
4      0  张老师,谢谢侬的信任!粉丝多少无所谓重在质地近日发现一个现象——他加了你关注,你回加后,他立...
label
0    199496
1     51714
2     55267
3     55267
Name: count, dtype: int64

这样看确实没啥问题,也正如网上所说的,标签的与id的对应是:

'喜悦': 0,
'愤怒': 1,
'厌恶': 2,
'低落': 3

但是使用代码:df.drop_duplicates(subset=['review']) 根据评论数据进行过滤,发现标签3消失了。
2. 查看代码分布:

from sklearn.model_selection import train_test_split# 首先检查原始数据中的标签分布
print("原始数据中的标签分布:")
raw_df = pd.read_csv(data_file)
print(raw_df['label'].value_counts().sort_index())
print("原始数据中的唯一标签:", raw_df['label'].unique())# 检查标签类型
print("\n标签的数据类型:", raw_df['label'].dtype)# 读取数据并进行基本清洗
print("\n应用数据清洗后:")
df = pd.read_csv(data_file).dropna(subset=['review','label'])
print("1. 删除空值后的标签分布:")
print(df['label'].value_counts().sort_index())# 删除重复的评论
df = df.drop_duplicates(subset=['review'])
print("\n2. 删除重复评论后的标签分布:")
print(df['label'].value_counts().sort_index())# 检查是否有label为3的数据
if 3 not in df['label'].unique():print("\n警告:数据清洗后没有label为3的数据!")# 查找原因:检查label为3的数据是否都有空值或重复label3_raw = raw_df[raw_df['label'] == 3]print(f"原始数据中label为3的样本数:{len(label3_raw)}")label3_null = label3_raw['review'].isna().sum()print(f"其中有空值的样本数:{label3_null}")# 检查是否所有label为3的样本都是重复的temp_df = raw_df.dropna(subset=['review','label'])label3_after_dropna = temp_df[temp_df['label'] == 3]print(f"删除空值后label为3的样本数:{len(label3_after_dropna)}")# 检查重复情况all_reviews = set(temp_df['review'])label3_reviews = set(label3_after_dropna['review'])unique_label3_reviews = label3_reviews - (all_reviews - label3_reviews)print(f"label为3的唯一评论数:{len(unique_label3_reviews)}")print(f"label为3的评论与其他标签重复的数量:{len(label3_reviews) - len(unique_label3_reviews)}")# 确保label列是整数类型
df['label'] = df['label'].astype(int)# 如果需要保留label为3的数据,可以修改去重策略
# 例如:只在相同标签内去重,而不是跨标签去重
def preserve_label3(raw_df):# 按标签分组,然后在每个组内去重groups = []for label, group in raw_df.dropna(subset=['review','label']).groupby('label'):# 在每个标签组内去重group_dedup = group.drop_duplicates(subset=['review'])groups.append(group_dedup)# 合并所有组return pd.concat(groups)# 应用新的去重策略
print("\n使用修改后的去重策略:")
df_preserved = preserve_label3(raw_df)
print(df_preserved['label'].value_counts().sort_index())
print("修改后的唯一标签:", df_preserved['label'].unique())# 使用修改后的数据集
df = df_preserved# 查找相同评论对应不同标签的数据
print("\n查找相同评论对应不同标签的数据:")
raw_df_clean = raw_df.dropna(subset=['review','label'])# 找出重复的评论
duplicate_reviews = raw_df_clean[raw_df_clean.duplicated(subset=['review'], keep=False)]# 按评论分组,找出每个评论对应的不同标签
review_label_groups = duplicate_reviews.groupby('review')['label'].unique()# 筛选出有多个不同标签的评论
multi_label_reviews = review_label_groups[review_label_groups.apply(len) > 1]print(f"有{len(multi_label_reviews)}条评论对应多个不同的标签")# 显示前10个多标签评论的例子
if len(multi_label_reviews) > 0:print("\n以下是前10个多标签评论的例子:")for i, (review, labels) in enumerate(multi_label_reviews.items()):if i >= 10:breakprint(f"评论: {review[:50]}{'...' if len(review) > 50 else ''}")print(f"对应的标签: {labels}")print("-" * 50)

输出如下:

原始数据中的标签分布:
label
0    199496
1     51714
2     55267
3     55267
Name: count, dtype: int64
原始数据中的唯一标签: [0 1 2 3]标签的数据类型: int64应用数据清洗后:
1. 删除空值后的标签分布:
label
0    199496
1     51714
2     55267
3     55267
Name: count, dtype: int642. 删除重复评论后的标签分布:
label
0    199496
1     51661
2     55169
Name: count, dtype: int64警告:数据清洗后没有label为3的数据!
原始数据中label为3的样本数:55267
其中有空值的样本数:0
删除空值后label为3的样本数:55267
label为3的唯一评论数:55267
label为3的评论与其他标签重复的数量:0使用修改后的去重策略:
label
0    199496
1     51714
2     55267
3     55267
Name: count, dtype: int64
修改后的唯一标签: [0 1 2 3]查找相同评论对应不同标签的数据:
有55318条评论对应多个不同的标签以下是前10个多标签评论的例子:
评论: !!!!!!!!!!我的胃~ ~ ~ 这个星期你受苦了~ ~ ~ 留口水。。。看着照片,老想家了。。...
对应的标签: [2 3]
--------------------------------------------------
评论: !!!!!!!【今年12星座最终留下啥遗憾】从我遇见你的那天起,我所做的每一件事都是为了接近你。
对应的标签: [2 3]
--------------------------------------------------
评论: !!!!!!!忘了刚梦啥了。再梦一个。
对应的标签: [2 3]
--------------------------------------------------
评论: !!!!!!終 於出了..好想要吖 : 炒起距!闽Α 2还 ?100。颇为贵左d 。
对应的标签: [2 3]
--------------------------------------------------
评论: !!!!!败了。。这个狠。这个…真狠~
对应的标签: [2 3]
--------------------------------------------------
评论: !!!半夜三更饿了什么的最讨厌了
对应的标签: [2 3]
--------------------------------------------------
评论: !!!抽自己,还有什么脸!!!还有什么脸面胖下去T .T 求掉肉那是相当相当的励志太励志了太励志了,...
对应的标签: [2 3]
--------------------------------------------------
评论: !" !一个开头恐怖,中间可笑,结局悲惨的故事:遇见芙蓉姐姐,爱上芙蓉姐姐,娶了芙蓉姐姐
对应的标签: [2 3]
--------------------------------------------------
评论: !~ !~ !~ !~ !忒可爱了,这毛毛腿。每次见到你肥肥的小手,我就想到了铜锣烧。
对应的标签: [2 3]
--------------------------------------------------
评论: !“癌症妈妈”郭雪姣一路走好!让我们记住她的乐观与坚强。【“癌症妈妈”昨天走了让我们记住她的乐观和勇...
对应的标签: [2 3]
--------------------------------------------------

可以看出标签3就是一个摆设,这个数据集就是一个三分类的数据集,而不是四分类的。

请大家注意一下。

http://www.xdnf.cn/news/18063.html

相关文章:

  • 企业级Spring事务管理:从单体应用到微服务分布式事务完整方案
  • 【CUDA 编程思想】FusedQKVProj-分组量化矩阵乘法高效实现全流程解析
  • IT资讯 | VMware ESXi高危漏洞影响国内服务器
  • 软考 系统架构设计师系列知识点之杂项集萃(123)
  • 怎样使用数据度量测试
  • Spring 条件注解与 SPI 机制(深度解析)
  • 社区物业HCommunity本地部署手册
  • 51单片机-驱动蜂鸣器模块教程
  • 力扣400:第N位数字
  • 我的学习认知、高效方法与知识积累笔记
  • 【Docker】搭建一个高性能的分布式对象存储服务 - MinIO
  • 国标调查:构建餐饮满意度动态优化体系,驱动体验价值升级​
  • Linux程序内存布局分析
  • rent8 安装部署教程之 Windows
  • Python采集微店商品详情 API 返回值说明,json数据返回
  • MySQL(多表查询练习)
  • 《嵌入式Linux应用编程(六):并发编程基础:多进程exec函数族及多线程基础》
  • swift多卡并行训练微调qwen3-8B
  • QT开发中QString是怎么转char*类型的
  • ARM Cortex-M7 Thread Mode与Handler Mode
  • 数据结构:严格二叉树 (Strict Binary Tree)
  • PyTorch的安装-CPU版本或者GPU安装有什么区别吗
  • Unity_导航网格
  • 我的第一个音乐元素浏览项目上传至Github啦!
  • MyBatis 与 MyBatis-Plus 的区别
  • STM32L051同时处理Alarm A和Alarm B中断
  • SSH协议的GIT转换
  • 系统介绍pca主成分分析算法
  • flutter开发(二)检测媒体中的静音
  • Day59--图论--47. 参加科学大会(卡码网),94. 城市间货物运输 I(卡码网)