自然语言生成工具箱 - contrastive EGPG(一)

文章名称

【arxiv-2019】Contrastive Representation Learning for Exemplar-Guided Paraphrase Generation

核心要点

与前几篇释义生成的文章不同,文章旨在解决示例引导的释义生成(EGPG) 问题。给定两个句子X, Z,EGPG期望生成与原句子Z风格相同且与原句子X释义相同的释义句子Y。作者在seq2seq的基础上,利用对比学习的方法(constrastive learning)设计了两个对比损失,分别学习句子风格和句子意义的表示向量,并基于这两个表示生成符合要求的句子。

方法细节

问题引入

不同于释义生成模型包括三种类型,EGPG不仅要求内容相似,同时要求风格相近。原有的生成方法,引入语法信息作为风格信息,或者没有显示的把风格表示和内容表示分开(虽然可以提取风格表示),并且生成方法相对复杂。

具体做法

作者提出的模型框架如下图所示,模型分别优化3部分损失,1)生成损失(因为是有监督的训练,即有平行语料,可以计算损失),2)风格对比损失;3)内容对比损失。

framework

生成过程主要包括,1)表示提取(encoder部分),2)句子生成(decoder)部分,是典型的seq2seq模型。编码器包括E_c, E_s两部分,分别从原风格句子和原内容句子中提取风格表示C_{X_i}和内容表示s_{Z_i}。生成器部分是一个GRU,并把上述两个向量的拼接[C_{X_i}s_{Z_i}]作为GRU的初始隐状态,逐步生成每一个词。对应的损失函数为交叉熵损失,整个模型公式与损失函数如下图所示。

seq2seq model encoder

![seq2seq model decoder]
NLL loss

针对句子的内容表示,作者采用内容对比损失(CCL)的方式确保相似的内容在内容表示空间中相近,反之则比较远。那么如何构造正负样本来进行对比学习呢?由于每一个batch的EGPG样本可以表示为\{(X_i, Y_i,Z_i)\}_{i=1}^n的三元组。因此,我们可以认为每个(X_i, Y_i)元组是一对正样本,并且(X_i, X_j), i \neq j以及(X_i, Y_j), i \neq j表示针对X_i的负样本,针对Y_i的负样本可以用同样的方法获得。因此,我们有n对正样本和n * (2n-2)对负样本(2n-2表示每一个(X_i, Y_i)对应的负样本,其中X_i对应n-1个,Y_i同理)。基于这些样本通过如下损失函数可以进行内容对比学习。

CCL

类似的,我们可以构造风格对比损失(SSL),每一个batch,有n对正样本和n * (2n-2)对负样本(2n-2表示每一个(Z_i, Y_i)对应的负样本,其中Z_i对应n-1个,Y_i同理)。利用如下图所示的损失函数进行风格表示学习。

SSL

SSL append

最终,模型的整体损失表示如下。

total loss

心得体会

对比学习

作者提出了一种EGPG的对比学习框架,亮点在于如何构造对比样本,这种方法也可以用在普通的释义生成中,不过由于没有拆分表示的需求,所以直接用监督损失就可以完成。也可以直接利用监督损失,分别学习内容表示和风格表示。对比损失相比于监督学习的好处是负样本可以加速学习和收敛(榨干每一个样本的信息)。但是,个人感觉如果负样本和正样本分的并不是特别开,甚至一个X_i在样本中重复出现(实际数据中常常会有),那么负样本中会有正样本的可能,这个比例较高的时候,效果将不稳定,这也是所有负采样学习需要注意的方面。甚至利用课程学习,有简单到复杂的构造负样本。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容