论文地址:https://arxiv.org/pdf/2206.02369
创新点:由于GPT 2和BART等模型往往会陷入基于最大化的解码算法(例如,贪婪搜索)。提出了一种简单有效的训练方法DITTO(伪重复惩罚),其中模型学习从伪重复数据中惩罚重复级别重复的概率。
研究结果:因为在人类语料库中几乎没有连续的重复级别(例如,0.02%在Wikitext-103)。为了研究产生连续重复级别重复的根本原因,所以研究了重复token的概率与上下文中先前重复的概率之间的关系。通过定量实验,发现:
- 语言模型具有重复前一句的偏好;
- 重复水平的重复具有自强化效应:一个句子在上下文中重复的次数越多,继续生成该句子的概率越高;
- 初始概率越高的句子通常具有更强的自强化效应。
实验结果:受研究结果的启发,虽然该方法的动机是减少重复,实验表明,DITTO不仅减轻了重复问题,而不牺牲困惑,但也实现了更好的生成质量。开放式文本生成(Wikitext-103)和文本摘要(CNN/DailyMail)的大量实验证明了该方法的通用性和有效性。
1、介绍
具有标准的基于最大化的解码的模型会陷入冗余的连续重复中,如图1所示,该模型对连续的两级重复的偏好比单词或短语级更强,而人类语言的连续两级重复较少,这表明人类语言和生成的文本之间存在差异。现有的减少重复的方法可以分为基于解码和基于训练的方法。基于解码的方法通过软或硬n-gram块来纠正这些问题。
图1:Wikitext-103开发集上人类句子与模型生成的统计数据。在大规模人类语料库Wikitext-103(超过1亿字)上训练了一个Transformer模型(750 M参数,类似于GPT-2 Large)。
左:贪婪解码陷入连续的重复级别。右行:单词、短语(单词数量)和重复水平的连续重复百分比(参见附录A中的连续重复公式)。
模型结果是从Wikitext-103 dev集合中给定不同前缀生成的文本的平均值。具体地说,给定50个tokens作为前缀,模型grecker生成接下来的200个tokens。与人类语言相比,该模型具有更多的连续重复级别
困惑/信息控制以及随机抽样。基于训练的方法最小化了在先前的上下文中已经生成的tokens的概率。尽管它们是有效的,但该模型偏好重复的原因以及在解码过程中重复是如何发生的仍然不清楚。Fu等人首先从理论的角度分析了重复问题,假设语言模型可以用短视的一阶马尔可夫模型来近似。然而,Holtzman等人观察到了重复的正反馈循环的情况,这表明语言模型确实考虑了长距离上下文,并且不能简单地被视为一阶马尔可夫模型。实验结果还表明,在语境中,重复tokens的出现概率与先前的重复tokens有一定的关系。但是,他们没有分析为什么模型更喜欢连续重复。
通过定量实验分析了这一重复的深层问题。为了定量地研究连续重复句,比较了重复句中相同tokens的出现概率。例如,给出一个序列,“I love oranges . I love oranges .。“比较概率Pθ(‘oranges’|‘I love oranges . I love’) 与 Pθ(‘oranges’|‘I love’).。它们之间的区别在于,对于第二个"oranges",已经有一个token"oranges"共享相同的句子级上下文‘I love’。手动重复句子n次作为上下文,以便下一个‘oranges’ 在上下文中有n次重复。通过这种方式,可以研究token的概率与上下文中重复次数之间的关系。例如,可以通过重复‘I love oranges .’这句话来构建上下文。n次加上‘I love’,然后获得模型在当前步骤输出‘oranges’的概率。通过对不同语料库的定量研究,发现:
- 该模型倾向于提高重复前一句的概率。具体地说,即使只有一个句子级上下文重复,在大多数情况下,在当前步骤重复的概率也增加。该现象的原因可能是,当存在先前的token(即,“oranges”)共享相同的句子级上下文(即,“I love”),即模型学习到了直接复制token的捷径;
- 自我强化效应:重复的概率随着历史重复次数的增加而几乎单调增加。最后,重复的概率稳定在某个上限值附近。如图2所示,随着重复次数的增加,“rounds”和“general”这两个词的概率都几乎单调地增加,最终趋于稳定;
- 初始概率越高的句子通常具有越强的自我强化效应。例如,在图2中,可以发现,具有较高初始概率的句子(即,在x轴的“0”处的红色条)增长得更快,并且可以在几次重复后达到极高的值。此外,具有更高初始似然性的句子(例如,由模型本身利用基于最大化的解码算法生成的句子)可以具有更强的自增强效果。
图 2 通过手动重复给定的句子若干次,并将其输入模型,观察相同词元的概率 p(xt∣x<t)(红色)和最大概率 MAXp(⋅∣x<t)(蓝色)随句子重复次数增加的变化。
左图展示了重复一个正常句子(如 "She is named a proxy general under Gaara ."),并展示词元 “general” 的概率变化。
右图则是重复一个随机句子(如 “fría backed rounds Manganiello Benzedrine Magruder Crego Stansel Zemin compressus .”),其中词元是从词汇表中随机抽取的,展示了词元 “rounds” 的概率变化。
图中的红线表示重复概率,具有自我强化效应:随着历史重复次数(x 轴)的增加,重复的概率(y 轴)几乎单调增加。
根据研究,模型倾向于重复生成内容的原因如下:在使用基于最大化的解码算法时,之前生成的句子具有较高的概率,模型进一步增加了重复该句子的可能性。一旦模型生成了一句重复的句子,由于更多的重复句子共享相同的句子级上下文,这些上下文进一步支持复制的选择,从而增强了重复句子的概率。最终,模型由于这种自我强化效应陷入句子级的循环。
为减少模型重复生成句子的倾向并克服自我强化效应,旨在让模型意识到生成冗余句子的概率应被降低。此外,重复句子越多,冗余句子的概率就应越低。本文提出了一种简单有效的训练方法,称为DITTO(伪重复惩罚,PseuDo-RepetITion PenalizaTiOn)。首先,通过从训练语料库中采样句子并手动构造伪重复数据。然后,设计了一种在这些伪数据上进行重复惩罚的损失函数,使得模型学习随着句子重复次数的增加,重复概率呈指数衰减。
实验结果表明,DITTO 不仅显著减少了重复现象,而且在困惑度(perplexity)上没有牺牲语言模型的能力,同时生成质量也得到了提升。在 Wikitext-103 开放式生成任务中,DITTO 方法在困惑度和 MAUVE 分数上均优于强大的竞争对手。通过使用随机解码策略(如 top-k 和 nucleus sampling),该方法生成的文本在 MAUVE 分数和人类评估中与人类编写的文本最为接近。在常用的 CNN/DailyMail 摘要任务中,该方法也在强大对手中取得了最佳表现。
2、分析重复
在这部分,量化研究重复句子的概率与上下文中之前重复次数之间的关系。首先,定义了几个指标来衡量随着重复次数增加,概率是如何变化的。然后,从实验结果中总结发现,并讨论在解码过程中句子级别的重复是如何发生的。简单来说,就是研究句子重复出现的概率与它之前出现次数的关系,并通过实验数据来分析和讨论这一现象。
2.1、实验设计
构建一个包含重复句子的样本序列,并定义了句子中每个标记的上下文,以及如何判断发生了句级上下文重复。这是为了量化分析句子重复对上下文概率的影响。具体来说
-
从语料库D中选取一个句子s,并将其重复N次,构建一个样本序列x,序列x由(s0, s1, s2, ..., sN)组成。
-
序列中的每个sn代表句子s的第n次重复,而sn由一系列标记(token)组成,即sn = (xn,1, xn,2, ..., xn,Ls),其中xn,l是句子s第n次重复中的第l个标记,Ls是句子s中标记的总数。
-
标记xn,l的句级上下文被定义为xn,<l = (xn,1, xn,2, ..., xn,l-1),即标记xn,l之前的所有标记。
-
定义当一个标记的上下文在句级上重复出现时,就发生了一个句级上下文重复。
图三:通过重复一个句子N = 100次来构建一个样本,手动将其输入模型,并计算TPn(平均token概率),IPn(概率增加率)和WRn(赢家率),n = 1,· · ·,N。分别对来自不同语料库Drandom、Dbook和Dwiki的句子进行平均。
评估预训练语言模型在句子级别生成重复内容时的表现,具体内容如下:
-
上下文重复:当一个句子中的词元(token)在上下文中与之前句子完全一致时,就称为句子级别的上下文重复。例如,对于序列“I love oranges . I love oranges .”,第二个“oranges”就具有句子级别的上下文重复。
-
概率分布的变化:通过给预训练模型 输入一个句子序列 ,可以得到该模型在给定上下文下预测下一个词元的概率分布 。为了研究这些概率是否随着句子重复次数增加而增加,定义了以下几个指标:
- 平均词元概率 (TP):表示第 个重复句子中所有词元的平均生成概率。TP 是初始句子的词元概率。
- 概率增长率 (IP):表示相比初始句子 ,第 个重复句子中词元概率增加的比例。
- 赢家率 (WR):如果词元 的生成概率超过了初始句子对应词元的概率,并且该词元的生成概率是最大值,则称其为“赢家”。赢家率反映了基于最大化解码算法(如贪婪解码)下生成重复内容的可能性。
-
数据集与实验:使用一个16层的Transformer解码器模型,基于Wikitext-103进行训练。为了进一步研究不同数据集的效果,构建了三个数据集,每个数据集大小为1000:
- Drandom:从模型词汇表中随机采样生成的句子。
- Dbook:从BookCorpus中随机采样的句子。
- Dwiki:从Wikitext-103验证集随机采样的句子。
通过这些指标,研究模型在不同数据集上的表现,并计算每个句子重复的平均值、 和 ,以进一步分析重复句子的生成机制。
2.2、结果和分析
模型在生成过程中为什么会出现句子重复、模型为什么会陷入重复循环、以及哪些类型的句子更容易被重复生成。总结如下:
1. 为什么会出现句子重复?
分析显示,即使只有一个句子级别的上下文重复,重复发生的概率就会大幅增加。例如,模型在生成句子“I love oranges . I love”时,会给“oranges”的生成分配更高的概率,因为它已经在之前的上下文中看到了“I love oranges”的模式。这表明模型对之前上下文的重复非常自信,倾向于直接复制下一个 token。这与人类语言不同,因为人类通常会避免完全重复句子,重复句子在大多数情况下没有新的信息。
2. 为什么模型会陷入重复循环?
随着句子重复次数的增加,指标 TP(平均 Token 概率)、IP(概率增长率)和 WR(胜者率)都会单调增长。这表明句子级别的重复具有自我增强效应:句子在上下文中重复的次数越多,模型继续生成该句子的概率就越高。最终,TP、IP 和 WR 会收敛到某个上限值。
3. 哪些句子更容易被重复生成?
具有较高初始概率(TP0)的句子,例如从 Wikitext-103(Dwiki)和 BookCorpus(Dbook)中抽取的句子,表现出更强的自我增强效应:TP 和 WR 增长更快,并且在少数几次重复后达到较高的上限值。这表明高初始概率的句子更容易被贪心解码等最大化算法反复生成。
4. 分析总结
在最大化解码算法下,句子级别的重复发生是因为:
- 之前生成的句子具有较高的概率,因此更容易被重复;
- 模型在生成当前句子时,更倾向于生成重复句子,因为它对历史生成的上下文过于自信,并试图在上下文中找到线索;
- 一旦模型多次重复某个句子,便会由于自我增强效应陷入句子循环。
随机采样方法(如 top-k 和 nucleus sampling)的有效性可能来源于:
- 与最大化解码算法相比,之前生成句子的概率较低,减少了重复的风险;
- 当前 token 是随机生成的,而不是基于最大概率选择的,从而避免了自我增强效应。
3、伪重复惩罚(PseuDo-RepetITion PenalizaTiOn)训练
根据上一节的分析,模型句子级别重复的核心问题在于对之前句子的重复倾向和自我增强效应。为了解决这一问题,提出了 DITTO (PseuDo-RepetITion PenalizaTiOn)方法,该方法首先手动输入重复句子,然后显式地教会模型避免这种重复。
伪重复数据构建
为了构建一个伪重复样本 ,首先从训练语料库中随机选取一个句子 。然后,通过将句子 重复 次构造伪数据:
这些句子会一直重复,直到达到模型的最大输入序列长度(例如,Transformer 在开放式生成中的最大长度为 1,536 个 token)。
句子级别重复惩罚
为了定义每一步的惩罚损失,针对重复句子 的第 次重复中的第 个 token ∈ ,定义训练目标如下:
其中:
-
表示该值在梯度传播中被排除,这可以通过 PyTorch 的
tensor.detach
实现。 -
是惩罚因子。当 时,损失函数在第 次重复中 token 的概率与第 次重复中相同,从而避免自我增强效应;当 时,第 次重复中的 token 的概率应小于第 次重复中的概率,使模型避免句子级别的重复。换句话说,重复句子中 token 的概率应随着重复次数的增加而指数衰减,衰减因子为,这是一个超参数。
公式解释
-
惩罚损失定义:
-
该公式的目的是通过惩罚机制减少模型对重复句子的偏好,从而避免自我增强效应。
-
的形式表明,希望控制 的值,使其在训练过程中能够适应的变化。
-
-
惩罚因子 :
-
控制着模型在处理重复句子时的保守程度。
-
时,模型倾向于保持重复概率不变;当 时,模型会降低重复概率,从而学习到减少重复的策略。
-
实验设置
在实验中,通过微调一个标准的最大似然估计(MLE)基线来应用句子级别重复惩罚。微调过程是将句子级别重复惩罚的更新与正常的 MLE 损失更新等比例混合。发现,将重复句子的前文作为伪重复数据 的前缀,可以实现更好且更稳定的性能。尝试了其他替代损失函数,但效果均不如此方法。
4、实验
4.1 设置
数据集与模型训练
在基准数据集 Wikitext-103 上训练模型,以评估开放式生成的性能。该数据集包含超过 1 亿个单词,实验在单词级别进行。模型架构和训练超参数严格遵循 Welleck 等人的实现。具体而言,使用一个 16 层的 Transformer,具有 8 个注意力头,隐藏层大小为 1024,完全连接的维度为 4096,总参数量为 7.5 亿,与 GPT-2 Large 类似。首先使用标准最大似然估计(MLE)训练基线模型,最大更新次数为 150,000,批大小为 3 个样本。每个训练样本的最大长度为 1,536 个 tokens。然后,对在验证集上具有最佳困惑度的模型进行 10,000 步的 DITTO 微调。除非另有说明,惩罚因子 设置为 0.5。基线模型按照其官方实现进行训练。所有模型在 8 个 NVIDIA Tesla V100 GPU 上进行训练,实验基于 fairseq 代码库实现。
评估
根据常见实践,在 Wikitext-103 的测试集上评估开放式序列补全的质量,其中前缀为 50 个 tokens,模型自回归生成接下来的 100 个 tokens。为了进行公平比较,各种基线模型均选取在验证集上具有最佳困惑度的模型。评估指标如下:
-
MAUVE: MAUVE 是一种衡量模型生成文本与人类语言接近程度的指标,通过近似计算模型生成序列与人类语言的分布之间的 KL 散度来实现。MAUVE 的范围是从 0 到 1,分数越高表示生成的序列质量越好。
-
困惑度和准确性: 给定前缀和真实的下一个 token,使用困惑度和下一个 token 预测准确性来衡量语言建模能力。
-
重复性: 按照以前的工作,计算生成序列中重复 4-gram 的比例(Repetition-4),以测量短语级别的重复性,定义为 ,并对所有生成结果进行平均。同样,使用重复句子的比例(Repetition-Sen)来测量句子级别的重复性,定义为 。由于人类语言中存在自然重复,因此最佳模型生成的文本在重复性指标上应接近真实文本。
4.2 开放式生成的结果
方法比较
与基于训练的方法进行比较,因为解码方法可以轻松应用于该方法。根据前人的工作,首先比较了基于贪婪解码的不同训练算法。结果见下表。DITTO 方法可以显著减少短语级别和句子级别的重复,并且在 MAUVE 得分上达到了 0.77 的最佳表现。虽然 UL-token+seq 可以生成更少的重复,但其在 MAUVE 方面的改进有限,因为其生成的文本通常与前缀不相关(参见附录 F 的示例)。与标准基线 MLE 相比,DITTO 在降低困惑度的同时提高了准确性。这些结果表明,DITTO 不仅可以减轻重复现象,还可以帮助模型提升语言建模和生成质量。
与随机解码策略的兼容性
抽样解码算法,如 top-k 和 top-p(核采样),在各种应用和大型模型中得到广泛使用。也确认,DITTO 方法与这些流行的随机解码策略兼容。结果见下表。可以看到,与 MLE 基线相比,使用 DITTO 训练的模型在重复性方面有所减少,并在重复性指标上取得了与人类最接近的结果。在生成序列的质量方面,DITTO 在 top-k 或核采样中达到了最高的 MAUVE 得分 0.96。
人类评估结果
进行了一项成对的众包评估,以判断 DITTO 生成的文本质量与其他基线模型的比较。对于每对方法,模型根据 Wikitext-103 测试集的 100 个随机前缀生成文本。评估者被要求独立判断哪种生成文本在语法、相关性、连贯性和信息量方面更好。如下表显示,DITTO 在不同解码策略下始终显著优于其他竞争对手。
自我增强效应
如第二节所述,句子级别的重复存在自我增强效应,这是句子级别重复的核心问题。进一步研究了在使用不同方法训练模型时的情况。实验设置遵循第二节的内容。
-
在使用 UL 和 SG 训练时,TP、IP 和 WR 几乎单调增加,表明这些基于训练的方法并没有解决自我增强效应的问题。
-
当模型使用 DITTO 训练时,随着重复次数的增加,这些指标迅速下降,显示出 DITTO 在克服自我增强效应方面的有效性。
这表明 DITTO 方法能够有效减轻模型在生成文本时的句子重复现象,提升文本的多样性和质量。
4.3、定向生成结果
表 4:CNN/DailyMail 的抽象摘要结果
设置
在定向抽象摘要任务 CNN/DailyMail 上进一步进行实验:给定输入文档,模型生成多个句子作为摘要。采用了最先进的模型 BART-large 作为基线,该模型是基于 160GB 数据训练的大规模编码器-解码器 Transformer 架构。对于 DITTO 训练,给定文档及其摘要,通过从摘要中随机抽取一个句子并重复该句子,直到达到解码模型的最大摘要长度,同时保持文档不变,构建伪数据。遵循官方实现在 CNN/DailyMail 上训练 BART-large 模型,然后使用 DITTO 训练微调具有最佳验证困惑度的模型。此处 λ 设置为 0.9。在推理时,使用三元组阻塞 和束搜索(束大小 = 5)。
结果
使用基于 F1 的 ROUGE 分数(ROUGE-1、ROUGE-2、ROUGE-L)来评估模型的性能。如下图所示,该训练方法在 ROUGE 分数上持续且显著优于 UL 和 SG,并超越其他竞争基线。结果还表明,DITTO 与 n-gram 阻塞兼容,这是一种减轻重复的基于解码的方法,显示了该方法的普适性。
4.4 分析
不同解码长度的自动补全
从实践角度出发,分析了在不同解码长度下的 DITTO。如下图所示,使用 DITTO 训练的模型在不同解码长度的约束下,持续且显著地优于使用 MLE 训练的模型,显示了该方法的有效性和稳健性。
超参数研究
为了更好地使用和理解 DITTO,研究了两个超参数:
- 伪数据与实际数据的混合比例,记作 γ;
- 惩罚因子 λ。如图 5(c) 所示,在两个数据集上,模型在 γ = 0.5 时取得最佳性能。因此,建议在实践中将 DITTO 更新和 MLE 训练损失更新等比例混合。至于 λ,可以观察到最佳值在不同任务中有所不同。在开放式生成任务 Wikitext-103 中,较强的惩罚(λ = 0.5)更为合适。然而,在摘要任务中,较温和的惩罚(λ = 0.9)效果更佳。所以推测,重复问题在生成任务(如开放式生成)中更加严重,这类任务具有更大的自由度。
5、相关工作
神经文本生成中的重复问题
在神经文本生成中,重复是一个关键问题,涉及到多种任务,包括开放式生成(如文本续写)和直接生成(如摘要)。以往的研究表明,使用基于最大化的解码策略(如贪婪搜索)时,语言模型倾向于生成乏味且连续的重复,这种重复可以分为词级、短语级和句子级。连续的词级和短语级重复属于词汇重复,而句子级重复则是语义重复,表明表达缺乏信息性,与人类语言存在差距。尽管基于大规模预训练的 Transformer 架构(如 GPT-2 和 BART)在语言建模方面有了显著提升,但在实际生成中,仍然存在大量意外的连续句子级重复,这个问题在神经文本生成中依然严重。
He 等人发现,当给定真实上下文作为前缀或模型自身生成的重复句子作为前缀时,语言模型能够生成高质量文本,显示出模型的自我恢复能力。然而,他们采用的是祖先采样,而非基于最大化的解码方法。当模型通过祖先采样生成的句子结构与前面的句子不同时,模型会停止重复句子。与他们的发现不同,分析表明,如果句子级上下文相同,则生成重复标记的概率会增加。
缓解重复的策略
缓解神经文本生成中的重复问题的方法可以分为训练基础方法和解码基础方法。代表性的训练基础方法包括不可能性训练(UL)和直接梯度(SG)。UL 通过降低负候选标记的概率来减轻重复,而 SG 则提高不属于负标记的标记的概率。然而,在第 4.2 节中的实验表明,这些方法无法解决自我强化问题。相比之下,该工作分析了模型为什么倾向于重复自身并快速陷入句子级循环,并提出了解决自我强化问题的方法。针对总结任务,常常使用 n-gram 阻塞方法来阻止后续生成中的重复 n-gram;而在开放式任务中,top-k 采样和核采样则通过截断不可靠的尾部并根据标记分布进行采样,以生成流畅和信息丰富的文本。
重复问题的分析
尽管先前的研究已经注意到重复问题,并提出了许多解决方案,但对重复的成因探讨较少。Fu 等人通过假设语言模型可以近似为一阶马尔可夫模型来进行理论分析。然而,Holtzman 等人提出的正反馈循环的案例表明,重复概率与较长上下文之间存在复杂关系,语言模型可能无法简化为一阶马尔可夫模型。与此不同,本次研究对该问题进行了更深入的探讨,进行了定量实验,以分析重复的潜在问题。
6、结论与未来工作
定量研究了为什么使用基于最大化的解码的语言模型倾向于连续的句子级重复。观察和分析表明,重复问题源于对之前句子的重复倾向和自我强化效应。基于分析,提出了一种简单有效的方法 DITTO,通过构建伪数据,指导模型学习随着句子重复次数的增加逐渐降低重复概率。Wikitext-103 开放式生成任务和 CNN/DailyMail 摘要任务的实验结果展示了该方法的优越性。
本工作调查了上下文中标记概率与重复次数之间的关系。然而,从模型嵌入、神经网络架构或语言内在特性等角度来看,模型提高重复标记概率的原因可能更为深层次。当前的分析尚未涉及这些方面,这将是未来工作的重点。希望定量分析和缓解句子级重复的方案能帮助 NLP 社区更好地理解和解决重复问题,提升神经语言模型的基本语言建模能力。