1 研究任务一介绍

1.1 研究任务

给定IMDB影评数据集,采用全连接层网络和LSTM模型两种机器学习算法进行二元情感分类,以准确率为评测指标,进行分类算法性能评估与结果分析。数据集官方网址:Sentiment Analysis

代码:链接:https://pan.baidu.com/s/1AECOPQugB4F54T5hvy7B2w?pwd=gw2i 
提取码:gw2i

1.2 研究内容的具体描述

IMDB影评数据集简介

这是用于二元情感分类的数据集,在NLP任务中经常被使用。

1、IMDB结构组成

有评级标签的IMDB数据集包含5万篇IMDB影评,负面评论得分<=4,正面评论得分>=7,其中2.5万篇影评用于训练数据集,2.5万篇影评用于用于测试数据集,训练集和测试集电影不相交。此外,还有另外5万篇没有任何评级标签的IMDB影评,用于无监督学习。

2、IMDB文件夹组成

IMDB数据集主要包括train和test两个文件夹,分别存放训练数据集与测试数据集。每个文件夹都包含neg和pos两个子文件夹,分别是负样本和正样本,train还包含一个unsup是未标注的样本,可用于非监督训练。

3、IMDB文件命名规则

样本文件的命名规则为“序号_评级”。其中“评级”可以分为0~9级。

2 研究方法原理与步骤

2.1 文本预处理

文本数据预处理步骤:build_vocab.py

  1. 读入文本ImdbDataset();
  2. 分词dataset_train.tokenlize();
  3. 建立字典,将每个词映射到唯一索引build_vocab();
  4. 将文本从词序列转换为索引序列,方便输入模型。

构造字典:vocab.py

  1. 词语存入字典dict(),根据次数对词语进行过滤,并统计词频fit();
  2. 实现文本转数字序列的方法transform();
  3. 实现数字序列转文本的方法inverse_transform()。

2.2 word embedding

word embedding是机器学习中表示文本常用的一种方法,用于文本转化为向量,使用浮点型稠密矩阵表示token,根据词典大小num_embeddings,指定维度参数embedding dim。

代码实现:self.embedding = nn.Embedding(num_embeddings=len(vocab), embedding_dim=embedding_dim, padding_idx=vocab.PAD)

2.3 全连接层网络

全连接层(fully connected layers, FC)在整个卷积神经网络中起到”分类器“的作用,将学到的分布式特征表示映射到样本标记空间。在实际使用中,全连接层可由卷积操作实现。在RNN中,全连接用来把embedding空间拉到隐层空间,把隐层空间转回label空间等。

在pytorch中的nn.Linear表示线性变换: ,其中x是输入,A是权值,b是偏置,y是输出。

网络结构:

class ImdbModel(nn.Module):

def __init__(self):

super(ImdbModel, self).__init__()

self.embedding = nn.Embedding(num_embeddings=len(voc_model), embedding_dim=200, padding_idx=voc_model.PAD)

self.fc = nn.Linear(sequence_max_len * 200, 2)

def forward(self, input):

input_embeded = self.embedding(input)

# 变形

input_embeded_viewed = input_embeded.view(input_embeded.size(0), -1)

# 全连接

out = self.fc(input_embeded_viewed)

return F.log_softmax(out, dim=-1)

超参数设置:

表1 超参数设置

训练次数

epoch

6

每次训练数据大小

train_batch_size

512

每次测试数据大小

test_batch_size

128

句子最大长度

sequence_max_len

100

Embedding维度

embedding_dim

200

2.4 LSTM模型

2.4.1 研究方法选择原因

LSTM(Long-Short Term Memory RNN)模型是文本处理中最为常用的RNN循环神经网络。

2.4.2 方法原理与步骤

图1 LSTM模型逻辑图

图中LSTM有四个输入,分别是input(模型输入),forget gate(遗忘门),input gate(输入门),以及output gate(输出门)。相比,LSTM参数量是普通神经网络的4倍。遗忘门决定前一刻memory是否会被记住,遗忘门打开时,前一刻记忆会被保留,关闭时,前一刻记忆会被清空。输入门决定当前输入有多少保留下来,因为在序列输入中,并不是每个时刻的输入信息都同等重要,当输入完全没有用时,输入门关闭,此刻输入信息被丢弃。输出门决定当前memroy的信息有多少被立即输出,输出门打开时,会被全部输出,关闭时,当前memory中的信息不会被输出。

