Beam Search学习

news2024/12/26 23:47:07

BackGround

在生成的时候,模型的输出是一个时间步一个时间步依次获得的,而且前面时间步的结果还会影响后面时间步的结果。也就是说,每一个时间步,模型给出的都是基于历史生成结果的条件概率。

  • 为了生成完整的句子,需要一个称为解码的额外动作来融合模型多个时间步的输出,而且使得最终得到的序列的每一步条件概率连乘起来最大。

在文本生成任务中,每一个时间步可能的输出种类称为字典大小(vocabulary size,我们用V表示),进行T步随机的生成可能获得的结果总共有 V T V^T VT种。拿中文文本生成来说,V 的值大约是5000-6000,即常用汉字的个数。在如此大的基数下,遍历整个生成空间是不现实的。

贪心搜索

每一个时间步都取出一个条件概率最大的输出
在这里插入图片描述

Beam Search

思路也很简单,就是稍微放宽一些考察的范围。在每一个时间步,不再只保留当前分数最高的1个输出,而是保留num_beams个。当num_beams=1时集束搜索就退化成了贪心搜索。

  • 实际上是堆树的思想

在这里插入图片描述

  1. 在第一个时间步,A和C是最优的两个,因此得到了两个结果[A],[C],其他三个就被抛弃了;
  2. 第二步会基于这两个结果继续进行生成,在A这个分支可以得到5个候选人,[AA],[AB],[AC],[AD],[AE],C也同理得到5个,此时会对这10个进行统一排名,再保留最优的两个,即图中的[AB]和[CE];
  3. 第三步同理,也会从新的10个候选人里再保留最好的两个,最后得到了[ABD],[CED]两个结果。 可以发现,beam search在每一步需要考察的候选人数量是贪心搜索的num_beams倍,因此是一种牺牲时间换性能的方法。

Beam Search例子

上面的贪心搜索只选择了概率最大的一个,而集束搜索则选择了概率最大的前k个。这个k值也叫做集束宽度(Beam Width)。

  • k值等于2,则集束搜索的过程如下
    在这里插入图片描述

  • 得到第一个输出的概率分布[0.1,0.1,0.3,0.4,0.1][0.1,0.1,0.3,0.4,0.1],选择概率最大的前两个,0.3和0.4,即Je和moi。

  • 然后Je和moi分别作为Decoder的输入,得到两个概率分布,然后再选择概率和最大的前两个序列,0.3+0.8和0.4+0.6,即Je suis和moi suis。

以此类推,最终可以得到两个序列,即Je suis étudiant和moi suis étudiant,很明显前者的概率和最大,为2.2,所以这个序列是最终得到的结果。

缺点

Beam Search虽然比贪心强了不少,但还是会生成出空洞、重复、前后矛盾的文本。如果你有文本生成经验,一定对这些现象并不陌生。在语言模型还不像如今的BERT、GPT这么厉害的时候,这种现象更加明显。

  • 可以发现即使是如今最顶级的语言模型加上足够长的引文输入,还是无法得到高质量的生成结果。

论文认为这种问题是由于这种试图最大化序列条件概率的解码策略从根上就有问题。

他们对比了给定同样引文的情况下人类续写和机器生成的词用语言模型计算出来的概率。
如下图所示,人类选择的词(橙线)并不是像机器选择的(蓝线)那样总是那些条件概率最大的词。从生成的结果也可以看出,机器生成的结果有大量重复。

在这里插入图片描述

改进方法

随机采样

第一种方法是用随机采样(sampling)代替取概率最大的词。采样的依据就是解码器输出的词典中每个词的概率分布。相比于按概率“掐尖”,这样会增大所选词的范围,引入更多的随机性。当时那篇论文的结论就是这种随机采样的方法远好于Beam Search。但这其实也是有条件的,随机采样容易产生前后不一致的问题。

  • 而在开放闲聊领域,生成文本的长度都比较短,这种问题就被自然的淡化了。

temperature 随机采样

通过温度参数可以控制softmax函数产生的概率分布的平滑程度。温度参数(通常表示为T)是一个正数,用于调整指数运算的尺度。较高的温度会使得softmax函数的输出更加平滑,而较低的温度则会使得输出更加尖锐。

具体来说,给定输入向量 x x x,使用温度参数 T T T 的softmax函数的计算公式如下:

