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 模型原理

  • 网络结构:模型的网络结构如下图所示,



textcnn过拟合怎么办 textrcnn模型算法简介_nlp


模型的第一部分是一个BiRNN结构,第二部分是max-pooling层,第三部分是全连接层。第一部分主要用来学习word representation,第二部分和第三部分用来学习text representation。

1.1.1 Word Representation Learning

(1) 学习单词的左上文与右下文的信息
textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_02 textcnn过拟合怎么办 textrcnn模型算法简介_nlp_03

  • textcnn过拟合怎么办 textrcnn模型算法简介_nlp_04:是一个稠密向量,表示单词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_05的左上文。
  • textcnn过拟合怎么办 textrcnn模型算法简介_sed_06:是一个稠密向量,表示单词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_05的嵌入向量,即word embedding。
  • textcnn过拟合怎么办 textrcnn模型算法简介_sed_08:是一个矩阵,用于将上一个单词的左上文textcnn过拟合怎么办 textrcnn模型算法简介_sed_09传递到下一个单词的左上文textcnn过拟合怎么办 textrcnn模型算法简介_nlp_10中。
  • textcnn过拟合怎么办 textrcnn模型算法简介_nlp_11:是一个矩阵,结合当前词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_12的语义到下一个词的左上文中,s表示的是semantic。
  • 右下文textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_13的计算中的符号意义同理可知。

(2) 计算单词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_05的隐藏语义向量 (潜在语义表示)

  • 将单词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_05的左上文、嵌入向量和右下文表示连接起来表示单词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_05
    textcnn过拟合怎么办 textrcnn模型算法简介_Word_17
  • 使用线性变换激活函数计算单词textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_05的隐藏语义向量:
    textcnn过拟合怎么办 textrcnn模型算法简介_局部特征_19

注释(个人理解):Word Representation Learning 过程可以看作是卷积过程(从宏观上理解),每个单词的隐藏语义向量textcnn过拟合怎么办 textrcnn模型算法简介_sed_20相当于是一个通道的计算结果,即响应图。

1.1.2 Text Representation Learning

(1) max-pooling层
textcnn过拟合怎么办 textrcnn模型算法简介_Word_21
  每一个textcnn过拟合怎么办 textrcnn模型算法简介_Word_22是一个向量,取每一个向量中的最大值组成向量textcnn过拟合怎么办 textrcnn模型算法简介_sed_23,类似于取每一个响应图中的最大值。最大池化可以帮助找到句子中最重要的潜在语义信息。

(2) 全连接层
textcnn过拟合怎么办 textrcnn模型算法简介_Word_24 textcnn过拟合怎么办 textrcnn模型算法简介_textcnn过拟合怎么办_25
  将textcnn过拟合怎么办 textrcnn模型算法简介_sed_23输入到全连接层,然后通过softmax进行分类。

2. 实践

  • 说明:论文中作者给出了BiRNN的内部计算方式公式(1)和公式(2),与RNN本身的构造不一样 (个人理解),因此网上的代码有两种实现方式,一种是按照论文的公式构造BiRNN,一种是使用tensorflow库中的RNN,即原始的RNN结构。