自然语言生成中的解码方法汇总

本文介绍了自然语言生成中的自回归生成中常用的解码方法,如贪心搜索、波束搜索、top-k/top-p采样,以及如何通过Temperature和RepetitionPenalty控制生成效果。同时,针对大模型推理加速,作者探讨了speculativedecoding方法及其在Draft-then-Verify框架下的应用。
摘要由CSDN通过智能技术生成

86f1ae61e21eaadd51bd7de70ecd041b.png

分享作者:杨丁一

来自:金琴(知乎)

原文链接:https://zhuanlan.zhihu.com/p/688442704

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

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

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

728b10da8da3d321f146a6abde9b6fef.jpeg
  • 贪心搜索(Greedy Search)

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

487d8618a94ea62eabc0cd0eb5f7df6d.jpeg

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

462ca5c0ade2695dd7bb50b546747586.jpeg
  • 波束搜索 (Beam search)

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

31ae660aec58ea35e9ed4270a598fa66.jpeg

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

42d96cb13d5e05a5e306915e0034a6b5.jpeg

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

  • Top-K采样 (Top-K sampling)

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

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

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

f3842124c42f52ee81be5ed3ebb05bd9.jpeg
  • Top-P采样 (Top-p sampling)

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

915fc2598675ab231b6efd50748a8119.jpeg
  • Temperature

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

3e76ba531e377744f204fefcf1169f92.jpeg

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

73fa4e73dfcf011ca78be051ce187576.jpeg
  • Repetition Penalty

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

c9f2cc6846683b684d62d603f448cbb8.png

2. Speculative Decoding方法

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

b4e13a62ef3b04ab4b211f466bc924ea.jpeg

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

96dce6505d175f00397cfe72f62a9b5f.jpeg

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

3e634bdbfc1bab8c40837adf6368a918.jpeg

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

77548505c6a6f3677de727116b0ae245.jpeg 57d8d98e28051377451cb8b6a41a29ba.jpeg

总结

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

参考

[1] huggingface.co/blog/zh/how-to-generate

[2] web.stanford.edu/class/cs224n/slides/cs224n-2023-lecture10-nlg.pdf

[3] Heming Xia, et al. “Unlocking Efficiency in Large Language Model Inference: A Comprehensive Survey of Speculative Decoding”. 2024

[4] Yaniv Leviathan, et al. “Fast Inference from Transformers via Speculative Decoding”. 2022


备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群

ef33caf8e1d010ef4a64b7d352c4b671.png

id:DLNLPer,记得备注呦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值