0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

深度学习自然语言处理 来源:金琴(知乎) 2024-03-28 10:51 次阅读

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

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

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

45db4678-ec57-11ee-a297-92fbcf53809c.jpg

贪心搜索(Greedy Search)

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

45e4ba3c-ec57-11ee-a297-92fbcf53809c.jpg

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

45eba0f4-ec57-11ee-a297-92fbcf53809c.jpg

波束搜索 (Beam search)

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

45f5a2f2-ec57-11ee-a297-92fbcf53809c.jpg

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

45fee4de-ec57-11ee-a297-92fbcf53809c.jpg

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

Top-K采样 (Top-K sampling)

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

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

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

460c4994-ec57-11ee-a297-92fbcf53809c.jpg

Top-P采样 (Top-p sampling)

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

461962e6-ec57-11ee-a297-92fbcf53809c.jpg

Temperature

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

4627645e-ec57-11ee-a297-92fbcf53809c.jpg

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

462eb66e-ec57-11ee-a297-92fbcf53809c.jpg

Repetition Penalty

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

463a3d90-ec57-11ee-a297-92fbcf53809c.png

2.Speculative Decoding方法

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

4643e796-ec57-11ee-a297-92fbcf53809c.jpg

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

46593c40-ec57-11ee-a297-92fbcf53809c.jpg

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

46630036-ec57-11ee-a297-92fbcf53809c.jpg

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

466fe9ea-ec57-11ee-a297-92fbcf53809c.jpg

467d4d38-ec57-11ee-a297-92fbcf53809c.jpg

总结

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

审核编辑:黄飞

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

    关注

    1

    文章

    288

    浏览量

    13351
  • 大模型
    +关注

    关注

    2

    文章

    2459

    浏览量

    2734

原文标题:自然语言生成中的解码方法汇总

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    python自然语言

    最近,python自然语言是越来越火了,那么什么是自然语言自然语言(Natural Language )广纳了众多技术,对自然或人类语言
    发表于 05-02 13:50

    自然语言处理怎么最快入门?

    可自己去了解),这里主要推荐一下常用到(Java)的几个分词工具:(1)、HanLP 是一个中文自然语言处理的基础包,它囊括了包含分词在内的几乎所有的自然语言处理涉及的基础操作,同时工具包来说,分为
    发表于 11-28 10:02

    【推荐体验】腾讯云自然语言处理

    `相信大家对NLP自然语言处理的技术都不陌生,它是计算机科学领域和AI领域中的一个分支,它与计算机和人类之间使用自然语言进行交互密切相关,而NLP的最终目标是使计算机能够像人类一样理解语言。目前
    发表于 10-09 15:28

    自然语言处理的分词方法

    自然语言处理——75 自动分词基本算法
    发表于 03-19 11:46

    自然语言处理的语言模型

    自然语言处理——53 语言模型(数据平滑)
    发表于 04-16 11:11

    自然语言处理的词性标注方法

    自然语言处理——78 词性标注方法
    发表于 04-21 11:38

    自然语言处理——总结、习题

    自然语言处理——79 总结、习题
    发表于 06-19 11:22

    什么是自然语言处理

    什么是自然语言处理?自然语言处理任务有哪些?自然语言处理的方法是什么?
    发表于 09-08 06:51

    深度视频自然语言描述方法

    针对计算机对视频进行自动标注和描述准确率不高的问题,提出一种基于多特征融合的深度视频自然语言描述的方法。该方法提取视频帧序列的空间特征、运动特征、视频特征,进行特征的融合,使用融合的特征训练基于长短
    发表于 12-04 14:07 1次下载
    深度视频<b class='flag-5'>自然语言</b>描述<b class='flag-5'>方法</b>

    自然语言处理常用模型解析

    自然语言处理常用模型使用方法一、N元模型二、马尔可夫模型以及隐马尔可夫模型及目前常用自然语言处理开源项目/开发包有哪些?
    发表于 12-28 15:42 5888次阅读
    <b class='flag-5'>自然语言</b>处理<b class='flag-5'>常用</b>模型解析

    什么是自然语言处理_自然语言处理常用方法举例说明

    自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法自然语言处理是一门融
    发表于 12-28 16:56 1.8w次阅读
    什么是<b class='flag-5'>自然语言</b>处理_<b class='flag-5'>自然语言</b>处理<b class='flag-5'>常用</b><b class='flag-5'>方法</b>举例说明

    自然语言处理怎么最快入门_自然语言处理知识了解

    自然语言处理就是实现人机间自然语言通信,实现自然语言理解和自然语言生成是十分困难的,造成困难的根本原因是自然语言文本和对话的各个层次上广泛存
    发表于 12-28 17:10 5312次阅读

    自然语言处理方法和应用

    2018CCAI大会邀请到国内NLP领域顶尖学者,苏州大学特聘教授,计算机学院副院长,人类语言技术研究所所长、国家杰出青年科学基金获得者的张民教授将以《自然语言处理方法和应用》为题做专题讲座。
    的头像 发表于 06-25 15:44 5529次阅读

    自然语言处理的ELMO使用

    word embedding 是现在自然语言处理中最常用的 word representation 的方法常用的word embedding 是word2vec的
    的头像 发表于 05-02 14:32 3335次阅读
    <b class='flag-5'>自然语言</b>处理的ELMO使用

    自然语言处理的概念和应用 自然语言处理属于人工智能吗

      自然语言处理(Natural Language Processing)是一种人工智能技术,它是研究自然语言与计算机之间的交互和通信的一门学科。自然语言处理旨在研究机器如何理解人类语言
    发表于 08-23 17:31 1647次阅读