赞
踩
理解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 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。