图2 LSTM模型结构图

网络结构:

class ImdbModel(nn.Module):

def __init__(self):

super(ImdbModel, self).__init__()

self.embedding = nn.Embedding(num_embeddings=len(voc_model), embedding_dim=200, padding_idx=voc_model.PAD).to()

self.lstm = nn.LSTM(input_size=200, hidden_size=64, num_layers=2, batch_first=True, bidirectional=True,dropout=0.5)

self.fc1 = nn.Linear(64 * 2, 64)

self.fc2 = nn.Linear(64, 2)

def forward(self, input):

input_embeded = self.embedding(input)

output, (h_n, c_n) = self.lstm(input_embeded)

# out :[batch_size,hidden_size*2]

out = torch.cat([h_n[-1, :, :], h_n[-2, :, :]], dim=-1)

# 进行全连接

out_fc1 = self.fc1(out)

# 进行relu

out_fc1_relu = F.relu(out_fc1)

# 全连接

out_fc2 = self.fc2(out_fc1_relu)  # out :[batch_size,2]

return F.log_softmax(out_fc2, dim=-1)

2.4.3 模型训练超参设置

模型训练:

def train(imdb_model, epoch):

train_dataloader = get_dataloader(train=True)

optimizer = Adam(imdb_model.parameters())

for i in range(epoch):

bar = tqdm(train_dataloader, total=len(train_dataloader))

for idx, (data, target) in enumerate(bar):

optimizer.zero_grad()

data = data.to(device())

target = target.to(device())

output = imdb_model(data)

loss = F.nll_loss(output, target)

loss.backward()

optimizer.step()

