1. 引言
自然语言生成 (即文本生成) 是自然语言处理 (NLP) 的核心任务之一。本文将介绍神经网络文本生成领域当前最先进的解码方法 对比搜索 (Contrastive Search)。提出该方法的论文 “A Contrastive Framework for Neural Text Generation” 最初发表于 NeurIPS 2022 ([论文]、[官方实现])。此后, “Contrastive Search Is What You Need For Neural Text Generation” 的作者又进一步证明了对比搜索可以用 现有的语言模型在 16种语言上生成可媲美人类水平的文本 ([论文]、[官方实现])。
(资料图片仅供参考)
[备注]对于不熟悉文本生成的用户,请参阅 此博文 了解更多详情。
目前, transformers
的 PyTorch 和 TensorFlow 后端均支持对比搜索。你可以在 该 Colab notebook 中根据不同的后端选择相应的部分来探索该方法,文章顶部也有该 notebook 链接。我们还构建了这个不错的 演示应用,用它可以直观地比较对比搜索与其他流行的解码方法 (例如波束搜索、top-k 采样 [3] 以及核采样 [4])。
在进行后续实验前,我们要先安装最新的 transformers
库,如下:
4. 现有解码方法存在的问题
解码方法可以分为两类: (i) 确定性方法,(ii) 随机方法。下面我们分别对两者进行讨论!
确定性方法,如贪心搜索和波束搜索,通过在语言模型输出的所有候选补全词中选择概率最高的词来生成最终文本。然而,正如之前研究 [3][4] 指出的,确定性方法通常会导致 _模型退化_,即生成的文本不自然且包含不必要的重复。
下面,我们看一个用 GPT-2 模型和贪心搜索生成文本的例子。
模型输出:Output:
[备注]我们可以看到,贪心搜索生成的结果中有明显的重复。
为了解决确定性方法带来的问题,随机方法通过在解码过程中引入随机性来生成文本。常用的两种随机方法是 (i) top-k 采样 [3] 和 (ii) 核采样 (也称为 top-p 采样) [4]。
下面,我们给出用 GPT-2 模型和核采样 (p=0.95) 生成文本的示例。
模型输出:Output:
[备注]虽然核采样可以生成没有重复的文本,但生成文本的语义一致性并不是很好。例如,生成的短语 ‘AI is not journalism’ 与给定的上文即 ‘DeepMind Company’ 不一致。
我们注意到,这种语义不一致的问题可以通过降低温度 (temperature) 来部分解决。然而,降低温度会使核采样更接近贪心搜索,这其实就变成了贪心搜索和核采样之间的权衡。一般来讲,要找到一个既能避免贪心搜索又能避免核采样陷阱的快捷且与模型无关的温度相当有挑战。
本节我们来详细介绍一种新的解码方法, _ 对比搜索_。
给定前缀文本 ,我们按如下公式选择输出词元 :
上式中, 是语言模型输出概率分布 中 k 个概率最大的候选词元的集合。第一项,即 _模型置信度 (model confidence)_,是语言模型预测的每个候选词元 的概率。第二项, _退化惩罚 (degeneration penalty)_,用于度量 与上文 中每个词元的相异度,其中函数 用于计算每两个词元间的余弦相似度。更具体地说,退化惩罚被定义为 的向量表征 与其上文 中每个词元的向量表征间余弦相似度的最大值。这里,候选词元的向量表征 是在给定 和 的条件下将二者连接起来输入给语言模型,然后由语言模型计算出来的。直观上,如果 的退化惩罚较大意味着它与上文更相似 (在表示空间中),因此更有可能导致模型退化问题。超参数 用于在这两项中折衷。当 时,对比搜索退化为纯贪心搜索。
[备注]在生成输出时,对比搜索同时考虑 (i) 语言模型预测的概率,以保持生成文本和前缀文本之间的语义连贯性; (ii) 与上文的相似性以避免模型退化。
下面,我们使用与 第 4.1 节 和 第 4.2 节 中相同的前缀文本 (即 “DeepMind Company is” ),并使用对比搜索生成文本 (取 k=4、)。为了充分展示对比搜索的卓越能力,我们让语言模型生成一个 512词元的 长文档,如下:
参数设置如下:
--top_k
: 对比搜索中的超参 。
--penalty_alpha
: 对比搜索中的超参 。
模型输出:Output:
[备注]我们看到生成的文本质量非常高。整个文档语法流畅,语义连贯。同时,生成的文本也很好地保持了事实的正确性。例如,在第一段中,它正确阐述了 “AlphaGo” 作为 “第一个击败职业围棋选手的程序” 这一事实。
为了更好地理解对比搜索的工作原理,我们对贪心搜索 ( 第 4.1 节 ) 和对比搜索进行了直观比较。具体来说,我们分别将贪心搜索和对比搜索生成的词元相似度矩阵可视化。两个词元之间的相似性被定义为它们的向量表征 (即最后一个转换器层的隐藏状态) 之间的余弦相似性。贪心搜索 (上) 和对比搜索 (下) 的结果如下图所示。
[备注]从贪心搜索的结果中,我们看到非对角线的相似度很高,这清楚地表明贪心搜索产生了重复。相反,在对比搜索的结果中,高相似度分数主要出现在对角线上,这证明我们成功解决了退化问题。对比搜索的这一优良特性是通过在解码过程中引入退化惩罚 (参见 第 5.1 节 ) 来实现的。
在本节中,我们提供了更多的生成示例来比较不同的解码方法。
在这部分中,我们使用 GPT-2 生成文本,其前缀文本来自 OpenAI 发布 GPT-2 的博客文章。
In a shocking finding, scientist discovered a herd of unicorns living in a remote, previously unexplored valley, in the Andes Mountains. Even more surprising to the researchers was the fact that the unicorns spoke perfect English.
加载语言模型并准备前缀文本:
代码:
模型输出:Output:
6.1.2. 使用核采样生成文本
代码:
模型输出:
6.1.3. 使用对比搜索生成文本
代码:
模型输出:
本节中,我们使用 Meta 最近发布的 OPT 模型 [5],并从著名的 ResNet 论文 [6] 摘要中选取前两个句子来作为前缀文本。
Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used previously.
加载语言模型并准备前缀文本:
代码:
模型输出:
代码:
模型输出:
6.2.3. 使用对比搜索生成文本
代码:
模型输出:Output:
有关对比搜索的更多详细信息,请查看我们的论文和代码,如下:
A Contrastive Framework for Neural Text Generation: 论文、官方实现
Contrastive Search Is What You Need For Neural Text Generation: 论文、官方实现
参考文献
[1] Su et al., 2022 “A Contrastive Framework for Neural Text Generation”, NeurIPS 2022[2] Su and Collier, 2022 “Contrastive Search Is What You Need For Neural Text Generation”, Arxiv 2022[3] Fan et al., 2018 “Hierarchical Neural Story Generation”, ACL 2018[4] Holtzman et al., 2020 “The Curious Case of Neural Text Degeneration”, ICLR 2020[5] Zhang et al., 2022 “OPT: Open Pre-trained Transformer Language Models”, Arxiv 2022[6] He et al., 2016 “Deep Residual Learning for Image Recognition”, CVPR 2016
- 本文由 Yixuan Su 和 Tian Lan 撰写
我们要感谢 Joao Gante (@joaogante)、Patrick von Platen (@patrickvonplaten) 和 Sylvain Gugger (@sgugger),感谢他们在我们将本文中的对比搜索集成进 transformers
库的过程中给予的帮助和指导。
英文原文: https://hf.co/blog/introducing-csearch
原文作者: Tian Lan
译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。
审校/排版: zhongdongy (阿东)
标签: