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

文本数据分析

一.前言

本章主要是了解⽂本数据分析的作⽤,掌握常⽤的⼏种⽂本数据分析⽅法。

二.文件数据分析介绍

⽂本数据分析的作⽤:

⽂本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型 训练过程中⼀些超参数的选择. 

常⽤的⼏种⽂本数据分析⽅法:

标签数量分布

句⼦⻓度分布

词频统计与关键词词云 

三.数据集说明 

我们将基于真实的中⽂酒店评论语料来讲解常⽤的⼏种⽂本数据分析⽅法.

中⽂酒店评论语料:

其中train.tsv代表训练集, dev.tsv代表验证集, ⼆者数据样式相同。(我们这个也会上传到资料,大家到时候下载就好) 

train.tsv数据样式:

sentence label

早餐不好,服务不到位,晚餐⽆⻄餐,早餐晚餐相同,房间条件不好,餐厅不分吸烟区.房间不分有⽆烟房.         0

去的时候 ,酒店⼤厅和餐厅在装修,感觉⼤厅有点挤.由于餐厅装修本来该享受的早饭,也没有享受(他们是8点 开始每个房间送,但是我时间来不及了)不过前台服务员态度好!         1

有很⻓时间没有在⻄藏⼤厦住了,以前去北京在这⾥住的较多。这次住进来发现换了液晶电视,但⽹络不是很 好,他们⾃⼰说是收费的原因造成的。其它还好。         1

⾮常好的地理位置,住的是豪华海景房,打开窗户就可以看⻅栈桥和海景。记得很早以前也住过,现在重新装修 了。总的来说⽐较满意,以后还会住         1

交通很⽅便,房间⼩了⼀点,但是⼲净整洁,很有⾹港的特⾊,性价⽐较⾼,推荐⼀下哦 1 酒店的装修⽐较陈旧,房间的隔⾳,主要是卫⽣间的隔⾳⾮常差,只能算是⼀般的         0

酒店有点旧,房间⽐较⼩,但酒店的位⼦不错,就在海边,可以直接去游泳。8楼的海景打开窗户就是海。如果 想住在热闹的地带,这⾥不是⼀个很好的选择,不过威海城市真的⽐较⼩,打⻋还是相当便宜的。晚上酒店⻔⼝ 出租⻋⽐较少。         1

位置很好,⾛路到⽂庙、清凉寺5分钟都⽤不了,周边公交⻋很多很⽅便,就是出租⻋不太爱去(⽼城区路窄爱 堵⻋),因为是⽼宾馆所以设施要陈旧些,         1

酒店设备⼀般,套房⾥卧室的不能上⽹,要到客厅去。         0

train.tsv数据样式说明:

train.tsv中的数据内容共分为2列, 第⼀列数据代表具有感情⾊彩的评论⽂本; 第⼆列数据, 0或1, 代表每条⽂本数据是积极或者消极的评论, 0代表消极, 1代表积极. 

四.获取标签数量分布 

# 导⼊必备⼯具包
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# 设置显示⻛格
plt.style.use('fivethirtyeight')
# 分别读取训练tsv和验证tsv
train_data = pd.read_csv("train.tsv", sep="\t")
valid_data = pd.read_csv("dev.tsv", sep="\t")
# 获得训练数据标签数量分布
sns.countplot(x="label", data=train_data)
plt.title("train_data")
plt.show()
# 获取验证数据标签数量分布
sns.countplot(x="label", data=valid_data)
plt.title("valid_data")
plt.show()

训练集标签分布:

 

测试集标签分布:

 

在深度学习模型评估中, 我们⼀般使⽤ACC作为评估指标, 若想将ACC的基线定义在50%左右, 则需 要我们的正负样本⽐例维持在1:1左右, 否则就要进⾏必要的数据增强或数据删减. 上图中训练和验 证集正负样本都稍有不均衡, 可以进⾏⼀些数据增强.

五.获取句子长度分布 

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt# 设置显示⻛格
plt.style.use('fivethirtyeight')
# 分别读取训练tsv和验证tsv
train_data = pd.read_csv("train.tsv", sep="\t")
valid_data = pd.read_csv("dev.tsv", sep="\t")# 在训练数据中添加新的句⼦⻓度列, 每个元素的值都是对应的句⼦列的⻓度
train_data["sentence_length"] = list(map(lambda x: len(x),
train_data["sentence"]))
# 绘制句⼦⻓度列的数量分布图
sns.countplot(x="sentence_length", data=train_data)
# 主要关注count⻓度分布的纵坐标, 不需要绘制横坐标, 横坐标范围通过dist图进⾏查看
plt.xticks([])
plt.show()
# 绘制dist⻓度分布图
sns.histplot(train_data["sentence_length"],kde=True)
# 主要关注dist⻓度分布横坐标, 不需要绘制纵坐标
plt.yticks([])
plt.show()
# 在验证数据中添加新的句⼦⻓度列, 每个元素的值都是对应的句⼦列的⻓度
valid_data["sentence_length"] = list(map(lambda x: len(x),
valid_data["sentence"]))
# 绘制句⼦⻓度列的数量分布图
sns.countplot(x="sentence_length", data=valid_data)# 主要关注count⻓度分布的纵坐标, 不需要绘制横坐标, 横坐标范围通过dist图进⾏查看
plt.xticks([])
plt.show()
# 绘制dist⻓度分布图
sns.histplot(valid_data["sentence_length"],kde=True)
# 主要关注dist⻓度分布横坐标, 不需要绘制纵坐标
plt.yticks([])
plt.show()

