基于IMDB评论数据集的情感分析/LSTM/Pytorch
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
- 读入文本ImdbDataset();
- 分词dataset_train.tokenlize();
- 建立字典,将每个词映射到唯一索引build_vocab();
- 将文本从词序列转换为索引序列,方便输入模型。
构造字典:vocab.py
- 词语存入字典dict(),根据次数对词语进行过滤,并统计词频fit();
- 实现文本转数字序列的方法transform();
- 实现数字序列转文本的方法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相关推荐
- 基于IMDB评论数据集的情感分析
文章目录 前言 一.大型电影评论数据集介绍 二.环境配置 三.实验模型及流程 1.实验模型 2.实验流程 四.实验代码 1.多层感知器模型代码 2.递归神经网络模型代码 3.长短期记忆模型代码 五.实 ...
- 基于微博评论的文本情感分析与关键词提取的实战案例~
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 宣室求贤访逐臣,贾生才调更无伦. ...
- 基于酒店评论的文本情感分析
使用数据集: 谭松波–酒店评论语料 其中包含正面数据集和负面数据集 获取链接:https://pan.baidu.com/s/1oObY4A_Ovo1CY00UrgbBKg 提取码:kth7 这里感谢 ...
- HanLP 基于SVM支持向量机 进行 ChnSentiCorp 情感分析
一.ChnSentiCorp情感分析酒店评论数据集 ChnSentiCorp情感分析酒店评论数据集是一个标注了情感的数据集,分了负面和正面两类,下载地址: http://file.hankcs.com ...
- 自然语言处理(NLP):10 基于WordAVGModel 增加Attention机制情感分析
电影评论数据集进行情感分析 通过torchtext 数据预处理 定义WordAVGModel 引入Attention加权平均机制(参考transformer中attention中dot product ...
- 基于深度学习的汽车行业评论文本的情感分析
使用卷积神经网络对汽车行业评论文本进行情感分析. dateset 爬取汽车之家车主口碑评论文本,抽取口碑中最满意以及最不满意评论文本,分别作为正向情感语料库和负向情感语料库. 爬虫技术视频链接:htt ...
- 利用Python实现酒店评论的中文情感分析,含数据集
利用Python实现酒店评论的情感分析 完整代码下载地址:利用Python实现酒店评论的中文情感分析 情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析.归纳.情感极性分析主要有两种分类方法: ...
- 利用python分析电商_基于Word2Vec+SVM对电商的评论数据进行情感分析
Word2Vec-sentiment 基于Word2Vec+SVM对电商的评论数据进行情感分析 首先是利用word2vec对正负评论数据进行词向量训练,然后利用SVM分类器对语料进行分类,具体的过程如 ...
- 基于PaddleNLP完成 千言情感分析————0.8014分方案
千言|情感分析----0.7839分方案 比赛介绍: 情感分析旨在自动识别和提取文本中的倾向.立场.评价.观点等主观信息.它包含各式各样的任务,比如句子级情感分类.评价对象级情感分类.观点抽取.情绪分 ...
最新文章
- Ros学习调试——rqt_console
- ConcurrentHashMap 内部实现分析
- 【转】Step By Step在VS2008中完整配置Ajax Toolkit的使用(配图)
- 必须使用列别名命名此表达式_lambda表达式
- 开源一周岁,MindSpore新特性巨量来袭
- Linux系统个性化设置
- 筛选法建立初始堆_学术简报|基于库仑效率的退役锂离子动力电池储能梯次利用筛选...
- 20165333 2017-2018-2《Java程序设计》课程总结
- Scratch-Q版三国小人物角色素材分享,值得您的收藏!
- 汽车电子控制系统的构成
- js实现当日期转农历日期
- Redisson(2-1)分布式锁实现对比 VS Java的ReentrantLock之tryLock
- 均值,期望,方差,标准差,协方差
- 深入剖析eMule 【for_wind】
- Snippets 使用
- C专家编程--随记(一)
- HTML微信单页引流项目源码模板分享
- sparql 查询例子
- JDK,JRE以及JVM三者之间的关系
- LVS解决高并发,大数据量