当前位置:   article > 正文

RNN和LSTM、GRU:情感分类IMDB 影评数据集

RNN和LSTM、GRU:情感分类IMDB 影评数据集

源码下载:https://github.com/jeanMrx/IMDB

一、实验目的

理解RNN和LSTM、GRU的结构和原理,了解梯度传播。通过构建循环神经网络RNN和LSTM情感分类实例,熟悉循环神经网络RNN、LSTM和GRU的原理、结构和工作过程。

二、实验结果及分析

1.使用经典的 IMDB 影评数据集来完成情感分类任务。IMDB 影评数据集(来自https://www.kaggle.com/iarunava/imdb-movie-reviews-dataset”)包含了50000 条用户评价,评价的标签分为消极和积极,其中 IMDB 评级<5 的用户评价标注为0,即消极(neg);IMDB 评价>=7 的用户评价标注为 1,即积极(pos)。25000 条影评用于训练集,25,000 条用于测试集。训练数据和测试数据分别在不同的文件夹中,train和test文件夹中分别同时包含有pos(正向)和neg(负向)两种评论。在pos和neg文件夹中,每一个.txt文件包含一条评论。

使用torchtext库完成文本数据读取和预处理。首先定义data.Field()实例用spacy()处理文本,要求句子长度为200,即每个文本只保留前面的200个单词,然后用splits()划分训练、测试集。

可以使用预先训练好的词嵌入来构建词汇表。词汇表需要使用训练集构建,其中max_size限制单词表只包含最常见的单词,要求最多包含训练集中的10000个单词。然后针对训练数据和测试数据使用data.BucketIterator()将它们处理为数据加载器,每个batch包含32个文本数据。

2. 分别构建一个单向和双向的LSTM模型,包括一个Embedding 层、两个LSTM层和一个分类网络层对IMDB 影评数据集实现情感分类。设置词向量编码长度embedding_len = 100,然后输入序列通过 Embedding 层完成词向量编码,循环通过两个LSTM层,提取语义特征,取最后一层的最后时间戳的状态向量输出送入分类网络,经过 Sigmoid 激活函数后得到输出概率。其次设置优化器为 Adam 优化器,学习率为 0.001,误差函数选用 2 分类的交叉熵损失函数,测试指标采用准确率。为了加快网络的训练速度,使用已经预训练好的词向量初始化嵌入层的参数。完成训练和评估后,把参数设置、训练和测试结果,分别填入下表1和表2。

表1 LSTM网络的参数

数据集参数

网络模型参数

训练参数

批量大小

32

RNN状态向量长度

64

学习率

0.001

句子最大长度

200

输出神经元数

1

训练次数

10

词向量编码长度

100

输出激活函数

sigmoid

学习算法

Adam(rnn.parameters(), lr=1e-3)

词汇表大小

10002

损失函数loss

BCEWithLogitsLoss()

表2 LSTM网络的训练、测试结果

LSTM网络

dropout

训练结果(最后一次的平均正确率)

测试的平均正确率

单向

0.936

0.8202

单向

有,断开率为0.5
0.802

0.7931

双向

0.878

0.8411

双向

有,断开率为0.5
0.939

0.8487

3.分别构建2层的LSTM和GRU模型,设置参数和表1相同,把不同模型的训练和测试结果填入下表3。

表3 不同模型(双向RNN、双向LSTM和双向GRU)的训练、测试结果

不同模型

训练结果(最后一次的平均正确率)

测试的平均正确率

双向RNN模型(2层)

0.719

0.6728

双向LSTM模型(2层)

0.939

0.8487

双向GRU模型(2层)

0.959

0.8472

   4. 利用下载的预训练GloVe 词向量表,选择特征长度 100 的文件glove.6B.100d.txt,其中每个词汇使用长度为 100 的向量表示。把通过预训练的 GloVe 模型初始化的 Embedding 层的训练结果和随机初始化的 Embedding 层的训练结果填入表4。

表4不同Embedding 层的训练、测试结果

参数设置

不同模型

训练结果(最后一次的平均正确率)

测试的平均正确率

训练次数为10

其它参数同表1

双向LSTM模型(2层、随机初始化的 Embedding 层)

0.828

0.817

双向LSTM模型(2层、通过预训练的特征长度为100的 GloVe 模型初始化的 Embedding 层)

0.939

0.8487

双向GRU模型(2层、随机初始化的 Embedding 层)

0.866

0.915

双向GRU模型(2层、通过预训练的特征长度为100的 GloVe 模型初始化的 Embedding 层)

0.959

0.8472

双向GRU模型(2层、通过预训练的特征长度为50的 GloVe 模型初始化的 Embedding 层)

0.9271

0.8555

双向GRU模型(2层、通过预训练的特征长度为200的 GloVe 模型初始化的 Embedding 层)

0.9783

0.8441

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/993017
推荐阅读
相关标签
  

闽ICP备14008679号