Sentiment Analysis For RNN

循环神经网络进行情感分析

引言:

对于情感分析,如果简化来看可以分为正向情绪负向情绪,我们可以将情感分析视为文本分类任务,因此我们可以将预训练的词向量应用于情感分析。我们可以用预训练的GloVe模型表示每个标记,并反馈到RNN中。


RNN表征文本

在文本分类任务中,要将可变长度的文本序列转为固定长度。可以通过nn.Embedding()函数获得单独的预训练GloVe,再去通过双向LSTM,最后在去通过一个全连接层做一个二分类,即可实现RNN表征文本。

1
2
3
self.embedding = nn.Embedding(vocab_size, embed_size)
self.encoder = nn.LSTM(embed_size, num_hiddens, num_layers=num_layers,bidirectional=True)
self.decoder = nn.Linear(4 * num_hiddens, 2)
1
2
3
4
embeddings = self.embedding(inputs.T)
outputs, _ = self.encoder(embeddings)
encoding = torch.cat((outputs[0], outputs[-1]), dim=1)
outs = self.decoder(encoding)

训练和评估模型

选用IMDB数据集,该数据集包含50 000 条严重两极分化的评论。 训练集 测试集各 25000 条评论,并都包含 50% 的正面评论和 50% 的负面评论。加载我们预训练的GloVe模型后调用训练函数进行训练,用100维GloVe下方展示模型情况。

1
2
3
4
(embedding): Embedding(49346, 100)
(encoder): LSTM(100, 100, num_layers=2, bidirectional=True)
(decoder): Linear(in_features=400, out_features=2, bias=True)


训练情况

用训练好的模型预测两个简单的句子

1
predict_sentiment(net, vocab, 'this movie is so great')

'positive'

1
predict_sentiment(net, vocab, 'this movie is so bad')

'negative'


完整实现代码

https://github.com/JiaZhengJingXianSheng/Sentiment-Analysis-For-RNN

参考链接

https://d2l.ai/chapter_natural-language-processing-applications/sentiment-analysis-rnn.html