文本数据分析
一.前言
本章主要是了解⽂本数据分析的作⽤,掌握常⽤的⼏种⽂本数据分析⽅法。
二.文件数据分析介绍
⽂本数据分析的作⽤:
⽂本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型 训练过程中⼀些超参数的选择.
常⽤的⼏种⽂本数据分析⽅法:
标签数量分布
句⼦⻓度分布
词频统计与关键词词云
三.数据集说明
我们将基于真实的中⽂酒店评论语料来讲解常⽤的⼏种⽂本数据分析⽅法.
中⽂酒店评论语料:
其中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
八.总结
学习了⽂本数据分析的作⽤:
⽂本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型 训练过程中⼀些超参数的选择.
学习了常⽤的⼏种⽂本数据分析⽅法:
标签数量分布
句⼦⻓度分布
词频统计
学习了基于真实的中⽂酒店评论语料进⾏⼏种⽂本数据分析⽅法.
获得训练集和验证集的标签数量分布
获取训练集和验证集的句⼦⻓度分布
获取训练集和验证集的正负样本⻓度散点分布
获得训练集与验证集不同词汇总数统计