y i = e x i T ∑ j = 1 n e x j T , for i = 1 , 2 , . . . , n y_i = \frac{e^{\frac{x_i}{T}}}{\sum_{j=1}^{n} e^{\frac{x_j}{T}}}, \quad \text{for} \quad i = 1, 2, ..., n yi=j=1neTxjeTxi,fori=1,2,...,n

通过调整温度参数 T T T 的值,可以改变输出向量 y y y 中每个元素的相对大小。当温度参数 T T T 较高时,指数运算的结果会变得更加平均,导致概率分布更加均匀,各个类别的概率差异较小。而当温度参数 T T T 较低时,指数运算的结果会更加集中,导致概率分布更加尖锐,各个类别的概率差异较大。

需要注意的是,当温度参数 T T T 趋近于无穷大时,softmax函数的输出将趋近于均匀分布,即每个类别的概率接近于 1 n \frac{1}{n} n1,其中 n n n 是类别的数量。而当温度参数 T T T 趋近于零时,softmax函数的输出将趋近于一个独热编码,即只有最大值对应的类别的概率接近于1,其他类别的概率接近于0。

top-k采样

这个方法就是在采样前将输出的概率分布截断,取出概率最大的k个词构成一个集合,然后将这个子集词的概率再归一化,最后从新的概率分布中采样词汇。

  • 这个办法据说可以获得比Beam Search好很多的效果,但也有一个问题,就是这个k不太好选。

因为这个概率分布变化比较大,有时候可能很均匀(flat),有的时候比较集中(peaked)。对于集中的情况还好说,当分布均匀时,一个较小的k容易丢掉很多优质候选词。但如果k定的太大,这个方法又会退化回普通采样。

在这里插入图片描述

top-p采样

在这里插入图片描述

  • 累加概率,前若干个词多概率进行累加一直到达到p的阈值,然后取出前面这若干个词,重新进行概率归一化,并把剩下词的概率设为0。

惩罚重复

为了解决重复问题,还可以通过惩罚因子将出现过词的概率变小或者强制不使用重复词来解决。惩罚因子来自于同样广为流传的《CTRL: A Conditional Transformer Language Model for Controllable Generation》[2]

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

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

相关文章

Leetcode—2477.到达首都的最少油耗【中等】

2023每日刷题&#xff08;五十&#xff09; Leetcode—2477.到达首都的最少油耗 算法思想 参考自灵茶山艾府 实现代码 class Solution { public:long long minimumFuelCost(vector<vector<int>>& roads, int seats) {int n roads.size() 1;vector<i…

【开源】基于JAVA的桃花峪滑雪场租赁系统

项目编号&#xff1a; S 036 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S036&#xff0c;文末获取源码。} 项目编号&#xff1a;S036&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion写好提示词

Stable Diffusion 是一种文生图 AI 模型,由互联网上数百万图像和文本描述对训练而来,通过理解文本描述与图像信息的内在关联,不断利用扩散过程进而得到满意的生成图片。 比如,通过一串提示词,midjourney 会输出这样的情侣合照: A pair of young Chinese lovers, wearing…

Docker部署.NET6项目

Docker的三大核心概念 1、docker仓库&#xff08;repository&#xff09; docker仓库&#xff08;repository&#xff09;类似于代码库&#xff0c;是docker集中存放镜像的场所。实际上&#xff0c;注册服务器是存放仓库的地方&#xff0c;其上往往存放着很多仓库。每个仓库集…

C++学习之路(十五)C++ 用Qt5实现一个工具箱(增加16进制颜色码转换和屏幕颜色提取功能)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《Base64图片编码预览功能》功能。为了继续丰富我们的工具箱&#xff0c;今天我们就再增加两个平时经常用到的功能吧&#xff0c;就是「 16进制颜色码转RGB文本 」和 「屏幕颜色提取」功能。下面我们就来看看如何来规划…

Postman可以卸载了!这款IDEA插件太好用了!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

C++笔试题之回文数的判断

“回文”是指正读反读都能读通的句子&#xff0c;它是古今中外都有的一种修辞方式和文字游戏&#xff0c;如“我为人人&#xff0c;人人为我”等。在数学中也有这样一类数字有这样的特征&#xff0c;成为回文数&#xff08;palindrome number&#xff09;。 设n是一任意自然数…

vue3中使用antv-X6实现关系图

先看效果图&#xff1a; 1、安装 npm installantv/x6 --save 这里使用的X6中自定义节点的方式实现的&#xff0c;项目目录如下&#xff0c;hooks里面存放一些函数和变量 nodes里面是自定义节点的页面&#xff0c;最外围的index.vue就是主渲染页面 2、testSh/index.vue 注意&…

