Press "Enter" to skip to content

搜索,然后学习:两阶段的无监督文本生成

论文标题:

 

Unsupervised Text Generation by Learning from Search

 

论文作者:

 

Jingjing Li, Zichao Li, Lili Mou, Xin Jiang, Michael R. Lyu, Irwin King

 

论文链接:

 

https://arxiv.org/abs/2007.08557

 

文本生成是自然语言处理的核心任务之一,很多应用如机器翻译、文本摘要都依赖于文本生成技术。一个高质量的文本生成模型往往需要大量的标注数据,这就从数据上限制了模型的发展。

 

本文提出TGLS——一种基于“先搜索后学习”的无监督文本生成方法,模型反复迭代,最终能生成较高质量的文本。

 

在复述生成和文本正规化两个任务上,TGLS能显着超越之前所有的无监督模型,甚至逼近有监督模型效果,体现出无监督学习的强大潜力!

 

无监督文本生成

 

机器翻译是最为常见的文本生成任务,但是要得到一个高质量的机器翻译系统,一定数量的平行语料是必不可少的。

 

尽管也有很多工作研究了不依赖平行语料的机器翻译模型,但目前为止,它们和有监督相比仍然不能望其项背。

 

但是一个事实是,无论是什幺任务,平行语料总归是极少数,无标注语料却随处可见,如何充分利用这些语料训练文本生成模型,从而生成高质量的文本,是未来一个非常具有发展潜力的研究方向。

 

在这里读者需要注意区别无监督的预训练和无监督的训练。

 

预训练 一般是指在大规模 通用语料 上训练,而 无监督训练 一般是在 特定领域 数据上训练;预训练后往往还需要微调,而无监督训练后可以直接用于测评。这里需要读者甄别。

 

基于此,本文提出TGLS,一种完全无监督的文本生成方法。

 

TGLS的整体思想是“先搜索后学习”,搜索就用模拟退火等方法进行,把搜索出来的文本当成“伪平行语料”让模型学习,然后反过来,模型生成的文本也可以指导搜索方向,如此反复进行,从而达到比较好的效果。

 

具体的做法我们将在下一节详述, 但总的来说,本文有如下贡献:

 

提出TGLS,一种通用的无监督文本生成方法;

 

TGLS可以和预训练模型结合,也即把整个训练过程当做微调;

 

在文本复述和文本正规化两个任务上,碾压其他无监督模型,甚至接近有监督模型的效果。

 

TGLS:unsupervised Text Generation by Learning from Search

 

TGLS的总体思路比较简单: 首先用一个固定的搜索器根据输入文本搜索目标文本(本文使用模拟退火搜索); 然后把搜索得到的文本作为“伪标注文本”,用来训练一个生成器; 之后再把生成器生成的文本输入到搜索器里面,再把这一次搜索得到的文本用来训练生成器。

 

这其实有两个阶段,每个阶段的目标有所区别,第一个阶段用交叉熵训练,第二个阶段用最大间隔训练,我们下面会进行介绍。

 

下图是这个流程的示意图, 就是搜索时的打分:

 

 

模拟退火搜索

 

对于文本搜索,就是在搜索的每一步,选择插入、删除或替换其中的一个词,我们记输入文本为 ,替换后的文本为 ,那幺这可以给出一个打分函数:

 

表示文本的流畅度, 表示替换前后文本的关联度, 是和具体的任务相关。

 

对于 ,我们当然想要最大化这个得分,这就可以用模拟退火去做。注意到,该搜索器是不需要学习的。该搜索算法参见原文附录中的算法二。

 

假设现在已经进行了 轮,即当前的文本是 ,然后在此基础上又进行一轮,就可以得到编辑后的句子 ,并且有它的一个得分 。

 

接下来可以根据概率 考虑接受 (即令 )或者拒绝它(即令 )。这样进行若干轮,就能得到最终搜索出来的句子 。

 

现在的问题是,得分函数里的三项是什幺。

 

文本流畅度 :用一个微调的GPT2计算文本的概率得分,微调是在特定领域的非平行语料上完成的;

 

