NNDL 实验七 循环神经网络(4)基于双向LSTM的文本分类

6.4 实践:基于双向LSTM模型完成文本分类任务

电影评论可以蕴含丰富的情感:比如喜欢、讨厌、等等.

情感分析(Sentiment Analysis)是为一个文本分类问题,即使用判定给定的一段文本信息表达的情感属于积极情绪,还是消极情绪.

本实践使用 IMDB 电影评论数据集,使用双向 LSTM 对电影评论进行情感分析

6.4.1 数据处理

IMDB电影评论数据集是一份关于电影评论的经典二分类数据集.

IMDB 按照评分的高低筛选出了积极评论和消极评论,如果评分 ≥7≥7,则认为是积极评论;如果评分 ≤4≤4,则认为是消极评论.

数据集包含训练集和测试集数据,数量各为 25000 条,每条数据都是一段用户关于某个电影的真实评价,以及观众对这个电影的情感倾向.

6.4.2 模型构建

NNDL 实验七 循环神经网络(4)基于双向LSTM的文本分类_第1张图片

由如下几部分组成:
(1)嵌入层:将输入的数字序列进行向量化,即将每个数字映射为向量。这里直接使用飞桨API:paddle.nn.Embedding来完成。

(2)双向LSTM层:接收向量序列,分别用前向和反向更新循环单元。这里我们直接使用飞桨API:paddle.nn.LSTM来完成。只需要在定义LSTM时设置参数direction为bidirectional,便可以直接使用双向LSTM。

思考: 在实现双向LSTM时,因为需要进行序列补齐,在计算反向LSTM时,占位符[PAD]是否会对LSTM参数梯度的更新有影响。如果有的话,如何消除影响?
注:在调用paddle.nn.LSTM实现双向LSTM时,可以传入该批次数据的真实长度,paddle.nn.LSTM会根据真实序列长度处理数据,对占位符[PAD]进行掩蔽,[PAD]位置将返回零向量。

(3)聚合层:将双向LSTM层所有位置上的隐状态进行平均,作为整个句子的表示。

(4)输出层:输出层,输出分类的几率。这里可以直接调用paddle.nn.Linear来完成。

上面模型中的嵌入层、双向LSTM层和线性层都可以直接调用飞桨API来实现,这里我们只需要实现汇聚层算子。

需要注意的是,虽然飞桨内置LSTM在传入批次数据的真实长度后,会对[PAD]位置返回零向量,但考虑到汇聚层与处理序列数据的模型进行解耦,因此在本节汇聚层的实现中,会对[PAD]位置进行掩码。

6.4.3 模型训练

6.4.4 模型评价

6.4.5 模型预测


6.5 拓展实验(选做)

使用Paddle内置的单向LSTM进行文本分类实验

1 修改模型定义,将nn.LSTM中的direction设置为forward以使用单向LSTM模型,同时设置线性层的shape为[hidden_size, num_classes]

2 由于之前实现的LSTM默认只返回最后时刻的隐状态,然而本实验中需要用到所有时刻的隐状态向量,因此需要对自己实现的LSTM进行修改,使其返回序列向量


ref:

NNDL 实验6(上) - HBU_DAVID - 博客园 (cnblogs.com)

NNDL 实验6(下) - HBU_DAVID - 博客园 (cnblogs.com)

8. 循环神经网络 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)

9. 现代循环神经网络 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)

你可能感兴趣的:(DeepLearning,rnn,lstm,深度学习)