NLP文本分类--RNN(LSTM) ATTENTION

开篇

文章参考:https://www.jianshu.com/p/8b78ac379e3a

文本分类是NLP中的一个重要方向,它是智能问答、情感分析的基础。在未来自然语言处理的接触、学习中将持续在该方向上写一些文章总结。

在前述的ATT-CNN中,参考了一篇文章是RNN-ATTENTION。在很早之前就对RNN有过一些了解但是知之甚少,概念也很不清楚,本篇决定在实现RNN_ATTENTION的同时,再了解并理解下RNN。

RNN

https://www.jianshu.com/p/8b78ac379e3a(RNN简介)

http://blog.sina.com.cn/s/blog_4eddfe990102x1li.html(实现一个RNN-cell)

https://blog.csdn.net/pnnngchg/article/details/84451037(输入的维度与hiddensize?)

只说之前没有理解到位的,RNN多用于处理序列数据,比如一句话等等。图像也可以在某一维度上作为序列数据,只不过图像具有天然的自编码特性,无需再将任意序列中的数据做编码。下图是RNN-cell的结构,它的输入是序列中前一个隐藏状态+该时刻的向量输入。如何计算隐藏状态。首先,将输入和先前隐藏状态组合以形成向量。该向量现在具有关于当前输入和先前输入的信息。向量经过tanh函数,输出是新的隐藏状态,或网络的内存。


LSTM

和RNN一样的数据流程,区别就在于细胞内的操作。LSTM-cell的结构:遗忘门、输入门、输出门,细胞状态。

https://www.cnblogs.com/AntonioSu/p/8798960.html(了解细节这篇文章)

遗忘门:

遗忘门决定了应丢弃或保留哪些信息。来自先前隐藏状态的信息和来自当前输入的信息通过sigmoid函数传递。值介于0和1之间,越接近0意味着忘记,越接近1意味着要保持。

输入门

输入门要更新单元状态,首先,我们将先前的隐藏状态和当前输入传递给sigmoid函数。这决定了通过将值转换为0到1来更新哪些值:0表示不重要,1表示重要。接着你还要将隐藏状态和当前输入传递给tanh函数,以便在-1和1之间取值以帮助调节网络。然后将tanh输出与sigmoid输出相乘。sigmoid输出将决定哪些信息对于输出很重要。

细胞状态

现在我们应该有足够的信息来计算细胞状态。首先,细胞状态逐点乘以遗忘向量。如果它乘以接近0的值,则有可能在单元状态中丢弃。然后我们从输入门获取输出并进行逐点相加,将神经网络发现的新值更新为细胞状态中,这就给了我们新的细胞状态。

输出门

最后是输出门,输出门决定下一个隐藏状态应该是什么。请记住,隐藏状态包含有关先前输入的信息,隐藏状态也可用于预测。首先,我们将先前的隐藏状态和当前输入传递给sigmoid函数。然后我们将新修改的单元状态传递给tanh函数。我们将tanh输出与sigmoid输出相乘,以确定隐藏状态应携带的信息,输出的是隐藏状态。然后将新的细胞状态和新的隐藏状态转移到下一个时间步。


GRU

LSTM的变种,整体的实现比LSTM简单,计算会少一些。


LSTM实现举例

多层LSTM实现mnist分类

https://blog.csdn.net/jerr__y/article/details/61195257

GRU-ATTENTION实现文本分类

论文

Hierarchical Attention Networks for Document Classification

论文网址

https://www.aclweb.org/anthology/N16-1174/

论文解读

https://blog.csdn.net/u012052268/article/details/80698930#28-%E5%88%86%E5%B1%82%E6%B3%A8%E6%84%8F%E5%8A%9B

摘要

用于文本分类,分层注意力机制,词级别和句子级别的注意力机制使用。

简单使用(词注意力)

基于RNN-attention实现影评的情感分类、文本分类

https://www.jianshu.com/p/cc6407444a8c

https://github.com/ilivans/tf-rnn-attention

你可能感兴趣的:(NLP文本分类--RNN(LSTM) ATTENTION)