数据集
使用的是hnSentiCorp_htl_all 数据概览: 7000 多条酒店评论数据,5000 多条正向评论,2000 多条负向评论 字段说明
字段 | 说明 |
---|
label | 1 表示正向评论,0 表示负向评论 | review | 评论内容 |
导包
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
查看部分数据
data = pd.read_csv("ChnSentiCorp_htl_all.csv")
print(data.sample(20))
获得数据集的标签数量分布
plt.style.use('fivethirtyeight')
sns.countplot(x="label", data=data)
plt.title("data")
plt.show()
获取数据集的句子长度分布
data["sentence_length"] = data["review"].str.len()
sns.countplot(x="sentence_length", data=data)
plt.xticks([])
plt.show()
sns.distplot(data["sentence_length"])
plt.yticks([])
plt.show()
通过绘制句子长度分布图, 可以得知我们的语料中大部分句子长度的分布范围, 因为模型的输入要求为固定尺寸的张量,合理的长度范围对之后进行句子截断补齐(规范长度)起到关键的指导作用。
获取数据集的正负样本长度散点分布
sns.stripplot(y='sentence_length', x='label', data=data)
plt.show()
通过查看正负样本长度散点图, 可以有效定位异常点的出现位置, 帮助我们更准确进行人工语料审查。
获得数据集不同词汇总数统计
import jieba
from itertools import chain
train_vocab = set(chain(*map(lambda x: jieba.lcut(str(x)), data["review"])))
print("数据集共包含不同词汇总数为:", len(train_vocab))
获得数据集上正负的样本的高频形容词词云
import jieba.posseg as pseg
from wordcloud import WordCloud
def get_a_list(text):
"""用于获取形容词列表"""
r = []
for g in pseg.lcut(text):
if g.flag == "a":
r.append(g.word)
return r
def get_word_cloud(keywords_list,name):
wordcloud = WordCloud(font_path="C:\Windows\Fonts\simhei.ttf", max_words=100, background_color="white")
keywords_string = " ".join(keywords_list)
wordcloud.generate(keywords_string)
wordcloud.to_file(name)
plt.figure()
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
p_data = data[data["label"] == 1]["review"]
p_a_vocab = chain(*map(lambda x: get_a_list(str(x)), p_data))
n_data = data[data["label"] == 0]["review"]
n_a_vocab = chain(*map(lambda x: get_a_list(str(x)), n_data))
get_word_cloud(p_a_vocab, "good.png")
get_word_cloud(n_a_vocab, "bad,png")
根据高频形容词词云显示, 我们可以对当前语料质量进行简单评估, 同时对违反语料标签含义的词汇进行人工审查和修正, 来保证绝大多数语料符合训练标准. 上图中的正样本大多数是褒义词, 而负样本大多数是贬义词, 基本符合要求, 但是负样本词云中也存在"便利"这样的褒义词, 因此可以人工进行审查.
|