背景
CSC很重要;
任务存在特殊性,与MT等生成式不同,输入与输出大部分相同;
因此生成策略如下:
- copy输入
- 从混淆集选择(相比词表减少搜索空间)
主要方法
seq2seq架构;
encoder
采用一个双向LSTM进行编码
h
j
s
=
B
i
L
S
T
M
(
h
i
−
1
s
,
e
i
s
)
h_j^s=BiLSTM(h_{i-1}^s,e_i^s)
hjs=BiLSTM(hi−1s,eis)
decoder
LSTM得到一个特征表示
h
j
t
h_j^t
hjt
h
j
t
=
L
S
T
M
(
h
j
−
1
t
,
e
j
−
1
t
)
h_j^t=LSTM(h_{j-1}^t,e_{j-1}^t)
hjt=LSTM(hj−1t,ej−1t)
与encoder隐层做attention机制得到
h
j
t
′
{h_j^t}'
hjt′
u
i
=
v
T
t
a
n
h
(
W
1
h
j
t
+
W
2
h
i
s
)
α
i
=
s
o
f
t
m
a
x
(
u
i
)
h
j
t
′
=
∑
i
=
0
n
a
i
h
i
s
\begin{aligned} &u_i=v^Ttanh(W_1h_j^t+W_2h_i^s)\\ &\alpha_i=softmax(u_i)\\ &{h_j^t}'=\sum_{i=0}^n{a_ih_i^s} \end{aligned}
ui=vTtanh(W1hjt+W2his)αi=softmax(ui)hjt′=i=0∑naihis
将
h
j
t
h_j^t
hjt与
h
j
t
′
{h_j^t}'
hjt′拼接整合得到
C
j
C_j
Cj用于计算:
C
j
=
t
a
n
h
(
W
(
h
j
t
;
h
j
t
′
)
)
C_j=tanh(W(h_j^t;{h_j^t}'))
Cj=tanh(W(hjt;hjt′))
- 该token是否有语法错误
- 若有错,从混淆集中选择改正后的token
首先判断该token是否有错:
- 计算
L
j
L_j
Lj,其中
L
o
c
j
Loc_j
Locj作为onehot编码该token的位置信息
L j = s o f t m a x ( W i [ W g C j ; L o c j ] ) L_j=softmax(W_i[W_gC_j;Loc_j]) Lj=softmax(Wi[WgCj;Locj]) - 训练阶段损失函数为:
L o s s l = ∑ i m − log L j [ L j l o c ] Loss_l=\sum_i^m-\log L_j[L_j^{loc}] Lossl=i∑m−logLj[Ljloc]
其中
L j l o c = { m a x ( z ) i f ∃ z , s . t . c j t = X [ z ] n + 1 o t h e r w i s e L_j^{loc}=\begin{cases} max(z)&if \exist z, s.t. c_j^t=X[z]\\ n+1&otherwise\\ \end{cases} Ljloc={max(z)n+1if∃z,s.t.cjt=X[z]otherwise
对于有错的token,通过如下方式得到该词在词表上的一个可能的分布
P
v
o
c
a
b
=
s
o
f
t
m
a
x
(
W
v
o
c
a
b
C
j
)
P_{vocab}=softmax(W_{vocab}C_j)
Pvocab=softmax(WvocabCj)
推理阶段
根据
L
j
L_j
Lj的值确定是从输入copy还是生成;
生成过程局限搜索空间在混淆集;
实验结果
比baseline高20个点,相较同时期其他模型也有所提升
结论
提出一种端到端神经网络模型解决CSC任务,借助混淆集减少搜索空间;
讨论
- 提供一个思路,对CSC问题相较于其他生成问题可以简化处理
- 混淆集:性能会受限于混淆集
- 损失函数:一个疑问,词表搜索的损失在哪里体现,没看懂:(