计算机视觉GPT时刻!UC伯克利三巨头祭出首个纯CV大模型,推理惊现AGI火花

计算机视觉的GPT时刻&#xff0c;来了&#xff01; 最近&#xff0c;来自UC伯克利的计算机视觉「三巨头」联手推出了第一个无自然语言的纯视觉大模型&#xff08;Large Vision Models&#xff09;&#xff0c;并且第一次证明了纯视觉模型本身也是可扩展的&#xff08;scalabil…

YOLOv8创新魔改教程(三)如何添加注意力机制注意力机制的用法与思考

注意力机制的用法与思考 好多同学问我加了CA注意力机制&#xff0c;CBAM注意力机制&#xff0c;都没有涨点&#xff0c;然后就在不停地换不同的注意力机制&#xff0c;其实并不是这样的。今天和大家讨论一下注意力机制的用法与思考。 &#xff08;一&#xff09;添加位置 大…

异常追踪与 JIRA 实现双向联动

前言 当应用程序或系统出现异常时&#xff0c;通常需要及时处理以保证系统的正常运行。通过异常追踪与 JIRA 双向联动&#xff0c;可以让企业内部相关人员快速了解、分析问题故障发生的原因、追溯并记录故障的处理过程&#xff0c;有效提高人员的沟通效率&#xff0c;极大降低…

使用 SVN 新建本地仓库和提交

在写代码的时候经常要看自己修改了什么或者临时备份一下&#xff0c;发现 SVN 比 Git 更好用&#xff0c;下面是使用 TortoiseSVN 在本地新建仓库和关联仓库的方法。 1. 新建文件夹&#xff0c;在文件夹里面右键选择 TortoiseSVN -> Create repository here 。 2. 选择建立…

C++红黑树封装set和map(很详细)

前言 在前面&#xff0c;我们学习了红黑树。&#xff08;没学过红黑树直接看会很吃力&#xff09;set和map的底层就是红黑树&#xff0c;现在我们要用这棵树来封装STL里面的容器&#xff1a;set和map。 下面是之前讲过的红黑树&#xff0c;他只是普通的“Key”模型,适合封装set…

排序:直接插入排序希尔排序

目录 排序&#xff1a; 概念&#xff1a; 直接插入排序&#xff1a; 代码的实现&#xff1a; 代码解析&#xff1a; 总结&#xff1a; 希尔排序&#xff1a; 代码实现&#xff1a; 预排序&#xff1a; 代码优化&#xff1a; gap 的 本质 &#xff1a; 直接…

千梦网创:设计一个100%回本赚钱的培训模式

互联网上搞培训&#xff0c;牌坊立的快&#xff0c;倒的也快。 你会的东西你教了才能赚钱&#xff0c;你想赚钱你就要教。 你只要教了&#xff0c;立马就有人模仿&#xff0c;立马就有人收费比你更低。 所以&#xff0c;你不会变&#xff0c;你没有核心的东西&#xff0c;就…

日本IT行业发展前景怎么样呢?

由于日本劳动力短缺&#xff0c;招聘外国IT工程师的公司越来越多&#xff0c;目前&#xff0c;日本IT行业有约28,000多名外国工程师&#xff0c;占所有日本IT工程师的3%。随着大量海外人才涌入日本&#xff0c;预计这一数字还会进一步增长&#xff0c;所以有不少人想要转行做赴…

RHCE作业

目录 1、搭建一个通过网址https://www.openlab.com/money访问的缴费网站&#xff0c;网站内容为money 2、配置DNS的正向解析 1、搭建一个通过网址https://www.openlab.com/money访问的缴费网站&#xff0c;网站内容为money 首先查看自己是不是有nginx的包没有的话装一个 首…

ModStartCMS v7.7.0 集成内容区块,文件选择顺序

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

智能优化算法应用:基于鼠群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鼠群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鼠群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鼠群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

mapbox系列:常见功能使用总结

前言 最近在写一个大屏的时候使用mapbox&#xff0c;将开发过程进行总结如下&#xff1a; 功能1&#xff1a;mapbox logo显示与隐藏 使用mapbox时地图上会有mapbox的logo&#xff0c;如下&#xff1a; 设置地图全局样式设置 :deep(.mapboxgl-ctrl) {display: none !import…