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

关于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.lryc.cn/news/621948.html

相关文章:

  • 云原生俱乐部-k8s知识点归纳(3)
  • 2025年中国AI算力基础设施发展趋势洞察
  • MySQL 全面指南:从入门到精通——深入解析安装、配置、操作与优化
  • Linux 进程、线程与 exec/系统调用详解
  • 力扣top100(day04-06)--贪心算法
  • 自动处理考勤表——如何使用Power Query,步步为营,一点点探索自定义函数
  • 陪伴,是挫折教育最暖的底色
  • Java 中使用阿里云日志服务(SLS)完整指南
  • Hologres实战:路径分析函数
  • 【开发语言】Groovy语言:Java生态中的动态力量
  • 1.2. qemu命令起虚拟机增加网络配置
  • [git] 当GitHub宕机时,我们如何协作?| github同步gitee的部署方法
  • uniApp App 端日志本地存储方案:实现可靠的日志记录功能
  • Flutter 自定义组件开发指南
  • Wi-Fi 与蜂窝网络(手机网络)的核心区别,以及 Wi-Fi 技术未来的发展方向
  • css变量的妙用(setProperty()的使用)
  • MySQL的学习笔记
  • 前端性能优化工具Performance面板实战指南
  • w484扶贫助农系统设计与实现
  • Android项目中Ktor的引入与使用实践
  • @[TOC](计算机是如何⼯作的) JavaEE==网站开发
  • 从理论到实战:KNN 算法与鸢尾花分类全解析
  • Python基础(Flask①)
  • Sklearn 机器学习 手写数字识别 使用K近邻算法做分类
  • DAY41打卡
  • IO多路复用底层原理
  • TDengine IDMP 高级功能(1. 元素模板)
  • frp踩坑 以及进阶教程
  • Floyd 判圈算法(龟兔赛跑算法)
  • Linux运维新手的修炼手扎之第29天