ACL 2019 | ReCoSa:多轮对话生成中利用自注意力检测相关上下文

  • Post author:
  • Post category:其他


在多轮对话生成中,大多数情况下答复仅仅与一部分上下文相关。一个完美的模型应该具有能力检测到这些相关的上下文,并根据它生成恰当的答复。常用的层次循环端到端模型(HRED)对上下文并不做区分,这会损害答复生成过程。本文提出了一种新颖的模型(ReCoSa),其能通过自注意力检测到相关上下文。基于自注意力机制(self-attention mechanism)在处理长程依赖的优势,本文提出一种新模型结构(ReCoSa),其核心在于使用自注意力机制来测量答复与每个上下文之间的相关性。

论文地址:


https://arxiv.org/abs/1907.05339



引言

为了实现答复生成过程中上下文信息区别对待,本文提出利用自注意力机制检测相关上下文的模型(ReCoSa)。首先,我们使用词级别的LSTM编码器来获取每个上下文的初始化表征,然后利用自注意力机制来更新上下文表征(context representation)与掩码答复表征(masked response representation)。最后,计算每个上下文与答复表征(response representation)之间的注意力权重,并将其用于解码过程中。本文在Chinese customer services(JDC) 和Ubuntu dialogue数据集上做了模型的验证,实验结果表明本文中提出的模型的性能优于基线模型。



数据集

本文实验基于Chinese customer services(JDC)和Ubuntu dialogue数据集。JDC包含155686个对话相关的上下文-答复对,其被随机切分为训练集(500000)、开发集(7843)以及测试集(7843)。Ubuntu dialogue的训练集包含了从2004年到2012年3月27号的对话信息,其开发集包含了从2012年3月27号到2012年8月7号的对话信息,测试集包含了从2012年8月7号到2012年12月1号的对话信息。我们采用官方的工具进行了切分词、去重等操作,同时句子长度小于5或者大于50的也被移除。最终,我们的训练集、开发集以及测试集的大小分别是3980000、10000、10000。



模型



上下文表征

本文的上下表征编码器包含2个部分,即词级别的编码器(word-level encoder)、上下文自注意力机制(context self-attention)。



Word-level Encoder

文本选用LSTM来完成词级别编码器的学习。对于给定的上下文集合



C

=

c

1

,

c

2

,

.

.

.

,

c

N

C={c_1,c_2,…,c_N}






C




=










c










1


















,





c










2


















,




.


.


.


,





c










N






















,集合中每个句子定义如下:



c

i

=

x

1

,

x

2

,

.

.

.

,

x

M

c_i={x_1,x_2,…,x_M}







c










i




















=










x










1


















,





x










2


















,




.


.


.


,





x










M






















,m表示句子的长度。将



c

i

c_i







c










i





















作为输入,LSTM首先会将输入序列编码为一个固定维度的向量



h

M

h_M







h










M





















。具体公式如下:




i

k

=

σ

(

W

i

[

h

k

1

,

w

k

]

)

i_k=\sigma(W_i[h_{k-1},w_k])







i










k




















=








σ


(



W










i


















[



h











k





1



















,





w










k


















]


)










f

k

=

σ

(

W

f

[

h

k

1

,

w

k

]

)

f_k=\sigma(W_f[h_{k-1},w_k])







f










k




















=








σ


(



W










f


















[



h











k





1



















,





w










k


















]


)










o

k

=

σ

(

W

o

[

h

k

1

,

w

k

]

)

o_k=\sigma(W_o[h_{k-1},w_k])







o










k




















=








σ


(



W










o


















[



h











k





1



















,





w










k


















]


)










l

k

=

t

a

n

h

(

W

l

[

h

k

1

,

w

k

]

)

l_k=tanh(W_l[h_{k-1},w_k])







l










k




















=








t


a


n


h


(



W










l


















[



h











k





1



















,





w










k


















]


)










c

k

=

f

k

c

k

1

+

i

k

l

k

c_k=f_kc_{k-1}+i_kl_k







c










k




















=









f










k



















c











k





1





















+









i










k



















l










k


























h

i

=

o

k

t

a

n

h

(

c

k

)

h_i=o_ktanh(c_k)







h










i




















=









o










k


















t


a


n


h


(



c










k


















)






其中,



i

k

,

f

k

,

o

k

i_k,f_k,o_k







i










k


















,





f










k


















,





o










k





















分别是输入门、遗忘门以及输出门,



w

k

w_k







w










k

























x

k

x_k







x










k





















的向量表示,



W

i

,

W

f

,

W

o

W_i,W_f,W_o







W










i


















,





W










f


















,





W










o





















是可学习的参数。我们可以获得所有句子的表征



h

c

1

,

.

.

.

,

h

c

n

{h^{c_1},…,h^{c_n}}








h












c










1


























,




.


.


.


,





h












c










n






























,同时我们也没句子表征加入了位置向量PE,即



{

h

c

1

+

P

E

1

,

.

.

.

,

h

c

n

+

P

E

n

}

\{h^{c_1}+PE_1,…,h^{c_n}+PE_n\}






{




h












c










1




























+








P



E










1


















,




.


.


.


,





h












c










n




























+








P



E










n


















}







####上下文自注意力

本文采用自注意力机制的关键在于其能获取长程依赖信息,为了使得模型更加鲁棒,模型训练更快,其也采用了多头机制。多头机制的数学表达如下:





M

i

=

A

t

t

e

n

t

i

o

n

(

Q

W

i

Q

,

K

W

i

K

,

V

W

i

V

)

M_i=Attention(QW_i^Q,KW_i^K,VW_i^V)







M










i




















=








A


t


t


e


n


t


i


o


n


(


Q



W










i








Q


















,




K



W










i








K


















,




V



W










i








V


















)










