原文链接: http://chenhao.space/post/93d3104e.html
Introduction
题目:Recurrent Convolutional Neural Networks for Text Classification
来源:AAAI2015
本文提出了一种将RNN结构和CNN结构结合起来的一种模型,能够更好的获取语义信息。
利用RNN循环结构捕获上下文信息,利用CNN中的max-pooling方法提取文本中的重要特征,根据这些特征来进行文本分类。实验结果表明,该模型在document-level的数据集上表现的更好。
传统的特征表示方法会忽略上下文信息和词的顺序,以至于不能很好的捕捉到词的语义信息,如one-hot编码。
N-gram语言模型会产生数据稀疏的问题(数据稀疏介绍看这里:N-gram语言模型中的数据稀疏)。
Word embedding是一种分布式的词表示方法,很好的解决了数据稀疏的问题,并且可以捕捉有意义的句法和语义规律。
Recursive Neural Network(RecursiveNN):
- 优点:建立句子表示有效
- 缺点:它捕获句子的语义是通过文本树结构,性能也是在很大程度上依赖文本树结构;耗时;两个句子之间的关系很难用树结构来表示,所以RecusiveNN不适合建模长句子或者文档级文本。
- 时间复杂度 O ( n 2 ) O(n^2) O(n2)
Recurrent Netural Network(RecurrentNN):
- 优点:耗时短;能够捕捉上下文信息,有助于捕获长文本的语义。
- 缺点:有偏模型(biased model),在文本后面的词所占的比重比之前的词要大。
- 时间复杂度 O ( n ) O(n) O(n)
Convolutional Neural Network(CNN):
- 优点:无偏模型(unbiased model),通过max-pooling提取重要特征,比RecursiveNN和RecurrentNN在提取文本语义方面更好。
- 缺点:CNN使用简单的卷积核作为固定窗口。但是这种内核很难确定窗口的大小,窗口小了会丢失一些关键信息,窗口大了会导致出现一个很难训练的大参数空间。
- 时间复杂度 O ( n ) O(n) O(n)
Recurrent Convolutional Netural Network(RCNN):
- 优点:
- 使用双向RNN结构,比传统的基于窗口的神经网络引入更少的噪声。
- 学习到的词表示可以最大程度上捕获到上下文信息。
- 文本表示时可以保存更大范围的词序。
- 结合recurrent structure和max-pooling,利用了RNN和CNN的优势。
- 时间复杂度 O ( n ) O(n) O(n),因为Recurrent structure的时间复杂度时 O ( n ) O(n) O(n),pooling layer时间复杂度也是 O ( n ) O(n) O(n),并且它们时串联的,所以整个模型的时间复杂度时 O ( n ) O(n) O(n)。
Model
模型的输入是由词序列 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn 表示的文档 D D D,输出是预测文档 D D D属于那一类。我们用 p ( k ∣ D , θ ) p(k|D,θ) p(k∣D,θ) 表示文档 D D D属于类别 k k k的概率,其中 θ θ θ是模型中的参数。
Word Representation Learning
我们用一个词及其上下文来表示这个词,这样可以获得更准确的词意。

