【ICLR2021】CoCon:一种自监督的可控文本生成方法

共 1750字,需浏览 4分钟

 ·

2021-01-26 15:51

ICLR2021的论文《CoCon:A Self-Supervised Approachfor Controlled Text Generation》,提出一种用文本去指导文本生成的无监督方法,是follow了CTRL和PPLM的后续工作。作者设计了一个叫做CoCon的模块,插入transformer中,CoCon结构和正常的transformer encoder一样。

在生成文本时,假设是我们想要的内容,即control部分,c的长度为,句子长度为,被划分为两个部分,我们使用去预测部分。具体做法如下:

首先用一个transformer encoder分别编码,得到了各自的特征,然后将他们送入CoCon模块通过self-attention融合,将的Key和Value concat到的Key和Value前面,Query不变,依旧来自于

经过feed-forward layer后得到了我们要的包含c的信息的隐变量,普通的transformer就是得到了,然后就当作memory输入decoder去指导文本生成了,CoCon这一步就是把 concat起来再经过一个transformer encoder,得到了我们要的

decoder的生成过程作者写的让我稍微有些困惑,生成的时候并不是使用,而是把 concat起来去生成,不知道为什么不直接用去生成

当我们有多个想要的内容时,也就是有多个c,可以把它们一起concat起来,即

训练的过程作者使用了4个loss,首先把长度为的句子分为两个部分,

第一个是重构loss,让,然后让模型condition on 去生成

第二个是叫做Null Content Loss,,模型只condition on ,让模型学会生成流畅的句子

第三个Cycle loss我觉得是本文最大亮点,不过这个cycle思想应该在以前的很多工作中都有了,作者选出两个句子, ,先让模型根据去生成句子

然后让模型根据去生成句子,loss cycle的目的是要使其接近

这块理解起来还是有点绕的,首先的生成过程,那么我们是希望的内容能包含的信息,同时要和的衔接保持流畅,接着使用生成,那么我们希望既能包含的信息,又要和衔接流畅,而又因为包含的信息,因此应该既包含的信息,又能和衔接流畅,那它不就应该是生成了吗?!因此就是计算相差多大。作者在这里的intuition是:在现实中给出提示文本,可能的衔接文本是非常多的,因此我们希望通过给模型一个,去生成包含的信息且能和衔接流畅的

最后一个loss是adversarial loss,因为这在其他工作中经常被用,希望模型生成的文本尽可能与真实文本接近

的参数为

最后整个模型的训练是

用来控制每个loss的权重。

作者的实验基于GPT-2,数据选用了openai提供的用GPT-2生成的句子

sentiment和topic classifier用了一个在kaggle数据集上训练得到的分类器,发现CoCon生成的句子能更好地控制topic和sentiment

Table 3: Evaluation of topic-controlled generations. Topic accuracy report ratio of samples that were classified as their target topic.
Table 4: Evaluation of sentiment-controlled generations. Sentiment accuracy report ratio of samples that were classified as their target sentiment.

稍微有些遗憾的是作者还没有开源代码,不过ICLR2021才放榜不久,也许后续作者们会补上代码吧。

如果你有什么疑问或想法,欢迎留言交流~

点击阅读原文可查看原论文


浏览 98
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报