前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自然语言生成中的解码方法汇总

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

作者头像
zenRRan
发布2024-04-11 16:16:40
720
发布2024-04-11 16:16:40
举报

分享作者:杨丁一

来自:金琴(知乎)

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

本文为大家分享自然语言生成中的解码方法,主要包括两部分:自回归生成中常用的解码方法,以及适用于大模型推理加速的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) 等方面继续进行相关研究探索。

参考

[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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
机器翻译
机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档