训练集句⼦⻓度分布:

 

 

验证集句⼦⻓度分布:

 

 

通过绘制句⼦⻓度分布图, 可以得知我们的语料中⼤部分句⼦⻓度的分布范围, 因为模型的输⼊要 求为固定尺⼨的张量,合理的⻓度范围对之后进⾏句⼦截断补⻬(规范⻓度)起到关键的指导作⽤. 上图中⼤部分句⼦⻓度的范围⼤致为20-250之间.

六.获取正负样本长度散点分布 

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt# 设置显示⻛格
plt.style.use('fivethirtyeight')
# 分别读取训练tsv和验证tsv
train_data = pd.read_csv("train.tsv", sep="\t")
valid_data = pd.read_csv("dev.tsv", sep="\t")train_data["sentence_length"] = list(map(lambda x: len(x),
train_data["sentence"]))valid_data["sentence_length"] = list(map(lambda x: len(x),
valid_data["sentence"]))# 绘制训练集⻓度分布的散点图
sns.stripplot(y='sentence_length',x='label',data=train_data)
plt.show()
# 绘制验证集⻓度分布的散点图
sns.stripplot(y='sentence_length',x='label',data=valid_data)
plt.show()

训练集上正负样本的⻓度散点分布:

验证集上正负样本的⻓度散点分布: 

通过查看正负样本⻓度散点图, 可以有效定位异常点的出现位置, 帮助我们更准确进⾏⼈⼯语料审 查. 上图中在训练集正样本中出现了异常点, 它的句⼦⻓度近3500左右, 需要我们⼈⼯审查. 

七.获取不同词汇总数统计 

# 导⼊jieba⽤于分词
# 导⼊chain⽅法⽤于扁平化列表
import jieba
from itertools import chain
import matplotlib.pyplot as plt
import pandas as pdplt.style.use('fivethirtyeight')
# 分别读取训练tsv和验证tsv
train_data = pd.read_csv("train.tsv", sep="\t")
valid_data = pd.read_csv("dev.tsv", sep="\t")
# 获得训练数据标签数量分布# 进⾏训练集的句⼦进⾏分词, 并统计出不同词汇的总数
train_vocab = set(chain(*map(lambda x: jieba.lcut(x), train_data["sentence"])))
print("训练集共包含不同词汇总数为:", len(train_vocab))
# 进⾏验证集的句⼦进⾏分词, 并统计出不同词汇的总数
valid_vocab = set(chain(*map(lambda x: jieba.lcut(x), valid_data["sentence"])))
print("训练集共包含不同词汇总数为:", len(valid_vocab))

结果展示:

训练集共包含不同词汇总数为: 12162
训练集共包含不同词汇总数为: 6857 

八.总结 

学习了⽂本数据分析的作⽤:

        ⽂本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型 训练过程中⼀些超参数的选择.

学习了常⽤的⼏种⽂本数据分析⽅法:

        标签数量分布

        句⼦⻓度分布

        词频统计

学习了基于真实的中⽂酒店评论语料进⾏⼏种⽂本数据分析⽅法.

         获得训练集和验证集的标签数量分布

        获取训练集和验证集的句⼦⻓度分布

        获取训练集和验证集的正负样本⻓度散点分布

        获得训练集与验证集不同词汇总数统计 

 

 

http://www.lryc.cn/news/595216.html

相关文章:

  • 本地部署Dify、Docker重装
  • neuronxcc包介绍及示例代码
  • 【Java学习|黑马笔记|Day19】方法引用、异常(try...catch、自定义异常)及其练习
  • seata at使用
  • 深度学习 -- 梯度计算及上下文控制
  • 7月21日总结
  • registry-ui docker搭建私有仓库的一些问题笔记
  • 服务器后台崩溃的原因
  • 使用Langchain调用模型上下文协议 (MCP)服务
  • 【未限制消息消费导致数据库CPU告警问题排查及解决方案】
  • WEB前端登陆页面(复习)
  • 随笔20250721 PostgreSQL实体类生成器
  • Elasticsearch X-Pack安全功能未启用的解决方案
  • OpenEuler 22.03 系统上安装配置gitlab runner
  • 笔试——Day14
  • 【PTA数据结构 | C语言版】求单源最短路的Dijkstra算法
  • 打造自己的 Jar 文件分析工具:类名匹配 + 二进制搜索 + 日志输出全搞定
  • Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙
  • PHP实战:从原理到落地,解锁Web开发密码
  • 【HarmonyOS】ArkTS语法详细解析
  • Valgrind Cachegrind 全解析:用缓存效率,换系统流畅!
  • NISP-PTE基础实操——代码审计
  • Near Cache
  • 嵌入式学习-土堆目标检测(1)-day26
  • 低代码平台能否完全取代传统前端开发
  • Apache Ignite Binary Object 调优
  • OpenCV计算机视觉实战(16)——图像分割技术
  • 有关Maven的个人笔记总结
  • 【PTA数据结构 | C语言版】双连通分量
  • Spring Boot自动装配原理深度解析:从核心注解到实现机制