百度工程师浅析解码策略

news2024/11/24 5:04:33

作者 | Jane

导读

生成式模型的解码方法主要有2类:确定性方法(如贪心搜索和波束搜索)和随机方法。确定性方法生成的文本通常会不够自然,可能存在重复或过于简单的表达。而随机方法在解码过程中引入了随机性,以便生成更多样化、更自然的文本。两种常见的随机方法是:

1、Top-k 采样:在每个解码步骤中,模型会选择可能性排名在前的前 k 个单词,然后从这些单词中随机选择一个作为下一个生成的单词。这样可以增加文本的多样性,但仍然保持一定的可控性。

2、核采样(Top-p 采样):在这种方法中,模型会根据累积概率从词汇表中选择下一个单词。累积概率是指按照概率从高到低排列的单词概率之和。这可以减少重复性,并且相对于固定的 k 值,它可以自适应地选择更少或更多的候选词。

虽然核采样可以生成(缓解)没有重复的文本,但生成文本的语义一致性并不是很好,这种语义不一致的问题可以通过降低温度 (temperature) 来部分解决。降低温度是一个可以影响随机性的参数。较高的温度会导致更均匀的分布,使得生成的文本更多样化,而较低的温度会使分布更集中,更接近于确定性。这就引入了一个权衡,因为较高的温度可能会导致文本语义不一致,而较低的温度可能会失去一些多样性。

在实际应用中,要根据任务和期望的文本输出特性来选择合适的解码方法、随机性参数和温度值。不同的方法和参数组合可能适用于不同的情况,以平衡生成文本的多样性、准确性和一致性。

全文3646字,预计阅读时间10分钟。

01 对比搜索(contrastive_search)

对比搜索给定前缀文本 x < t x_{< t} x<t,按如下公式输出token x t x_{t} xt:

图片

语言模型输出的概率分布 p θ ( v ∣ x < t ) p_{\theta}(v|x_{< t}) pθ(vx<t)表示下一个可能的token的预测概率,上式中 V ( k ) V^{(k)} V(k)表示概率分布中 k 个概率最大的候选token的集合。

  • 第一项,即 模型置信度 (model confidence),是语言模型预测的每个候选词元 v 的概率。

  • 第二项, 退化惩罚 (degeneration penalty),用于度量候选token v 与上文 x < t x{< t} x<t中每个token的相似性, v 的向量表征 h v h_{v} hv与其上文 x < t x {< t} x<t中每个token的向量表征计算余弦相似度,相似度最大值被用作退化惩罚。直观上理解,如果 v 的退化惩罚较大意味着它与上文更相似 (在表示空间中),因此更有可能导致模型退化问题。超参数 α \alpha α用于在这两项中折衷。当时 α = 0 \alpha=0 α=0,对比搜索退化为纯贪心搜索。

总结来说,对比搜索在生成输出时会同时考虑:

  • 语言模型预测的概率,以保持生成文本和前缀文本之间的语义连贯性。

  • 与上文的相似性以避免模型退化。

# generate the result with contrastive search
output = model.generate(
    input_ids, 
    penalty_alpha=0.6,  # 对比搜索中的超参 $\alpha$
    top_k=4,  # 对比搜索中的超参 $k$。
    max_length=512
 )

02 贪心搜索(greedy_search)**

贪心搜索在每个时间步 都简单地选择概率最高的词作为当前输出词: w t = a r g m a x w P ( w ∣ w 1 : t − 1 ) w_t = argmax_{w}P(w | w_{1:t-1}) wt=argmaxwP(ww1:t1)

图片

△贪心搜索

问题:

  • 容易输出重复的文本,这在语言生成中是一个非常普遍的问题,在贪心搜索和波束搜索中似乎更是如此

  • 主要缺点是它错过了隐藏在低概率词后面的高概率词:The -> dog -> has (0.4*0.9=0.36),The -> nice -> wman (0.5*0.4=0.20),波束搜索可以缓解此类问题

03 波束搜索(beam_search)

波束搜索整个过程可以总结为: 分叉、排序、剪枝,如此往复。波束搜索通过在每个时间步保留最可能的 num_beams 个词,并从中最终选择出概率最高的序列来降低丢失潜在的高概率序列的风险。

