概述
1. 文本情感倾向性分析
1.1 情感分析的概念
- 简单的说,我们可以将情感分析(sentiment classification)任务定义为一个分类问题,即指定一个文本输入,机器通过对文本进行分析、处理、归纳和推理后自动输出结论,如下图所示:
1.2 情感分析的任务
- 通常情况下,人们把情感分析任务看成一个三分类问题。
- 正向: 表示正面积极的情感,如高兴,幸福,惊喜,期待等。
- 负向: 表示负面消极的情感,如难过,伤心,愤怒,惊恐等。
- 其他: 其他类型的情感。
1.3 情感分析的作用
- 利用机器自动分析这些情感倾向,不但有助于帮助企业了解消费者对其产品的感受,为产品改进提供依据;同时还有助于企业分析商业伙伴们的态度,以便更好地进行商业决策
2. 情感分析的数据预处理
2.1 数据集介绍
- IMDB电影评论数据,地址:http://ai.stanford.edu/~amaas/data/sentiment/,这是一份包含了5万条流行电影的评论数据,其中训练集25000条,测试集25000条。
2.2 思路分析
- 根据上述的样本,需要使用pytorch完成模型,实现对评论情感进行预测。首先可以把上述问题定义为分类问题,情感评分分为1-10,10个类别。那么根据之前的经验,我们的大致流程如下:准备数据集、模型构建、模型训练、模型评估。
2.3 代码实现
- 步骤一:定义tokenize的方法
def tokenize(text):
fileters = ['!', '"', '#', '$', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>',
'?', '@'
, '[', '\', ']', '^', '_', '`', '{', '|', '}', '~', 't', 'n', 'x97', 'x96', '”', '“', ]
text = re.sub("<.*?>", " ", text, flags=re.S)
text = re.sub("|".join(fileters), " ", text, flags=re.S)
return [i.strip() for i in text.split()]
- 步骤二:准备dataset
# 2. 准备dataset
class ImdbDataset(Dataset):
def __init__(self, mode):
# 调用父类初始化方法初始化继承的属性
super(ImdbDataset, self).__init__()
if mode == "train":
text_path = [os.path.join(data_base_path, i) for i in ["train/neg", "train/pos"]]
else:
text_path = [os.path.join(data_base_path, i) for i in ["test/neg", "test/pos"]]
self.total_file_path_list = []
for i in text_path:
self.total_file_path_list.extend([os.path.join(i, j) for j in os.listdir(i)])
def __getitem__(self, idx):
cur_path = self.total_file_path_list[idx]
cur_filename = os.path.basename(cur_path)
label = int(cur_filename.split("_")[-1].split(".")[0]) - 1 # 处理标题,获取label,转化为从[0-9]
text = tokenize(open(cur_path).read().strip()) # 直接按照空格进行分词
return label, text
def __len__(self):
return len(self.total_file_path_list)
- 步骤三:实例化 DataLoader
dataset = ImdbDataset(mode="train")
def collate_fn(batch):
# batch是list,其中是一个一个元组,每个元组是dataset中__getitem__的结果
content,label = list(zip(*batch))
return content,label
dataloader = DataLoader(dataset=dataset, batch_size=10, shuffle=True,collate_fn=collate_fn)
- 步骤四:查看数据结果
count = 0
for idx, (label, text) in enumerate(dataloader):
print("idx:", idx)
print("table:", label)
print("text:", text)
count += 1
if count == 1:
break
最后
以上就是无聊花卷为你收集整理的二十、文本情感分类的全部内容,希望文章能够帮你解决二十、文本情感分类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复