【深度学习】深入解码:提升NLP生成文本的策略与参数详解
文章目录
- 解码策略
- 解码参数
- 公式解释
- 代码例子
- 区别
- 更详细的束搜索的解释
- 更详细的例子解释
- 第一步
- 第二步
- 第三步
解码策略和解码参数在自然语言处理(NLP)模型的生成过程中起着不同的作用,但它们共同决定了生成文本的质量和特性。
解码策略
解码策略是指在文本生成过程中选择下一个词的方式。不同的解码策略会影响生成文本的质量、风格和多样性。常见的解码策略包括:
-
贪心搜索(Greedy Search)
- 描述:每一步都选择概率最高的词,直到生成结束标记。
- 优点:简单且速度快。
- 缺点:可能导致生成的文本缺乏多样性和连贯性,容易陷入局部最优解。
-
束搜索(Beam Search)
- 描述:在生成文本的过程中,束搜索会保留多个候选序列(称为“束宽”),并在每一步扩展这些序列,然后选择总体概率最高的序列。这意味着每一步都不仅仅选择一个概率最高的词,而是保留多个可能性,从而提高生成文本的质量。
- 例子:假设在某一步有三个词“A”、“B”、“C”的概率分别为0.4、0.35、0.25。如果束宽为2,那么我们会保留“AB”和“AC”两个序列,并在下一步继续扩展这两个序列。
- 优点:比贪心搜索更具全局最优性,生成文本质量较高。
- 缺点:计算开销较大,多样性较低。
-
随机采样(Random Sampling)
- 描述:根据词的softmax概率分布随机选择下一个词。
- 优点:生成文本的多样性高。
- 缺点:可能导致文本质量不稳定。
解码参数
解码参数是具体调节解码过程的数值设置,用于优化生成效果。主要的解码参数包括:
-
束宽(Beam Width)
- 描述:决定束搜索时保留的候选序列数量。
- 影响:较大的束宽可以提高生成文本的质量,但增加计算开销。
-
温度调节(Temperature Scaling)
- 描述:调整概率分布的平滑度,控制生成文本的多样性。
- 影响:温度越高,生成文本越随机;温度越低,生成文本越确定性。
-
最高概率词数(Top-k Sampling)
- 描述:限制采样时的词汇数量,只选择概率最高的前k个词。
- 影响:防止生成低概率的无意义词汇,但k值过大会失去作用,过小会丧失多样性。
-
最高概率阈值(Top-p Sampling)
- 描述:限制采样时的词汇集合,只选择累计概率达到阈值p的词。
- 影响:平衡生成质量和多样性,通常与Top-k结合使用。
-
重复惩罚(Repetition Penalty)
- 描述:对已经生成过的词进行惩罚,降低它们再次被生成的概率。
- 影响:减少重复词汇的出现,但可能影响文本的流畅性。
公式解释
在解码过程中,词的选择往往基于softmax概率分布。假设模型的输出概率分布为 P ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) P(w_i | w_1, w_2, ..., w_{i-1}) P(wi∣w1,w2,...,wi−1),其中 w i w_i wi 表示第 i i i 个生成的词。在束搜索中,我们会保留多个候选序列,并对每个序列计算其总概率:
P ( 序列 ) = ∏ i = 1 n P ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) P(\text{序列}) = \prod_{i=1}^{n} P(w_i | w_1, w_2, ..., w_{i-1}) P(序列)=i=1∏nP(wi∣w1,w2,...,wi−1)
每一步我们保留概率最高的 k k k 个候选序列。
代码例子
以下是一个简单的Python代码示例,展示如何实现贪心搜索和束搜索:
import numpy as npdef greedy_search(probabilities):sequence = []for step_probs in probabilities:next_word = np.argmax(step_probs)sequence.append(next_word)return sequencedef beam_search(probabilities, beam_width):sequences = [[list(), 1.0]]for step_probs in probabilities:all_candidates = []for seq, score in sequences:for i, prob in enumerate(step_probs):candidate = [seq + [i], score * -np.log(prob)]all_candidates.append(candidate)ordered = sorted(all_candidates, key=lambda x: x[1])sequences = ordered[:beam_width]return sequences[0][0]# 假设有三个生成步骤,每个步骤有三个候选词的概率
probabilities = [[0.1, 0.4, 0.5],[0.3, 0.3, 0.4],[0.6, 0.2, 0.2]
]print("Greedy Search:", greedy_search(probabilities))
print("Beam Search:", beam_search(probabilities, beam_width=2))
区别
- 解码策略:决定了选择下一个词的总体方法和框架,是高层次的策略选择。
- 解码参数:具体调节解码过程的数值,用于微调和优化解码策略的效果。
在实际应用中,选择合适的解码策略和调节适当的解码参数是生成高质量文本的关键步骤。通过多次实验和调试,可以找到最优的组合以满足特定任务的需求。
更详细的束搜索的解释
扩展到最后时,我们选择总体概率最高的序列。假设在每一步的候选词及其概率如下:
-
第一步:
- “A”:0.4
- “B”:0.35
- “C”:0.25
-
第二步(假设在第一步选择了“A”和“B”,即束宽为2):
- “AA”:0.4 * 0.3 = 0.12
- “AB”:0.4 * 0.4 = 0.16
- “AC”:0.4 * 0.3 = 0.12
- “BA”:0.35 * 0.3 = 0.105
- “BB”:0.35 * 0.4 = 0.14
- “BC”:0.35 * 0.3 = 0.105
按照概率,我们保留“AB”和“BB”两个序列。
-
第三步(在第二步选择了“AB”和“BB”):
- “ABA”:0.16 * 0.5 = 0.08
- “ABB”:0.16 * 0.3 = 0.048
- “ABC”:0.16 * 0.2 = 0.032
- “BBA”:0.14 * 0.5 = 0.07
- “BBB”:0.14 * 0.3 = 0.042
- “BBC”:0.14 * 0.2 = 0.028
最终,我们选择概率最高的序列,即“ABA”,其概率为0.08。
更详细的例子解释
第一步
假设初始概率分布为:
- A: 0.4
- B: 0.35
- C: 0.25
假设束宽为2,我们选择两个概率最高的词“B”和“A”。
第二步
我们继续扩展这两个序列:
- “A”:
- AA: 0.4 * 0.3 = 0.12
- AB: 0.4 * 0.4 = 0.16
- AC: 0.4 * 0.3 = 0.12
- “B”:
- BA: 0.35 * 0.3 = 0.105
- BB: 0.35 * 0.4 = 0.14
- BC: 0.35 * 0.3 = 0.105
保留概率最高的两个序列“AB”和“BB”。
第三步
继续扩展这两个序列:
- “AB”:
- ABA: 0.16 * 0.5 = 0.08
- ABB: 0.16 * 0.3 = 0.048
- ABC: 0.16 * 0.2 = 0.032
- “BB”:
- BBA: 0.14 * 0.5 = 0.07
- BBB: 0.14 * 0.3 = 0.042
- BBC: 0.14 * 0.2 = 0.028
最终选择概率最高的序列“ABA”,其概率为0.08。
通过这种方法,束搜索可以在每一步保留多个候选序列,并在最终选择总体概率最高的序列,保证生成文本的质量和连贯性。
相关文章:
【深度学习】深入解码:提升NLP生成文本的策略与参数详解
文章目录 解码策略解码参数公式解释代码例子区别 更详细的束搜索的解释更详细的例子解释第一步第二步第三步 解码策略和解码参数在自然语言处理(NLP)模型的生成过程中起着不同的作用,但它们共同决定了生成文本的质量和特性。 解码策略 解码…...
Petalinux由于网络原因产生的编译错误(2)--Fetcher failure:Unable to find file
1 Fetcher failure:Unable to find file 错误 如果编译工程遇到如下图所示的“Fetcher failure for URL”或相似错误 出现这种错误的原因是 Petalinux 在配置和编译的时候,需要联网下载一些文件,由于网 络原因这些文件不能正常下载,导致编译…...
随手记:商品信息过多,展开收起功能
UI原型图: 页面思路: 在商品信息最小item外面有一个包裹所有item的标签,控制这个标签的高度来实现展开收起功能 <!-- 药品信息 --><view class"drugs" v-if"inquiryInfoSubmitBtn"><view class"…...
uniapp上传头像并裁剪图片
第一步写上uniapp自带的选择图片button按钮 点击之后会弹出选择图片的方式 拍照或从相册选择图片后将会跳到图片裁剪 然后我们裁剪完之后点击确定在上传图片 这里是上传图片的接口 拿到本地图片 上传的话自己想以那种方式上传都可以...
9.1.3 简单介绍单阶段模型YOLO、YOLOv2、YOLO9000、YOLOv3的发展过程
9.1.3 简单介绍单阶段模型YOLO、YOLOv2、YOLO9000、YOLOv3的发展过程 前情回顾:9.1.2 简单介绍两阶段模型R-CNN、SPPNet、Fast R-CNN、Faster R-CNN的发展过程 摘要 YOLOYOLOv2YOLO9000YOLOv3基本思想使用一个端到端的卷积神经网络直接预测目标的类别和位置针对YOL…...
英智教育智能体,AI Agent赋能教育培训行业数字化升级
教育是当前需求巨大且没有足够人力来满足的领域,每个学生个体差异较大,有限的教师资源无法针对性实行差异教学,学生学不会,教师教学压力大等问题普遍存在。 面对这些难题,英智在通用大模型能力的基础上,整合…...
什么是电脑监控软件?六款知名又实用的电脑监控软件
电脑监控软件是一种专为监控和记录计算机活动而设计的应用程序,它能够帮助用户(如家长、雇主或系统管理员)了解并管理目标计算机的使用情况。这些软件通常具有多样化的功能,包括但不限于屏幕捕捉、网络行为监控、应用程序使用记录…...
小程序名片怎么生成?AI名片生成器源码系统 为企业店铺创建自己的数字名片
在数字化时代,小程序名片已经成为企业店铺展示自身形象、推广产品和服务的重要工具。分享一个AI名片生成器源码系统春哥AI雷达智能名片小程序系统企业商业运营版,含完整代码包和详细的图文安装部署搭建教程,新手也能轻松使用,源码…...
浅谈PMP:项目管理的专业化认证
引言: 项目管理作为现代企业运营的核心环节,其重要性不言而喻。随着全球化的加速和市场竞争的加剧,企业对项目管理的需求日益增长,项目管理专业人员的需求也水涨船高。在这样的背景下,PMP(Project Managem…...
获取闲鱼商品详情api
要使用闲鱼商品详情API,你需要先申请一个开发者账号,并且在开发者中心创建一个应用,目前很难申请到,还有一个方式是获取第三方应用的AppKey和AppSecret直接使用。 API的请求地址为: https://api.m.taobao.com/h5/mto…...
java1.8运行arthas-boot.jar运行报错解决
报错内容 输入java -jar arthas-boot.jar,后报错。 [INFO] JAVA_HOME: D:\developing\jdk\jre1.8 [INFO] arthas-boot version: 3.7.2 [INFO] Can not find java process. Try to run jps command lists the instrumented Java HotSpot VMs on the target system.…...
每日一练 - IGMP协议与查询器选举机制
01 真题题目 在共享网络中存在多台路由器的情况下,是否是IGMP协议本身负责选举出查询器的角色? A. 正确 B. 错误 02 真题答案 B 03 答案解析 IGMP(Internet Group Management Protocol)互联网组管理协议,主要用于IP多…...
深入浅出:面向对象软件设计原则(OOD)
目录 前言 1.单一责任原则(SRP) 2.开发封闭原则(OCP) 3.里氏替换原则(LSP) 4.依赖倒置原则(DIP) 5.接口分离原则(ISP) 6.共同封闭原则(CCP)…...
缓存与数据一致性问题
1、更新了数据库,再更新缓存 假设数据库更新成功,缓存更新失败,在缓存失效和过期的时候,读取到的都是老数据缓存。 2、更新缓存,更新数据库 缓存更新成功了,数据库更新失败,是不是读取的缓存的都…...
2024年上海高考作文题目(ChatGPT版)
一、2024年6月7日上海高考作文题目 生活中,人们常用认可度判别事物,区分高下。请写一篇文章,谈谈你对“认可度”的认识和思考。 要求:(1)自拟题目;(2)不少于800字。 二、…...
.net 调用海康SDK以及常见的坑解释
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 在工控领域,很多时候需要…...
KVM+GFS高可用
资源列表 操作系统 IP 主机名 Centos7 192.168.10.51 gfs1 Centos7 192.168.10.52 gfs2 Centos7 192.168.10.53 kvm 在gfs节点部署GlusterFS #添加hosts解析 cat >> /etc/hosts << EOF 192.168.10.51 gfs1 192.168.10.52 gfs2 192.168.10.53 kvm EOF …...
C++迈向精通:当我尝试修改虚函数表
尝试修改虚函数表 本期纯整活儿好吧!!!! 初衷 有一天我突然开始好奇虚函数表是否真的存在,于是我开始想是否能够从C中查看或者调用虚函数表中的内容。,于是有了下面的操作。 操作过程 起初我并没有思路…...
IDEA 高效插件工具
文章目录 LombokMaven Helper 依赖冲突any-rule(正则表达式插件)快速生成javadocGsonFormat (Aits) 将json解析成类Diagrams使用 类图SequenceDiagram时序图GenerateAllSetter(AltEnter)大小写转写String ManipulationGitToolBox 代码提交人activate-pow…...
SQL入门大全
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它具有数据操纵和数据定义等多种功能,为数据库管理系统提供了强大的交互性特点,能够极大地提高计算机应用系统的工作质量与…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
Unity VR/MR开发-开发环境准备
视频讲解链接: 【XR马斯维】UnityVR/MR开发环境准备【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
LeetCode 2894.分类求和并作差
目录 题目: 题目描述: 题目链接: 思路: 思路一详解(遍历 判断): 思路二详解(数学规律/公式): 代码: Java思路一(遍历 判断&a…...
RabbitMQ work模型
Work 模型是 RabbitMQ 最基础的消息处理模式,核心思想是 多个消费者竞争消费同一个队列中的消息,适用于任务分发和负载均衡场景。同一个消息只会被一个消费者处理。 当一个消息队列绑定了多个消费者,每个消息消费的个数都是平摊的&a…...
