开篇
文章参考: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/
论文解读
摘要
用于文本分类,分层注意力机制,词级别和句子级别的注意力机制使用。
简单使用(词注意力)
基于RNN-attention实现影评的情感分类、文本分类