bar.set_description("epcoh:{}  idx:{}   loss:{:.6f}".format(i,

超参数设置:

表2 超参数设置

训练次数

epoch

6

每次训练数据大小

train_batch_size

512

每次测试数据大小

test_batch_size

128

句子最大长度

sequence_max_len

100

Embedding维度

embedding_dim

200

3 实验结果及分析

3.1 实验结果

3.1.1 开发环境介绍

系统:Win7

处理器:Intel(R) Core(TM)i5-5200U CPU

内存:4G

软件:Pytorch 1.10.2、Python 3.6.5

3.1.2 性能评估指标介绍

表3 识别结果

正类

负类

被检索

True Positive

False Positive

未检索

False Negative

True Negative

TP:被检索到正样本,实际也是正样本(正确识别)

FP:被检索到正样本,实际是负样本(一类错误识别)

FN:未被检索到正样本,实际是正样本(二类错误识别)

TN:未被检索到正样本,实际也是负样本(正确识别)

指标计算:

准确率: 分类正确的样本数 与 样本总数之比

Accuracy = (TP + TN) / (TP + FN + FP + TN)

3.1.3 实验结果

表4 两种算法准确率

Accuracy

全连接层网络

66.0%

LSTM

80.7%

3.2 实验结果分析

仅全连接层网络经过6个Epochs的训练,准确率达到了66.0%;LSTM模型经过6个Epochs的训练,准确率达到了80.7%。全连接层网络和LSTM模型随着训练次数的增多,准确率不断提高,Loss 不断降低。由准确率表3可知,LSTM模型比全连接层网络的准确率更高。

4 结论

在全连接层网络基础上增加LSTM网络准确率提高了14%,达到了十分显著的效果。LSTM模型性能还有进一步提高的空间。

基于IMDB评论数据集的情感分析/LSTM/Pytorch相关推荐

  1. 基于IMDB评论数据集的情感分析

    文章目录 前言 一.大型电影评论数据集介绍 二.环境配置 三.实验模型及流程 1.实验模型 2.实验流程 四.实验代码 1.多层感知器模型代码 2.递归神经网络模型代码 3.长短期记忆模型代码 五.实 ...

  2. 基于微博评论的文本情感分析与关键词提取的实战案例~

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 宣室求贤访逐臣,贾生才调更无伦. ...

  3. 基于酒店评论的文本情感分析

    使用数据集: 谭松波–酒店评论语料 其中包含正面数据集和负面数据集 获取链接:https://pan.baidu.com/s/1oObY4A_Ovo1CY00UrgbBKg 提取码:kth7 这里感谢 ...

  4. HanLP 基于SVM支持向量机 进行 ChnSentiCorp 情感分析

    一.ChnSentiCorp情感分析酒店评论数据集 ChnSentiCorp情感分析酒店评论数据集是一个标注了情感的数据集,分了负面和正面两类,下载地址: http://file.hankcs.com ...

  5. 自然语言处理(NLP):10 基于WordAVGModel 增加Attention机制情感分析

    电影评论数据集进行情感分析 通过torchtext 数据预处理 定义WordAVGModel 引入Attention加权平均机制(参考transformer中attention中dot product ...

  6. 基于深度学习的汽车行业评论文本的情感分析

    使用卷积神经网络对汽车行业评论文本进行情感分析. dateset 爬取汽车之家车主口碑评论文本,抽取口碑中最满意以及最不满意评论文本,分别作为正向情感语料库和负向情感语料库. 爬虫技术视频链接:htt ...

  7. 利用Python实现酒店评论的中文情感分析,含数据集

    利用Python实现酒店评论的情感分析 完整代码下载地址:利用Python实现酒店评论的中文情感分析 情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析.归纳.情感极性分析主要有两种分类方法: ...

  8. 利用python分析电商_基于Word2Vec+SVM对电商的评论数据进行情感分析

    Word2Vec-sentiment 基于Word2Vec+SVM对电商的评论数据进行情感分析 首先是利用word2vec对正负评论数据进行词向量训练,然后利用SVM分类器对语料进行分类,具体的过程如 ...

  9. 基于PaddleNLP完成 千言情感分析————0.8014分方案

    千言|情感分析----0.7839分方案 比赛介绍: 情感分析旨在自动识别和提取文本中的倾向.立场.评价.观点等主观信息.它包含各式各样的任务,比如句子级情感分类.评价对象级情感分类.观点抽取.情绪分 ...

最新文章

  1. Ros学习调试——rqt_console
  2. ConcurrentHashMap 内部实现分析
  3. 【转】Step By Step在VS2008中完整配置Ajax Toolkit的使用(配图)
  4. 必须使用列别名命名此表达式_lambda表达式
  5. 开源一周岁,MindSpore新特性巨量来袭
  6. Linux系统个性化设置
  7. 筛选法建立初始堆_学术简报|基于库仑效率的退役锂离子动力电池储能梯次利用筛选...
  8. 20165333 2017-2018-2《Java程序设计》课程总结
  9. Scratch-Q版三国小人物角色素材分享,值得您的收藏!
  10. 汽车电子控制系统的构成
  11. js实现当日期转农历日期
  12. Redisson(2-1)分布式锁实现对比 VS Java的ReentrantLock之tryLock
  13. 均值,期望,方差,标准差,协方差
  14. 深入剖析eMule 【for_wind】
  15. Snippets 使用
  16. C专家编程--随记(一)
  17. HTML微信单页引流项目源码模板分享
  18. sparql 查询例子
  19. JDK,JRE以及JVM三者之间的关系
  20. LVS解决高并发,大数据量

热门文章

  1. 外卖平台对接笔记(美团外卖,饿了么外卖)
  2. 第九章 习惯六 统合综效——创造性合作的原则
  3. 那些让你惊掉下巴到肚皮上的python冷知识(一)
  4. Unity 使用RVO2(orca)算法
  5. 亲测四款好用的Mac电脑手账软件
  6. C++/Qt框架下的简易计算器
  7. Read和ReadLine及数组的输入方法示例
  8. Cookie的加密与解密
  9. 中国互联网发展之5G、人工智能、云计算、大数据等新兴科技发展状况
  10. 【推荐】推荐系统 Embedding 技术实践总结