赞
踩
# 导入工具包 import seaborn as sns import pandas as pd import matplotlib.pyplot as plt import jieba import jieba.posseg as pseg from itertools import chain from wordcloud import WordCloud # 设置显示风格 plt.style.use('fivethirtyeight') # 1、分别读取训练tsv和验证tsv train_data = pd.read_csv("./cn_data/train.tsv", sep="\t") valid_data = pd.read_csv("./cn_data/dev.tsv", sep="\t") # 2、获得训练数据标签数量分布 sns.countplot("label", data=train_data) plt.title("train_data") plt.show() # 3、获取验证数据标签数量分布 sns.countplot("label", data=valid_data) plt.title("valid_data") plt.show()
训练集标签数量分布:
验证集标签数量分布:
分析:
在深度学习模型评估中, 我们一般使用ACC作为评估指标, 若想将ACC的基线定义在50%左右, 则需要我们的正负样本比例维持在1:1左右, 否则就要进行必要的数据增强或数据删减. 上图中训练和验证集正负样本都稍有不均衡, 可以进行一些数据增强.
# 1、在训练数据中添加新的句子长度列, 每个元素的值都是对应的句子列的长度 train_data["sentence_length"] = list(map(lambda x: len(x), train_data["sentence"])) # 2、绘制句子长度列的数量分布图 sns.countplot("sentence_length", data=train_data) # 主要关注count长度分布的纵坐标, 不需要绘制横坐标, 横坐标范围通过dist图进行查看 plt.xticks([]) plt.show() # 3、绘制dist长度分布图 sns.distplot(train_data["sentence_length"]) # 主要关注dist长度分布横坐标, 不需要绘制纵坐标 plt.yticks([]) plt.show() # 4、在验证数据中添加新的句子长度列, 每个元素的值都是对应的句子列的长度 valid_data["sentence_length"] = list(map(lambda x: len(x), valid_data["sentence"])) # 5、绘制句子长度列的数量分布图 sns.countplot("sentence_length", data=valid_data) # 主要关注count长度分布的纵坐标, 不需要绘制横坐标, 横坐标范围通过dist图进行查看 plt.xticks([]) plt.show() # 6、绘制dist长度分布图 sns.distplot(valid_data["sentence_length"]) # 主要关注dist长度分布横坐标, 不需要绘制纵坐标 plt.yticks([]) plt.show()
# 1、绘制训练集长度分布的散点图
plt.figure(figsize=(20, 8), dpi=100)
sns.stripplot(y='sentence_length', x = 'label', data = train_data)
plt.show()
# 2、绘制测试集长度分股的散点图
plt.figure(figsize=(20, 8), dpi=100)
sns.stripplot(y='sentence_length', x = 'label', data = valid_data)
plt.show()
# 对训练集的句子进行分词,并统计出不同词汇的总数
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
# 1、获取形容词列表 def get_a_list(text): # 使用jieba的词性标注方法切分文本,获得具有词性属性的flag词汇属性word的对象 # 判断flag是否是形容词,返回对应的词汇 r = [] for g in pseg.lcut(text): if g.flag == 'a': r.append(g.word) return r # 2、创建词云函数 def get_word_cloud(keywords_list): """ 实例化绘制词云的类,其中参数font_path是字体路径,显示中文 max_words指词云图像最多显示多少个词,background_color为背景颜色 """ wordcloud = WordCloud(font_path='./SimHei.ttf', max_words=100, background_color='white') # 将传入的列表转化成词云生成器需要的字符串形式 keywords_string = ''.join(keywords_list) # 生成词云 wordcloud.generate(keywords_string) # 绘制图像 plt.figure() plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() # 3、获得训练集上正样本 p_train_data = train_data[train_data['label'] == 1]['sentence'] # 3.1 提取正样本中每个句子的形容词 p_a_train_vocab = chain(*map(lambda x: get_a_list(x), p_train_data)) # 4、获取训练集上负样本 n_train_data = train_data[train_data['label'] == 0]['sentence'] # 4.1 提取负样本中每个句子的形容词 n_a_train_vocab = chain(*map(lambda x: get_a_list(x), n_train_data)) # 5、调用get_word_cloud函数 get_word_cloud(p_a_train_vocab) get_word_cloud(n_a_train_vocab)
# 1、获取验证集上的正样本
p_valid_data = valid_data[valid_data['label' == 1]]['sentence']
# 提取张样本中每个句子的形容词
p_a_valid_vocab = chain(*map(lambda x: get_a_list(x), p_valid_data))
# 2、获取验证集上的负样本
n_valid_data = valid_data[valid_data['label' == 0]]['sentence']
# 提取负样本中每个句子的形容词
n_a_valid_vocab = chain(*map(lambda x: get_a_list(x), n_valid_data))
# 3、调用get_word_cloud函数
get_word_cloud(p_a_valid_vocab)
get_word_cloud(n_a_valid_vocab)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。