前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【强基固本】大模型的四种文本解码策略

【强基固本】大模型的四种文本解码策略

作者头像
马上科普尚尚
发布2024-06-05 08:44:53
1490
发布2024-06-05 08:44:53
举报
文章被收录于专栏:人工智能前沿讲习

“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理和神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。

在大型语言模型(LLM)的迷人世界中,模型架构、数据处理和优化常常成为关注的焦点。但解码策略在文本生成中扮演着至关重要的角色,却经常被忽视。

在这篇文章中,我们将通过深入探讨贪婪搜索和束搜索的机制,以及采用顶K采样和核采样的技术,来探索LLM是如何生成文本的。

https://mlabonne.github.io/blog/posts/2022-06-07-Decoding_strategies.html

https://colab.research.google.com/drive/19CJlOS5lI29g-B3dziNn93Enez1yiHk2?usp=sharing

unsetunset基础知识unsetunset

为了开始,我们先举一个例子。我们将文本“I have a dream”输入到GPT-2模型中,并让它生成接下来的五个词(单词或子词)。

代码语言:txt
复制
'cuda'
ifelse
'cpu'
'gpt2'
'gpt2'
"I have a dream"
'pt'
print
"Generated text: {generated_text}"

句子“I have a dream of being a doctor”似乎是由GPT-2生成的。然而,GPT-2并没有完全生成这句话。

接下来我们将深入探讨各种解码策略,包括贪婪搜索、束搜索以及采用顶K采样和核采样的技术。通过这些策略,我们可以更好地理解GPT-2是如何生成文本的。

人们常常误解认为像GPT-2这样的大型语言模型(LLM)直接生成文本。实际上并非如此。相反,LLM会计算对其词汇表中每个可能的词元分配的分数,这些分数称为logits。为了简化说明,以下是这个过程的详细分解:

首先,分词器(在本例中是字节对编码)将输入文本中的每个词元转换为相应的词元ID。然后,GPT-2使用这些词元ID作为输入,尝试预测下一个最有可能的词元。最终,模型生成logits,这些logits通过softmax函数转换为概率。

unsetunset贪婪搜索(Greedy Search)unsetunset

贪婪搜索是一种解码方法,在每一步中选择最可能的词元作为序列中的下一个词元。简单来说,它在每个阶段只保留最可能的词元,舍弃所有其他潜在选项。以我们的例子为例:

  • 步骤 1: 输入: “I have a dream” → 最可能的词元: ”of”
  • 步骤 2: 输入: “I have a dream of” → 最可能的词元: ”being”
  • 步骤 3: 输入: “I have a dream of being” → 最可能的词元: ”a”
  • 步骤 4: 输入: “I have a dream of being a” → 最可能的词元: ”doctor”
  • 步骤 5: 输入: “I have a dream of being a doctor” → 最可能的词元: “.”

尽管这种方法听起来很直观,但需要注意的是,贪婪搜索是短视的:它只考虑每一步中最可能的词元,而不考虑对整个序列的整体影响。这个特性使得它速度快且高效,因为它不需要跟踪多个序列,但也意味着它可能错过那些包含稍微不那么可能的下一个词元的更好序列。

代码语言:txt
复制
if
return
# Get the predicted next sub-word (here we use top-k search)
# Compute the score of the predicted token
# Add the predicted token to the list of input ids
# Add node and edge to graph
'tokenscore'
'token'"_{length}"
# Recursive call
return

unsetunset束搜索(Beam Search)unsetunset

代码语言:txt
复制
if
return
# Get the predicted next sub-word (here we use top-k search)
if
'greedy'
elif
'top_k'
elif
'nucleus'
forin
# Compute the score of the predicted token
'cumscore'
# Add the predicted token to the list of input ids
# Add node and edge to graph
'tokenscore'
'cumscore'
'sequencescore'
'token'"_{length}_{j}"
# Recursive call

unsetunset顶K采样(Top-k Sampling)unsetunset

顶K采样是一种利用语言模型生成的概率分布,从最可能的前K个选项中随机选择一个词元的技术。

假设我们有 𝑘=3,四个词元A、B、C和D,具有以下概率:

  • 𝑃(A) = 30%
  • 𝑃(B) = 15%
  • 𝑃(C) = 5%
  • 𝑃(D) = 1%

在顶K采样中,词元D会被忽略,算法将以以下概率输出:

  • A 60%的时间
  • B 30%的时间
  • C 10%的时间

这种方法确保我们优先考虑最可能的词元,同时在选择过程中引入了一定的随机性。

另一种引入随机性的方法是温度的概念。温度𝑇是一个从0到1的参数,它影响softmax函数生成的概率,使最可能的词元更具影响力。在实践中,它仅仅是将输入的logits除以一个我们称之为温度的值:

unsetunset核采样(Nucleus Sampling)unsetunset

代码语言:javascript
复制
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能前沿讲习 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • unsetunset基础知识unsetunset
  • unsetunset贪婪搜索(Greedy Search)unsetunset
  • unsetunset束搜索(Beam Search)unsetunset
  • unsetunset顶K采样(Top-k Sampling)unsetunset
  • unsetunset核采样(Nucleus Sampling)unsetunset
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档