语义相关度 :分为两种,词级别的和句子级别的。词级别的得分首先用预训练的RoBERTa得到每个词的特征,然后计算它们的余弦相似度,即:

 

上式度量了两个句子关键信息的相似度。 相似地,句子级别的得分就可以是:

 

从而 最终的语义相关度得分就是二者的加权乘积;

 

具体任务得分 :这个得分和具体的任务相比。对复述而言,我们想要生成的文本在形式上和原文本尽可能不同,所以这个得分就是 。

 

对于文本正规化来说,这个得分就可以用一个实现训练的分类器实现: 。

 

以上就是搜索的整个过程。 总结一下,就是在每一轮,基于现在的句子搜索出一个新句子,计算它的得分,把当前得分和前一个得分作差得到一个概率,按照这个概率接受它或者拒绝它; 重复上述过程即可。

 

一阶段训练

 

我们说搜索器是固定的不用学习,我们真正想要学习训练的是文本生成器。既然我们已经搜索出来一个文本 了,那幺就可以把 当做 的标注数据,去训练一个已经预训练的GPT2就好了,这就可以采用标准的词级别交叉熵损失。

 

如一开始的图所示,首先用模拟退火SA得到句子 ,然后让GPT2在 上面训练,实际上是在一定程度上去拟合上述打分函数,从这个角度讲,打分函数的设计相当重要。

 

二阶段训练

 

但是上述过程有一个问题: 搜索和生成是相互独立的,搜索出来的默认作为训练目标,那这样和只用搜索有什幺区别呢?

 

所以TGLS做的第二件事就是: 让GPT2生成的句子再送入搜索器,再在相应的搜索结果上训练一波。 这样就可以增强搜索结果的多样性。

 

具体来说,把 输入到GPT2中,用beam search得到 个 ,记为 ;之后从中随机选一个,输入到搜索器中,得到搜索结果 ,这样就有 个样本。

 

然后按照打分公式从中选择分最大的那个作为正样本,记为 ,其他的就是负样本 ;最后就能用最大间隔去训练GPT2:

 

那幺为什幺不用交叉熵呢? 因为这些样本都是由GPT2自己生成的,自己训练自己没有意义。

 

相反,用最大间隔去训练,可以让GPT2从整体上去更加细致地区别更好的那些文本,或者说“让好的更好”,而交叉熵是“让不好的变好”。

 

下图是TGLS的训练算法。 注意到,第二阶段训练是在第一阶段全部训练完之后才开始的,而不是交替进行。

 

 

实验

 

本文在文本复述数据集Quora和文本正规化数据集GYAFC上实验,其他实验设置详见原文。

 

下表是主要结果。 可以看到,TGLS在两个数据集上吊打了其他无监督方法,甚至在复述任务上还接近监督学习的效果。

 

在文本正规化任务上,无监督模型也更加接近监督学习的表现。

 

 

最后再来看看TGLS各个部分的影响,如下表所示。 SA表示模拟退火,CE是交叉熵损失,MM是最大间隔损失。

 

首先从推理速度来看,用GPT2生成显然比用搜索的方法快,因为搜索需要经过很多次迭代; 其次,注意到第二阶段训练用交叉熵和用最大间隔的区别非常大,这就验证了最大间隔的作用其实是和交叉熵完全不同的。

 

 

小结

 

本文提出TGLS,一种无监督文本生成模型。 TGLS的特点在于“搜索学习”和“两阶段训练”。

 

基本操作是首先搜索出目标文本,然后在这之上训练,只不过训练分为两个阶段,一个是“让不好的变好”,第二个是“让好的更好”,二者的损失函数不同,需要特别注意。

 

从实验结果来看,本文效果很好,可以在一定程度上说明文本生成方向的无监督学习还有很大的发展潜力。

 

当然, 本文的方法还有一些明显的可改进之处,比如: 更好的搜索方法,可学习的搜索方法,更简单的训练方法等。 这些都需要未来持续而深入的探索。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注