其中, w i w_i wi 表示第 i i i 个词, c l ( w i ) c_l(w_i) cl(wi) 表示单词 w i w_i wi 左边的上下文信息, c r ( w i ) c_r(w_i) cr(wi) 表示单词 w i w_i wi 右边的上下文信息。
因为第一个词的左边没有上下文信息,最后一个词的右边没有上下文信息,所以我们设置一个共享参数 c l ( w 1 ) c_l(w_1) cl(w1) 和 c r ( w n ) c_r(w_n) cr(wn) 分别作为第一个词的左边上下文信息、最后一个词右边的上下文信息。
e ( w i − 1 ) e(w_{i-1}) e(wi−1) 表示词 w i − 1 w_{i-1} wi−1 的word embedding, W ( l ) W^{(l)} W(l) 是一个将hidden layer(context)转换成下一个 hidden layer 的矩阵参数, W ( s l ) W^{(sl)} W(sl) 是将当前词同它下一个词的左上下文相结合的矩阵。 f f f 是一个非线性激活函数。
我们定义词
w
i
w_i
wi 的表示为:
x
i
=
[
c
l
(
w
i
)
;
e
(
w
i
)
;
c
r
(
w
i
)
]
\Large x_i=[c_l(w_i);e(w_i);c_r(w_i)]
xi=[cl(wi);e(wi);cr(wi)]
将左侧的上下文向量
c
l
(
w
i
)
c_l(w_i)
cl(wi)、word embedding
e
(
w
i
)
e(w_i)
e(wi) 和右侧上下文向量
c
r
(
w
i
)
c_r(w_i)
cr(wi) concate。
这种方式利用了上下文信息,与CNN相比能够更好的消除词 w i w_i wi词意的模糊性,因为CNN使用的是一个固定的窗口(仅仅使用到了部分信息)。
然后再将
x
i
x_i
xi 作线性变化,经过
t
a
n
h
tanh
tanh 激活函数得到
y
i
(
2
)
y_i^{(2)}
yi(2):
y
i
(
2
)
=
t
a
n
h
(
W
(
2
)
x
i
+
b
(
2
)
)
\Large y_i^{(2)}=tanh(W^{(2)}x_i+b^{(2)})
yi(2)=tanh(W(2)xi+b(2))
y
i
(
2
)
y_i^{(2)}
yi(2) 是一个浅语义向量(latent semantic vector in which each semanticfactor will be analyzed to determine the most useful factorfor representing the text.)
Text Representation Learning
y ( 3 ) = max i = 1 n y i ( 2 ) \Large y^{(3)}=\max_{i=1}^ny_i^{(2)} y(3)=i=1maxnyi(2)
取 y i ( 2 ) y_i^{(2)} yi(2) 每一维的最大值组成 y ( 3 ) y^{(3)} y(3),这个过程也就是 Max-pooling 过程。
Max-pooling 可以将不同长度的文本转换成固定长度的向量表示,并且可以捕获整个文本的信息。
这里作者提到了为什么不用 average pooling ,因为只有很少一部分词或者词组是对捕获文档信息有用的,max-pooling 可以在文档中找到最重要的潜语义信息。
然后再经过线性层和softmax,得到分类结果的概率。
线性层:
y
(
4
)
=
W
(
4
)
y
(
3
)
+
b
(
4
)
\Large y^{(4)}=W^{(4)}y^{(3)}+b^{(4)}
y(4)=W(4)y(3)+b(4)
Softmax:
p
i
=
e
x
p
(
y
i
(
4
)
)
∑
k
=
1
n
e
x
p
(
y
k
(
4
)
)
\Large p_i=\frac{exp(y_i^{(4)})}{\sum_{k=1}^{n}exp(y_k^{(4)})}
pi=∑k=1nexp(yk(4))exp(yi(4))
Training
Training Network parameters
We define all of the parameters to be trained as
θ
θ
θ:
θ
=
E
,
b
(
2
)
,
b
(
4
)
,
c
l
(
w
1
)
,
c
r
(
w
n
)
,
W
(
2
)
,
W
(
4
)
,
W
(
l
)
,
W
(
r
)
,
W
(
s
l
)
,
W
(
s
r
)
\large θ={E,b^{(2)},b^{(4)},cl(w_1),cr(w_n),W^{(2)},W^{(4)},W^{(l)},W^{(r)},W^{(sl)},W^{(sr)}}
θ=E,b(2),b(4),cl(w1),cr(wn),W(2),W(4),W(l),W(r),W(sl),W(sr)
Training的目标是使最大似然函数的参数
θ
θ
θ :

利用梯度下降优化训练目标,其中 α \alpha α 是learning rate.

Pre-training Word Embedding
在本论文中,使用了Skip-gram model去预训练word embedding。
通过最大化平均对数概率:

∣ V ∣ |V| ∣V∣ 是未标记文本的词典, e ′ ( w i ) e'(w_i) e′(wi) 是 w i w_i wi 的另一个embedding。
Experiment
Datasets

Results
Comparison
