自然语言常用的自回归解码方法

描述

本文为大家分享自然语言生成中的解码方法,主要包括两部分:自回归生成中常用的解码方法,以及适用于大模型推理加速的speculative decoding方法。

1. 自回归生成中常用的解码方法

在生成文本序列时,由于全局搜索整个序列所需的计算成本极高,我们通常使用自回归生成(autoregressive generation),即逐个生成token,如下图所示。目前最常用的解码方法(即选择token的方法)包括:贪心搜索、波束搜索、top-k采样和top-p采样。此外,本文也会介绍通过改变概率分布来控制生成效果的temperature和repetition penalty。

大模型

贪心搜索(Greedy Search)

在每个时间步,我们会基于已生成的文本来计算词表中各词语的概率分布,最直接的方法就是选择概率最大的词。

大模型

贪心搜索的生成速度很快,短序列看起来效果也还可以,但很快就会出现语言不流畅、重复、缺乏多样性等问题。其主要问题是可能会忽略那些低概率词后可能出现的高概率词。比如在下图示例中,整体概率更高的序列“The dog has”就被漏掉了。

大模型

波束搜索 (Beam search)

为了解决上述问题,人们引入了波束搜索的方式。也就是在每一步中,都保留概率最高的k个序列,如下图所示。

大模型

在选择beam size时,较小的值会使解码速度更快,但生成的结果可能会出现与贪心搜索类似的问题。较大的值可以缓解这些问题,但计算成本会增加。而且对于对话生成等开放领域任务,较大的beam size还可能会倾向于生成更通用的回复。

大模型

总的来说,beam search在机器翻译、文章摘要等任务中效果较好。但是,由于它仍然是基于最大概率的方法,所以不适用于需要多样性和创造力的开放域任务。

Top-K采样 (Top-K sampling)

为了使生成的文本更具创新性和多样性,人们在选择token的策略中引入了一定的随机性,也就是从一部分词中进行随机采样。最基础的方法就是top-k采样,即选择概率最高的k个词,基于这些词的概率分布进行采样。

在选择k值时,较大的值会使生成的内容更具多样性,但可能会生成不合理的内容;较小的值则使生成的内容多样性较低,但质量更有保证。我们可以根据任务的不同选择合适的k值。

由于top-k采样的k值是固定的,不同的概率分布可能会带来不同的问题。如图所示,当概率分布较平坦时(上半图),top-k采样可能会剔除许多概率相近的合理词语;而当概率分布较陡峭时(下半图),可能会保留一些概率很低的不合理词语。因此,我们可以考虑动态调整k值,也就是实施top-p采样。

大模型

Top-P采样 (Top-p sampling)

如上文所述,top-p采样的思路是根据具体的概率分布情况来调整k值的选择。具体地,从累积概率超过某个阈值 p 的k个词中进行随机采样。基于此,以上讨论的两种问题都能得到解决。

大模型

Temperature

除了改变选词策略,我们还可以通过调整概率分布来改变生成效果,一个常用的思路是在概率分布的Softmax函数中引入Temperature参数(下图公式中的τ)。

大模型

Temperature的取值一般在0-1之间,值越大,概率分布越平缓,生成的序列更具多样性,适合于需要创造性的任务;值越小,概率分布越陡峭,生成的序列更稳定,适合于需要准确度的任务。

大模型

Repetition Penalty

在文本生成中,重复性高是一个常见问题。一个常用的解决方法是降低已生成词的概率,即在Softmax函数中对已生成的词额外除以一个θ。一般来说,该值取1.1或者1.2即可。

大模型

2. Speculative Decoding方法

在大模型的时代,随着模型参数量增加,生成token所需的访存时间大大增加,传统的串行式的自回归生成方法不再适用。为了提高大模型的推理速度,近年来,许多研究开始关注speculative decoding,一种Draft-then-Verify的解码方法。如下图所示,在Draft阶段,先用更高效的方式生成长度为k的序列;然后在Verify阶段,将该序列输入大模型,一次性验证这k个token是否合理,并修改不合理的token。

大模型

该方法的动机主要源于两点:(1)序列中的许多简单词可以用更有效、更简单的方法生成。例如,在以下序列"Geoffrey Hinton did his PhD at the University of Edinburgh."中,"of"很容易判断,我们完全可以使用1B的模型来代替100B的模型;(2)传统自回归生成的推理过程主要受限于访存速度,即生成每个token时都需要等待LLM的参数读写。使用draft-then-verify的思路,虽然目标大模型的计算量没变,但是内存访问时间大大降低了。

大模型

为了更清晰地展示speculative decoding的过程,我们以下图为例。在每一步,Draft阶段会生成5个token,绿色的是目标模型确认的token,红色是目标模型第一个拒绝的token,蓝色是经过修正的token(注意,第一个被拒绝的token之后的所有token都将被丢弃)。比如第一步,Draft阶段生成了5个token,目标模型接受输入 "[START] Japan ’ s benchmark bond",计算每个token位置对应的概率分布,然后拒绝了 "bond",并基于概率分布采样,将其改为 "n"。

大模型

可以发现,在Speculative Decoding中有三部分具体策略:(1)Draft策略,例如使用更小的、与目标模型分布接近的模型进行自回归生成;(2)Verify策略,例如判断候选词是否是目标模型中概率最大的词;(3)Correct策略,例如使用greedy decoding或者contrastive decoding。近期关于speculative decoding的综述 [3] 中对不同的方法进行了详细的总结。

大模型

 

大模型

总结

本文总结了最常用的自回归解码方法。进行自回归文本生成时,大家可以根据各方法的原理调整参数。此外,本文介绍了一种提升解码效率 (efficiency) 的方法,即speculative decoding方法。除此之外,还可以从提升解码质量(quality)、可控性 (controllability)、多样性 (diversity)、可信度 (faithfulness) 等方面继续进行相关研究探索。

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分