文本数据分析

一.前言

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

二.文件数据分析介绍

⽂本数据分析的作⽤:

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

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

标签数量分布

句⼦⻓度分布

词频统计与关键词词云

三.数据集说明

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

中⽂酒店评论语料:

其中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代表积极.

四.获取标签数量分布

python 复制代码
# 导⼊必备⼯具包
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左右, 否则就要进⾏必要的数据增强或数据删减. 上图中训练和验 证集正负样本都稍有不均衡, 可以进⾏⼀些数据增强.

五.获取句子长度分布

python 复制代码
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之间.

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

python 复制代码
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左右, 需要我们⼈⼯审查.

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

python 复制代码
# 导⼊jieba⽤于分词
# 导⼊chain⽅法⽤于扁平化列表
import jieba
from itertools import chain
import matplotlib.pyplot as plt
import pandas as pd

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_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

八.总结

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

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

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

标签数量分布

句⼦⻓度分布

词频统计

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

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

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

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

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

相关推荐
AI推荐率5 小时前
想让AI在选购问题中推荐品牌,应该找什么类型的服务商?
大数据·人工智能·microsoft
浅思科技集6 小时前
工业生产运营软件如何选择?看端到端可见性、数据贯通与AI落地
大数据·人工智能
浅念-6 小时前
一文吃透Git:本地操作|冲突处理|远程协作|GitFlow工作流详解
大数据·git·elasticsearch·搜索引擎·gitflow
葫三生6 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
国科安芯7 小时前
星链供电架构中的高集成度电源管理方案研究——基于ASP4644四通道降压稳压器在低轨卫星星座中的应用分析
大数据·单片机·嵌入式硬件·架构·低轨卫星·星间链路
小王毕业啦7 小时前
2011-2024年 各地级市养老服务信息面板数据 xlsx
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
ailsa_hui8 小时前
对于医疗器械行业,鼎捷的ERP有成熟的行业解决方案和合规性支持吗?
大数据
资讯综合9 小时前
500亿招聘市场悖论:AI技术能否填平行业的信任深坑
大数据·人工智能
百胜软件@百胜软件9 小时前
胜券AI的Skills可插拔技能包,让零售AI从“泛”到“专”
大数据·人工智能·零售
汇智信科10 小时前
基于 Jmis 框架的制度与流程管控系统设计与应用|项目全生命周期管理
大数据·人工智能·微服务·云原生·汇智信科