[NLG] Pretraining for Conditional Generation with Pseudo Self Attention

摘要:

  这篇文章的主要idea就是如何用现在已经有的语言模型,稍微引导一下生成基于某些条件的话语。如给个情感,生成一个带情感的句子。作者在GPT2的结构上稍微修改了self-attention机制,命名为Pseudo-Self,在decoder的时候引入外部控制,并且这样做能够尽量小的影响GPT2之前的训练参数,达到的很好的效果。

 

模型:

作者主要对比了前面两种工作,关于这两种工作不做阐述。如图,右一是作者的工作。

[NLG] Pretraining for Conditional Generation with Pseudo Self Attention_第1张图片

 

他的主要思路是什么呢,主要是改变一下self-attention,本来attention是要将一个X,分别用三个维度为[D,D'],[D,D'],[D',D]的矩阵分别相乘得到key,value,query的,如截图所示:

[NLG] Pretraining for Conditional Generation with Pseudo Self Attention_第2张图片

可以看到前两个相乘是【T*D】 * 【D*D'】 * Transpose(【T*D】 * 【D*D'】) = 【T * D'】 * 【D' * T】 =  【T * T】

然后乘上后一个 【T* T】 * 【T*D】*【D*D'】 = 【T*D'】   (Transpose表示转置)

作者改进以后呢?变成了:

[NLG] Pretraining for Conditional Generation with Pseudo Self Attention_第3张图片

可以看到,其实际上是改变了中间两个步骤的乘积,最后结果的维度还是没有改变,为原来的【T*D'】

中间这个矩阵维度为Transpose【(Tx+Ty)* D'】其中Tx是X的长度,Ty是y的长度(也就是上面式子的T)

作者说这样就只是在做self-attention的时候把condition加进去了,完全没有影响GPT2正常的参数运行(论文有实验证明这中结构相对于其他结构对于GPT2参数的影响是最小的)。当然,这个加进去的X是我们的condition的embedding或者是hidden。与X相乘的那几个矩阵随机初始化。

主要工作:

主要就是改了改self-attention的结构,并且做了大量的实验。

1.上图上三种模型的效果对比 PPL和cls  基于情感生成影评

2.与bert,elmo等集成模型在生成摘要数据集上对比

3.故事生成

4.看图说话。

5.不同大小的GPT2对效果的影响。

6.human evalution

7.后面微调的时候,不同数据量对结果的影响。(当然是数据越多越好)

一句话总结:

提出了一种Pseudo-Self的结构,站在预训练语言模型的基础上生成有前提条件的对话。可以考虑将前提条件换为dialogue的对话历史,然后知道生成,这样对对话系统的NLG部分将大有裨益。

资源:

论文:https://openreview.net/pdf?id=H1eFXO0WpV

作者的workshop:http://nlp.seas.harvard.edu/slides/Pre-training%20for%20Generation.pdf

你可能感兴趣的:(NLG,GPT2,self-attention,dialogue,NLP,对话系统)