下图示例 num_beams=2:

图片

△波束搜索 num_beams=2

波束搜索一般都会找到比贪心搜索概率更高的输出序列,但仍不保证找到全局最优解。

虽然结果比贪心搜索更流畅,但输出中仍然包含重复。一个简单的补救措施是引入 n-grams (即连续 n 个词的词序列) 惩罚:最常见的 n-grams 惩罚是确保每个 n-gram 都只出现一次,方法是如果看到当前候选词与其上文所组成的 n-gram 已经出现过了,就将该候选词的概率设置为 0。通过设置 no_repeat_ngram_size=2 来试试,这样任意 2-gram 不会出现两次:

beam_output = model.generate(
    input_ids, 
    max_length=50, 
    num_beams=5, 
    no_repeat_ngram_size=2, # n-grams
    early_stopping=True
)

‍但是,n-gram 惩罚使用时必须谨慎,如一篇关于纽约这个城市的文章就不应使用 2-gram 惩罚,否则,城市名称在整个文本中将只出现一次!

波束搜索已被证明依然会存在重复生成的问题。在『故事生成』这样的场景中,很难用 n-gram 或其他惩罚来控制,因为在“不重复”和最大可重复 n-grams 之间找到一个好的折衷需要大量的微调。正如 Ari Holtzman 等人 (2019) (https://arxiv.org/abs/1904.09751) 所论证的那样,高质量的人类语言并不遵循最大概率法则。这是因为人类语言具有创造性和惊喜性,而不仅仅是简单的预测性。

因此,引入随机性和创造性元素是生成更有趣和多样性文本的关键。‍

04 采样(sampling)

4.1 采样

使用采样方法时文本生成本身不再是确定性的(do_sample=True)。

# activate sampling and deactivate top_k by setting top_k sampling to 0
sample_output = model.generate(
    input_ids, 
    do_sample=True, 
    max_length=50, 
    top_k=0
)

对单词序列进行采样时的问题:模型通常会产生不连贯的乱码,缓解这一问题的一个技巧是通过降低 softmax的“温度”使分布 P ( w ∣ w 1 : t − 1 ) P(w|w_{1:t-1}) P(ww1:t1)更陡峭。而降低“温度”,本质上是增加高概率单词的似然并降低低概率单词的似然。

sample_output = model.generate(
    input_ids, 
    do_sample=True, 
    max_length=50, 
    top_k=0, 
    temperature=0.7
)

虽然温度可以使分布的随机性降低,但极限条件下,当“温度”设置为 0 时,温度缩放采样就退化成贪心解码了,因此会遇到与贪心解码相同的问题。

4.2 Top-k 采样

在 Top-K 采样中,概率最大的 K 个词会被选出,然后这 K 个词的概率会被重新归一化,最后就在这重新被归一化概率后的 K 个词中采样。GPT2 采用了这种采样方案,这也是它在故事生成这样的任务上取得成功的原因之一。

图片

假设 p=0.92,Top-p 采样对单词概率进行降序排列并累加,然后选择概率和首次超过 p=92% 的单词集作为采样池,定义为 V top-p V_{\text{top-p}} Vtop-p。在 t=1 时 V top-p V_{\text{top-p}} Vtop-p有 9 个词,而在 t=2 时它只需要选择前 3 个词就超过了 92%。

可以看出,在单词比较不可预测时(例如更平坦的左图),它保留了更多的候选词,如 P ( w ∣ “The” ) P(w | \text{“The”}) P(w“The”),而当单词似乎更容易预测时(例如更尖锐的右图),只保留了几个候选词,如 P ( w ∣ “The” , “car” ) P(w | \text{“The”}, \text{“car”}) P(w“The”,“car”)

# deactivate top_k sampling and sample only from 92% most likely words
sample_output = model.generate(
    input_ids, 
    do_sample=True, 
    max_length=50, 
    top_p=0.92, 
    top_k=0
)

虽然从理论上讲, Top-p 似乎比 Top-K 更优雅,但这两种方法在实践中都很有效。Top-p 也可以与 Top-K 结合使用,这样可以避免排名非常低的词,同时允许进行一些动态选择。如果 k 和 p 都启用,则 p 在 k 之后起作用。

# 配置 top_k = 50 、 top_p = 0.95 、 num_return_sequences = 3
sample_outputs = model.generate(
    input_ids,
    do_sample=True, 
    max_length=50, 
    top_k=50, 
    top_p=0.95, 
    num_return_sequences=3
)

——END——

参考资料:

[1]一种简单有效的解码策略:Contrastive Search

[2]HF:如何生成文本: 通过 Transformers 用不同的解码方法生成文本

[3]https://docs.cohere.ai/docs/controlling-generation-with-top-k-top-p

[4]https://docs.cohere.ai/docs/temperature

推荐阅读:

百度工程师浅析强化学习

浅谈统一权限管理服务的设计与开发

百度APP iOS端包体积50M优化实践(五) HEIC图片和无用类优化实践

百度知道上云与架构演进

百度APP iOS端包体积50M优化实践(四)代码优化

百度App启动性能优化实践篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/911245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea插件grep console最佳实践

首发博客地址 https://blog.zysicyj.top/ 参考博客&#xff1a;https://blog.csdn.net/ayunnuo/article/details/123997304 效果 配置 具体颜色 日志级别前景色背景色Error#FF0000#370000Warn#FFC033#1A0037Info#00FFF3无Debug#808080无 本文由 mdnice 多平台发布

python schedule库使用教程

schedule 是一个 Python 库&#xff0c;用于在指定的时间间隔或特定时间点执行任务。它可以帮助你创建定时任务&#xff0c;例如定时运行函数、脚本等。以下是一个简单的 schedule 库的使用教程。 安装 首先&#xff0c;你需要安装 schedule 库。你可以使用以下命令通过 pip …

ABBYY FindReader2024免费版电脑PDF格式扫描软件

在日常工作和生活中&#xff0c;我们有时需要将各种格式的文件转换为PDF格式&#xff0c;也可能需要将纸质文件扫描成PDF文档。今天要和大家分享的是PDF扫描软件哪个好&#xff0c;如何把多个扫描件合成一个PDF。 PDF作为目前主流的文件格式之一&#xff0c;在日常生活中我们需…

解决npm安装依赖失败,node和node-sass版本不匹配的问题

npm安装依赖报错&#xff1a; npm ERR! cb() never called! npm ERR! This is an error with npm itself. 一. 问题描述 用npm安装依赖报错&#xff1a; npm ERR! cb() never called! npm ERR! This is an error with npm itself. Please report this error at: npm ERR! …

记录一次wordpress项目的发布过程

背景&#xff1a;发布一套已完成的代码到线上&#xff0c;有完整的代码包&#xff0c;sql文件&#xff0c;环境是linux 宝塔。无wordpress相关经验。 过程&#xff1a;正常的发布代码 问题1&#xff1a;访问自己的域名后跳转到别的域名。 解决&#xff1a; 修改数据表wp_optio…

YOLOv8改进——引入可变形卷积DCNv3

YOLOv8 详解 ✨✨✨YOLOv8详解 【网络结构代码实操】 可变形卷积DCNv1 & DCNv2 ✨✨✨论文及代码详解——可变形卷积&#xff08;DCNv1&#xff09; ✨✨✨论文及代码详解——可变形卷积&#xff08;DCNv2&#xff09; DCNv3 是InternImage中提出的&#xff0c;DCNv3在DCNv…

centos7.6 firewalld防火墙配置

1、查看系统版本 cat /etc/redhat-release 2、查看防火墙运行状态 systemctl status firewalld 此处可以看到防火墙已开启。 3、关闭开机自启动防火墙 systemctl disable firewalld.service 4、启动防火墙并查看状态&#xff0c;系统默认 22 端口是开启的。 systemctl start f…

HCIP学习--企业网三层架构实验

一、实验拓扑 二、实验要求 内网IP地址172.16.0.0/16合理分配 SW1/2之间互为备份 VRBP/STP/LANTRUNK均使用 所有PC通过DHCP获取ip地址 三、实验步骤 首先思考进行IP地址的规划 配置eht-trunk [sw1]interface Eth-Trunk 0 [sw1-Eth-Trunk0]q [sw1-GigabitEthernet0/0/1]i…

魏副业而战:她的闲鱼号被封了

我是魏哥&#xff0c;与其躺平&#xff0c;不如魏副业而战&#xff01; 社群小K的闲鱼号被封了。 什么原因呢&#xff1f; 卖书被举报了。 魏哥调侃说&#xff0c;别干了&#xff0c;放弃吧。 她不听&#xff0c;重新开搞…… 这就是真正的网络创业者该有的素养。 魏哥蛮…

安卓系列机型-禁止卸载某个APP 防止误卸载软件 无需root权限

安卓系列机型-禁止安装某软件 防止“沉迷游戏的小孩”操作解析_安卓机器的博客-CSDN博客 上一期讲了如何禁止安装某个app。今天讲下如何禁止卸载某app。正好相反的操作。任何操作有利有弊。主要看使用者如何对待使用。 &#x1f494;&#x1f494;&#x1f494;以腾讯的一款游…

Jenkins自动化部署Vue项目

1、新建item&#xff0c;选择 Freestyle project 2、源码管理选择git&#xff0c;输入git仓库地址和授权账号&#xff0c;并指明要部署的分支 3、构建选择 Execute shell&#xff0c;输入vue项目打包命令 命令示例&#xff1a; source /etc/profile node -v npm config set re…

内容分发网络CDN与应用程序交付网络ADN之间的异同

当您想要提高网站性能时&#xff0c;需要考虑许多不同的配置和设施&#xff0c;CDN和ADN是我们常遇见的几种选项之一。“CDN”指“内容分发网络”&#xff0c;而“ADN”指“应用程序交付网络”&#xff0c;但他们两者很容易被混淆&#xff0c;虽然它们的功能和作用都有较大差异…

​山东省图书馆典藏《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书

​山东省图书馆《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书

FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

arthas-安装

window环境 在线安装 进入到对应的目录&#xff0c;cmd 下载jar包 curl -O https://arthas.aliyun.com/arthas-boot.jar 运行 java -jar arthas-boot.jar 该问题是没有运行的java项目&#xff0c;启动idea运行一个java项目&#xff0c;重新执行 选择要监听的端口号 输入ar…

【2023七夕】星河漫舞,七夕的璀璨之夜。分享:七夕表白的前端特效(附完整原代码+详细注释),情不知何起,却一往情深。愿天下有情人终成眷属

满山遍野你的脸庞,唯有遗忘是最漫长。 又一年的七夕了,今年,你还是孤单一人吗? … … 若是的话,咱们可是一个阵营的!!! 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿…

快妥稳!户外拍摄,5G黑科技更给力!

随着新媒体时代的到来&#xff0c;“户外实景美学”已然成为影视创作打磨爆款作品、衍生荧屏效应的一把“杀手锏”。恢弘山川、烟雨江南、异域小城、古朴村落……从一方影棚再到“天然片场”&#xff0c;主打一个“身临其境”般更加真实的视听体验。 杭州浙文影业影视公司是一家…

SRM系统交货协同管理:优化供应链交付流程

供应链的交货协同管理对于企业的运作至关重要。为了实现高效、准时的交付&#xff0c;越来越多的企业开始采用供应关系管理SRM系统来优化交货协同管理。 一、什么是SRM系统交货协同管理&#xff1f; SRM系统交货协同管理是指利用SRM系统来协调和管理供应链中各个参与方在交货过…

innovus加decap如何避免drc问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 加decap常见的问题就是跟regular wire产生drc&#xff0c;调试如下命令能够避免这类drc。 setFillerMode -add_fillers_with_drc false -fitGap false -ecoMode true

如何创建一个数据交互的Angular应用程序?这个工具不要错过!(一)

当我们构建带有数据的应用程序时&#xff0c;需要为客户提供排序、分组、过滤和聚合数据等选项&#xff0c;以便与之交互。我们可以通过多种途径实现这一目标&#xff1a; 使用内置的Array对象——它提供了过滤器、排序方法和reduce等用于分组和聚合的功能。使用Kendo UI for …