1. 简介
参考:(1) Recurrent Convolutional Neural Networks for Text Classification (2) https://zhuanlan.zhihu.com/p/55015587 (3) https://zhuanlan.zhihu.com/p/42201550
- 设计思想:简而言之就是,结合RNN处理序列数据的优势与CNN提取局部特征的优势。具体分析,(1) RNN属于"biased-model",一个句子中越往后的词重要性越高。(2) CNN属于无偏模型,能够通过最大池化获得最重要的特征,但是CNN的滑动窗口大小不容易确定,选的过小容易造成重要信息丢失(太小得到的局部特征太小,会丢失较大的特征),选的过大会造成巨大的参数空间。
1.1 模型原理
- 网络结构:模型的网络结构如下图所示,
模型的第一部分是一个BiRNN结构,第二部分是max-pooling层,第三部分是全连接层。第一部分主要用来学习word representation,第二部分和第三部分用来学习text representation。
1.1.1 Word Representation Learning
(1) 学习单词的左上文与右下文的信息
- :是一个稠密向量,表示单词的左上文。
- :是一个稠密向量,表示单词的嵌入向量,即word embedding。
- :是一个矩阵,用于将上一个单词的左上文传递到下一个单词的左上文中。
- :是一个矩阵,结合当前词的语义到下一个词的左上文中,s表示的是semantic。
- 右下文的计算中的符号意义同理可知。
(2) 计算单词的隐藏语义向量 (潜在语义表示)
- 将单词的左上文、嵌入向量和右下文表示连接起来表示单词:
- 使用线性变换激活函数计算单词的隐藏语义向量:
注释(个人理解):Word Representation Learning 过程可以看作是卷积过程(从宏观上理解),每个单词的隐藏语义向量相当于是一个通道的计算结果,即响应图。
1.1.2 Text Representation Learning
(1) max-pooling层
每一个是一个向量,取每一个向量中的最大值组成向量,类似于取每一个响应图中的最大值。最大池化可以帮助找到句子中最重要的潜在语义信息。
(2) 全连接层
将输入到全连接层,然后通过softmax进行分类。
2. 实践
- 说明:论文中作者给出了BiRNN的内部计算方式公式(1)和公式(2),与RNN本身的构造不一样 (个人理解),因此网上的代码有两种实现方式,一种是按照论文的公式构造BiRNN,一种是使用tensorflow库中的RNN,即原始的RNN结构。