电信保温杯笔记——NLP经典论文:TextRNN
论文
原论文:《Recurrent Neural Network for Text Classification with Multi-Task Learning》
介绍
2016-05-17发表的文章,提出了三种基于RNN的信息共享机制,对所有任务建立共享层,使用多任务学习框架来跨多个相关任务进行联合学习。
文章部分翻译
Abstract
基于神经网络的方法在各种自然语言处理任务中取得了巨大的进展。然而,在以前的大多数工作中,模型是在单个任务上基于目标有监督地学习的,这往往会导致训练数据不足。在本文中,我们使用多任务学习框架来跨多个相关任务进行联合学习。基于循环神经网络,我们提出了三种不同的信息共享机制,对具有特定任务和共享层的文本进行建模。整个网络都接受了所有这些任务的联合训练。在四个基准文本分类任务上的实验表明,我们提出的模型可以在其他相关任务的帮助下提高任务的性能。
2 Recurrent Neural Network for Specific-Task Text Classification
神经模型的主要作用是将可变长度的文本表示为固定长度的向量。这些模型通常由一个投影层组成,该投影层将词、sub-word units或n-grams映射到向量表示(通常使用无监督的方法预训练),然后将它们与不同的神经网络结构结合起来。
文本建模有几种模型,如神经单词袋(NBOW)模型、循环神经网络(RNN)[Chung等人,2014年]、递归神经网络(RecNN)[Socher等人,2012年;Socher等人,2013年]和卷积神经网络(CNN)[Collobert等人,2011年;Kalchbrenner等人,2014年]。这些模型将单词在文本序列中的 embedding 作为输入,并用固定长度的向量表示法总结其含义。
其中,循环神经网络(RNN)是NLP问题中最常用的结构之一,因为其循环结构非常适合处理变长文本。
2.1 Recurrent Neural Network
循环神经网络(RNN)[Elman,1990]能够通过对输入序列的内部隐藏状态向量 h t h_t ht 循环应用变换函数来处理任意长度的序列。在时间步 t t t 处隐藏状态 h t h_t ht 的激活是当前输入符号 x t \mathrm{x}_t xt 和先前隐藏状态 h t − 1 h_{t-1} ht−1 的函数 f f f 的输出。
h t = { 0 t = 0 f ( h t − 1 , x t ) o t h e r w i s e ( 1 ) \rm{h}_t = \begin{cases} 0 & t = 0 \\ f(\mathrm{h}_{t-1}, \mathrm{x}_t) & \mathrm{otherwise} \end{cases} \quad\quad\quad\quad\quad\quad\quad (1) ht={0f(ht−1,xt)t=0otherwise(1)
通常使用状态到状态的转换函数 f f f 作为对应位置元素相乘的非线性变换和 x t \rm{x}_t xt 和 h t − 1 \rm{h}_{t-1} ht−1 的仿射变换的组合。
传统上,建模序列的简单策略是使用一个RNN将输入序列映射到固定大小的向量,然后将向量馈送到softmax层以进行分类或其他任务[Cho等人,2014]。
不幸的是,具有这种形式的变换函数的RNN的一个问题是,在训练期间,梯度向量的分量可能在长序列上呈指数增长或衰减[Hochreiter等人,2001年;Hochreiter和Schmidhuber,1997年]。梯度爆炸或消失的问题使得RNN模型很难在序列中学习长距离相关性。
长-短期记忆网络(LSTM)由[Hochreiter and Schmidhuber,1997]提出,专门解决学习长期依赖的问题。LSTM内部有一个单独的存储单元,仅在认为必要时更新和暴露其内容。对标准LSTM单元有多种小的修改。虽然有许多LSTM变体,但这里我们描述了Graves[2013]使用的实现。
我们将每个时间步
t
t
t 的LSTM单元定义为
R
d
R^d
Rd 中的向量集合:输入门
i
t
i_t
it、遗忘门
f
t
f_t
ft、输出门
o
t
o_t
ot、存储单元
c
t
c_t
ct 和隐藏状态
h
t
h_t
ht。
d
d
d 是LSTM单元的数量。门控向量
i
t
i_t
it、
f
t
f_t
ft 和
o
t
o_t
ot 的取值在[0,1]中。LSTM变换方程如下所示:
i
t
=
σ
(
W
i
x
t
+
U
i
h
t
−
1
+
V
i
c
t
−
1
)
(
2
)
f
t
=
σ
(
W
f
x
t
+
U
f
h
t
−
1
+
V
f
c
t
−
1
)
(
3
)
o
t
=
σ
(
W
o
x
t
+
U
o
h
t
−
1
+
V
o
c
t
)
(
4
)
c
~
t
=
t
a
n
h
(
W
c
x
t
+
U
c
h
t
−
1
)
(
5
)
c
t
=
f
t
i
⊙
c
t
−
1
+
i
t
⊙
c
~
t
(
6
)
h
t
=
o
t
⊙
t
a
n
h
(
c
t
)
(
7
)
\mathrm{i}_t = \sigma( \mathrm{W}_i \mathrm{x}_t + \mathrm{U}_i \mathrm{h}_{t-1} + \mathrm{V}_i \mathrm{c}_{t-1} ) \quad\quad\quad\quad (2) \\ \mathrm{f}_t = \sigma( \mathrm{W}_f \mathrm{x}_t + \mathrm{U}_f \mathrm{h}_{t-1} + \mathrm{V}_f \mathrm{c}_{t-1} ) \quad\quad\quad (3)\\ \mathrm{o}_t = \sigma( \mathrm{W}_o \mathrm{x}_t + \mathrm{U}_o \mathrm{h}_{t-1} + \mathrm{V}_o \mathrm{c}_{t} ) \quad\quad\quad\quad (4)\\ \tilde{\mathrm{c}}_t = \mathrm{tanh} ( \mathrm{W}_c \mathrm{x}_t + \mathrm{U}_c \mathrm{h}_{t-1} ) \quad\quad\quad\quad\quad\quad (5)\\ \mathrm{c}_t = \mathrm{f}_t^i \odot \mathrm{c}_{t-1} + \mathrm{i}_t \odot \tilde{\mathrm{c}}_t \quad\quad\quad\quad\quad\quad\quad\quad (6)\\ \mathrm{h}_t = \mathrm{o}_t \odot \mathrm{tanh} ( \mathrm{c}_t ) \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad (7)
it=σ(Wixt+Uiht−1+Vict−1)(2)ft=σ(Wfxt+Ufht−1+Vfct−1)(3)ot=σ(Woxt+Uoht−1+Voct)(4)c~t=tanh(Wcxt+Ucht−1)(5)ct=fti⊙ct−1+it⊙c~t(6)ht=ot⊙tanh(ct)(7)
其中 x t x_t xt 是当前时间步的输入, σ \sigma σ 表示 logistic sigmoid 函数,而 ⊙ \odot ⊙ 表示元素乘法。直观地说,遗忘门控制记忆单元的每个单元被擦除的量,输入门控制每个单元被更新的量,输出门控制内部存储状态的暴露量。
2.2 Task-Specific Output Layer
在单个特定任务中,一个简单的策略是使用一个RNN将输入序列映射到一个固定大小的向量,然后将向量馈送到softmax层以进行分类或其他任务。
给定文本序列 x = { x 1 , x 2 , ⋯ , x T } x= \{x_1,x_2, \cdots ,x_T \} x={x1,x2,⋯,xT},我们首先使用 lookup 层来获得每个词 x i x_i xi 的向量表示(embeddings) x i \mathrm{x}_i xi。最后一刻的输出 h T h_T hT 可以被视为整个序列的表示,该序列有一个全连接的层,后面是一个预测类的概率分布的softmax非线性层。
图1显示了文本分类的展开RNN结构。
对网络参数进行训练,使预测分布和真实分布的交叉熵最小化。
L
(
y
^
,
y
)
=
−
∑
i
=
1
N
∑
j
=
1
C
y
i
j
log
(
y
^
i
j
)
,
(
8
)
L( \hat{\mathrm{y}} , \mathrm{y} ) = - \sum\limits_{i = 1}^N \sum\limits_{j = 1}^C \mathrm{y}_i^j \log( \hat{\mathrm{y}}_i^j), \quad\quad\quad(8)
L(y^,y)=−i=1∑Nj=1∑Cyijlog(y^ij),(8)
其中
y
i
j
\mathrm{y}_i^j
yij 是真实值;
y
^
i
j
\hat{\mathrm{y}}_i^j
y^ij 是预测概率;
N
N
N 是训练样本的数量,
C
C
C 是类别数目。
3 Three Sharing Models for RNN based Multi-Task Learning
大多数现有的神经网络方法都基于单个任务有监督训练的[Collobert等人,2011年;Socher等人,2013年;Kalchbrenner等人,2014年]。这些方法往往受到训练数据量有限的影响。为了解决这个问题,这些模型通常涉及一个无监督的预训练阶段。这种无监督的预培训可以有效地提高最终性能,但不能直接优化预期任务。
基于多任务学习的成功[Caruana,1997],我们提出了三种多任务模型,以利用来自许多相关任务的监督数据。深度神经模型非常适合于多任务学习,因为从任务中学习到的特征可能对其他任务有用。图2展示了我们提出的模型。
Model-I: Uniform-Layer Architecture
\quad\quad
在Model-I中,不同的任务除了各自的 embedding 层之外,还共享相同的LSTM层和 embedding 层。
对于任务
m
m
m,输入
x
^
t
\hat{\mathrm{x}}_t
x^t 由两部分组成:
x
^
t
(
m
)
=
x
^
t
(
m
)
⊕
x
^
t
(
s
)
(
9
)
\hat{\mathrm{x}}_t^{(m)} = \hat{\mathrm{x}}_t^{(m)} \oplus \hat{\mathrm{x}}_t^{(s)} \quad\quad(9)
x^t(m)=x^t(m)⊕x^t(s)(9)
其中,
x
^
t
(
m
)
,
x
^
t
(
s
)
\hat{\mathrm{x}}_t^{(m)}, \hat{\mathrm{x}}_t^{(s)}
x^t(m),x^t(s) 分别是特定任务 embedding 和共享 embedding。
LSTM层在所有任务中共享。任务
m
m
m 的最后序列表示是LSTM在时间步
T
T
T 的输出。
h
T
(
m
)
=
L
S
T
M
(
x
^
(
m
)
)
(
10
)
\mathrm{h}_T^{(m)} = LSTM( \hat{\mathrm{x}}^{(m)} ) \quad\quad(10)
hT(m)=LSTM(x^(m))(10)
Model-II: Coupled-Layer Architecture \quad\quad 在模型II中,我们为每个任务分配一个LSTM层,它可以使用其他任务的LSTM层的信息。
给定一对任务 ( m , n ) (m, n) (m,n),每个任务在特定于任务的模型中都有自己的LSTM。我们表示两个耦合LSTM层在步骤 t t t 的输出为 h t ( m ) \mathrm{h}_t^{(m)} ht(m) 和 h t ( n ) \mathrm{h}_t^{(n)} ht(n)。
为了更好地控制从一个任务到另一个任务的信号流,我们使用了一个全局门控单元,它赋予模型决定它应该接受多少信息的能力。我们重新定义了等式(5),第
m
m
m 个任务的LSTM的新记忆内容通过以下公式计算:
c
~
t
(
m
)
=
t
a
n
h
(
W
c
(
m
)
x
t
+
∑
i
∈
{
m
,
n
}
g
(
i
→
m
)
U
c
(
i
→
m
)
h
t
−
1
(
i
)
)
(
11
)
\tilde{\mathrm{c}}_t^{(m)} = \mathrm{tanh} \left( \mathrm{W}_c^{(m)} \mathrm{x}_t + \sum\limits_{i \in \{m , n \} } \mathrm{g}^{(i \rightarrow m)} \mathrm{U}_c^{(i \rightarrow m)} \mathrm{h}_{t-1}^{(i)} \right) \quad\quad\quad\quad\quad\quad (11)
c~t(m)=tanh⎝⎛Wc(m)xt+i∈{m,n}∑g(i→m)Uc(i→m)ht−1(i)⎠⎞(11)
其中
g
(
i
→
m
)
=
σ
(
W
g
(
m
)
x
t
+
U
g
(
i
)
h
t
−
1
(
i
)
)
\mathrm{g}^{(i \rightarrow m)} = \sigma ( \mathrm{W}_g^{(m)} \mathrm{x}_t + \mathrm{U}_g^{(i)} \mathrm{h}_{t-1}^{(i)} )
g(i→m)=σ(Wg(m)xt+Ug(i)ht−1(i))。其他设置与标准LSTM相同。
这个模型能在每两个任务中联合学习。我们分别能够得到任务 m m m 和 n n n 的特定任务表示 h T ( m ) \mathrm{h}_T^{(m)} hT(m) 和 h T ( n ) \mathrm{h}_T^{(n)} hT(n)。
Model-III: Shared-Layer Architecture \quad\quad 模型III还为每个任务指定了一个单独的LSTM层,但引入了一个双向LSTM层来捕获所有任务的共享信息。
在时间步 t t t,我们将前向和后向LSTM的输出表示分别为 h → t ( s ) \overrightarrow{\mathrm{h}}_t^{(s)} ht(s) 和 h ← t ( s ) \overleftarrow{\mathrm{h}}_t^{(s)} ht(s)。共享层的输出为 h t ( s ) = h → t ( s ) ⊕ h ← t ( s ) \mathrm{h}_t^{(s)} = \overrightarrow{\mathrm{h}}_t^{(s)} \oplus \overleftarrow{\mathrm{h}}_t^{(s)} ht(s)=ht(s)⊕ht(s)。
为了增强任务特定层和共享层之间的相互作用,我们使用门控机制赋予任务特定层的神经元接受或拒绝共享层神经元传递的信息的能力。与模型II不同,我们计算LSTM的新状态如下:
c
~
t
(
m
)
=
t
a
n
h
(
W
c
(
m
)
x
t
+
g
(
m
)
U
c
(
m
)
h
t
−
1
(
m
)
+
g
(
s
→
m
)
U
c
(
s
)
h
t
(
s
)
)
(
12
)
\tilde{\mathrm{c}}_t^{(m)} = \mathrm{tanh} \left( \mathrm{W}_c^{(m)} \mathrm{x}_t + \mathrm{g}^{(m)} \mathrm{U}_c^{(m)} \mathrm{h}_{t-1}^{(m)} + \mathrm{g}^{(s \rightarrow m)} \mathrm{U}_c^{(s)} \mathrm{h}_{t}^{(s)} \right) \quad\quad\quad\quad (12)
c~t(m)=tanh(Wc(m)xt+g(m)Uc(m)ht−1(m)+g(s→m)Uc(s)ht(s))(12)
其中
g
(
m
)
=
σ
(
W
g
(
m
)
x
t
+
U
g
(
m
)
h
t
−
1
(
m
)
)
\mathrm{g}^{( m)} = \sigma ( \mathrm{W}_g^{(m)} \mathrm{x}_t + \mathrm{U}_g^{(m)} \mathrm{h}_{t-1}^{(m)} )
g(m)=σ(Wg(m)xt+Ug(m)ht−1(m)) 和
g
(
s
→
m
)
=
σ
(
W
g
(
m
)
x
t
+
U
g
(
s
→
m
)
h
t
(
s
)
)
\mathrm{g}^{(s \rightarrow m)} = \sigma ( \mathrm{W}_g^{(m)} \mathrm{x}_t + \mathrm{U}_g^{(s \rightarrow m)} \mathrm{h}_{t}^{(s)} )
g(s→m)=σ(Wg(m)xt+Ug(s→m)ht(s))。
4 Training
由上述所有多任务体系结构发出的特定于任务的表示最终被输入到不同的输出层,这些输出层也是特定于任务的。
y
^
(
m
)
=
s
o
f
t
m
a
x
(
W
(
m
)
h
(
m
)
+
b
(
m
)
)
(
13
)
\hat{\mathrm{y}}^{(m)} = \mathrm{softmax} ( \mathrm{W}^{( m)} \mathrm{h}^{( m)} + \mathrm{b}^{( m)} ) \quad\quad\quad\quad (13)
y^(m)=softmax(W(m)h(m)+b(m))(13)
其中
y
^
(
m
)
\hat{\mathrm{y}}^{(m)}
y^(m) 是任务
m
m
m 的预测概率,
W
(
m
)
\mathrm{W}^{( m)}
W(m) 是需要学习的权重,
b
(
m
)
\mathrm{b}^{( m)}
b(m) 是偏差项。
我们的全局损失函数是所有任务成本函数的线性组合。
ϕ
=
∑
m
=
1
M
λ
m
L
(
y
^
(
m
)
,
y
(
m
)
)
(
14
)
\phi = \sum\limits_{m = 1}^M \lambda_m L ( \hat{\mathrm{y}}^{(m)}, \mathrm{y}^{( m)} ) \quad\quad\quad\quad (14)
ϕ=m=1∑MλmL(y^(m),y(m))(14)
其中
λ
m
\lambda_m
λm 分别是每个任务
m
m
m 的权重。
值得注意的是,用于训练每个任务的标记数据可能来自完全不同的数据集。在[Collobert and Weston,2008]之后,通过在任务上循环,以随机方式实现训练:
1.选择一个随机任务。
2.从该任务中随机选择一个训练样本。
3.通过对该样本采取梯度步骤来更新此任务的参数。
4.回到1。
Fine Tuning \quad\quad 对于model-I和model-III,所有任务都有一个共享层。因此,在联合学习阶段之后,我们可以使用微调策略进一步优化每个任务的性能。
Pre-training of the shared layer with neural language model \quad\quad 对于模型III,共享层可以通过无监督的预训练阶段初始化。这里,对于模型III中的共享LSTM层,我们使用语言模型[Bengio et al.,2007]对其进行初始化,该模型在所有四个任务数据集上进行训练。
7 Conclusion and Future Work
本文介绍了三种基于RNN的文本序列多任务学习模型。它们之间的区别在于在多个任务之间共享信息的机制。实验结果表明,我们的模型可以通过探索共同特征来提高一组相关任务的性能。
在未来的工作中,我们将研究不同任务的其他共享机制。