A

t

t

e

n

t

i

o

n

(

Q

,

K

,

V

)

=

s

o

f

t

m

a

x

(

Q

K

T

(

d

)

)

V

Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt(d)})V






A


t


t


e


n


t


i


o


n


(


Q


,




K


,




V


)




=








s


o


f


t


m


a


x


(




















(























d


)














Q



K










T



























)


V










M

=

C

o

n

c

a

t

(

M

1

,

M

2

,

.

.

.

,

M

H

)

M=Concat(M_1,M_2,…,M_H)






M




=








C


o


n


c


a


t


(



M










1


















,





M










2


















,




.


.


.


,





M










H


















)










O

=

M

W

O=M \cdot W






O




=








M













W






其中,Q、K、V分别是query向量、key向量、value向量,



W

i

Q

R

n

d

/

H

W_i^Q \in R^{n*d/H}







W










i








Q






























R











n





d


/


H













是线性函数的参数,



d

d






d





是隐层单元个数,我们采用拼接操作(Concat)对多头数据融合。为了获取上下文表征,多头机制通过不同的线性映射将



{

h

c

1

+

P

E

1

,

.

.

.

,

h

c

n

+

P

E

n

}

\{h^{c_1}+PE_1,…,h^{c_n}+PE_n\}






{




h












c










1




























+








P



E










1


















,




.


.


.


,





h












c










n




























+








P



E










n


















}





分别当做Q、K、V向量计算出上下文表征(context representation)



O

c

O_c







O










c





















。最后利用一个前馈神经网络(FFN)来输出上下文注意力表征(context attention representation)



O

c

f

O_c^f







O










c








f



























O

C

f

=

F

F

N

(

O

c

)

O_C^f=FFN(O_c)







O










C








f




















=








F


F


N


(



O










c


















)







其中,H是多头个数,



M

R

n

d

,

W

R

d

d

M \in R^{n*d},W \in R^{d*d}






M














R











n





d










,




W














R











d





d













分别是多头融合结果、线性映射的参数。



答复表征

事实上,在训练过程中我们采用了掩码操作(mask operator)。对于每个词



Y

T

Y_T







Y










T





















,我们掩盖



{

Y

T

+

1

,

.

.

.

,

Y

m

}

\{Y_{T+1},…,Y_m\}






{




Y











T


+


1



















,




.


.


.


,





Y










m


















}





,仅仅



{

Y

1

,

.

.

.

,

Y

T

1

}

\{Y_1,…,Y_{T-1}\}






{




Y










1


















,




.


.


.


,





Y











T





1



















}





能被看到。在推理过程中,上下文集合



C

=

{

c

1

,

.

.

.

,

c

N

}

C=\{c_1,…,c_N\}






C




=








{




c










1


















,




.


.


.


,





c










N


















}





、生成的答复集合



{

g

1

,

.

.

.

,

g

1

}

\{g_1,…,g_{-1}\}






{




g










1


















,




.


.


.


,





g














1



















}





,对于步推理,我们将



{

g

1

,

.

.

.

,

g

1

}

\{g_1,…,g_{-1}\}






{




g










1


















,




.


.


.


,





g














1



















}





做为输入来获取



t

t

h

t^{th}







t











t


h













词的概率分布。对于每个词



y

t

y_t







y










t





















,我们将



{

h

1

+

P

E

1

,

.

.

.

,

h

t

1

+

P

E

t

1

}

\{h_1+PE_1,…,h_{t-1+PE_{t-1}}\}






{




h










1




















+








P



E










1


















,




.


.


.


,





h











t





1


+


P



E











t





1




































}





作为K、Q、V向量输入多头自注意力机制,然后经过线性转换获得答复隐层表征(response hidden representation)



O

r

O_r







O










r























上下文答复注意力

在此过程中,上下文注意力表征(context attention representation)



O

c

f

O_c^f







O










c








f





















为K、V向量,答复表征(response hidden representation)



O

r

O_r







O










r





















为Q向量。根据公式(1)以及前馈神经网络,我们可以得到隐层状态



O

d

f

O_d^f







O










d








f





















。我们的模型根据隐层状态



O

d

f

O_d^f







O










d








f





















来预测词



y

t

y_t







y










t





















的概率分布,具体公式如下:





p

(

y

t

C

,

y

1

,

.

.

.

,

y

t

1

;

θ

)

=

s

o

f

t

m

a

x

(

W

o

O

d

f

)

p(y_t|C,y_1,…,y_{t-1};\theta)=softmax(W_o \cdot O_d^f)






p


(



y










t





















C


,





y










1


















,




.


.


.


,





y











t





1



















;




θ


)




=








s


o


f


t


m


a


x


(



W










o






























O










d








f


















)







其中,



W

o

W_o







W










o





















为softmax矩阵参数。



实验

本文实验是基于数据集JDC以及Ubuntu dialogue,实验中用了6个基线模型,分别是Seq2seq、HRED、VHRED、WSeq、HRAN、HVMN。对于JDC,我们选择jieba进行分词并设置词表大小为69644。对于Ubuntu dialogue,其词表大小设置为15000。为了保证对比的合理性,我们设置模型隐层节点数为512,batch size的大小为32,对话最大轮数为15,最大句子长度为50,多头个数为6,优化器选择Adam。所有的模型实验,都是在k80 GPU上进行训练的。实验结果表明,我们提出的模型性能明显优于众多基线模型。



结论

本文作者认为对话生成仅仅与部分上下文相关,利用自注意力机制在处理长程依赖的优势,提出了一种新的模型(ReCoSa)。作者在多种数据集上,对比了多个基线模型,验证了该模型的合理性。





扫码识别关注,获取更多论文解读



版权声明:本文为a609640147原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。