beam search算法

转载

https://blog.csdn.net/xyz1584172808/article/details/89220906

https://blog.csdn.net/batuwuhanpei/article/details/64162331

https://www.zhihu.com/question/54356960

 

 

beam search算法

 

在看论文Sequence to Sequence Learning with neural networks时看到了beam search算法,特此记录一下该算法的基本思想

 

在CS领域,beam search是一种启发式搜索,在优化领域,其属于一种最佳优先算法,最佳优先算法是一种图搜索算法,其会将所有可能的解依据启发式规则进行排序,该规则用来衡量得到的解与目标解到底有多接近。但是对于beam search与最佳优先算法有有一些地方不同,beam search只会保存一部分解作为候选解,而最佳优先算法则会将所有解都作为候选,其具体过程如下所述:

beam search是使用宽度优先搜索来构建它的搜索树。在每一层,其都会生成一系列的解,然后对这些解进行排序,选择最好的K个解作为候选解,这里的K我们称为集束宽度。只有被选中的这些解可以向下继续扩展下去。因此,集束宽度越大,被裁减掉的解越少。由于存在裁减,目标解有可能会被裁减掉,因此该算法是不完全的,即无法保证能够找到全局最优解

 

这里有一个最通俗的解释

在seq2seq中在test阶段使用了beam search来寻找解码时最优的结果,我们假设集束宽度为2,词典大小为3(a,b,c),那么其解码过程如下所示:

1)生成第1个词的时候,选择概率最大的2个词,假设为a,c,那么当前序列就是a,c;

2)生成第2个词的时候,我们将当前序列a和c,分别与词表中的所有词进行组合,得到新的6个序列aa、ab、ac、ca、cb cc,然后从其中选择2个得分最高的,作为当前序列,加入aa、cb

3)后面不断重复这个过程,直到遇到结束符为止。最终输出2个得分最高的序列

 

 

在seq2seq算法中,beam search只在预测的时候需要。训练的时候因为知道正确答案,并不需要再进行这个搜索。

在seq2seq算法中Beam search算法也有许多改进的地方,根据最后的概率公式可知,该算法倾向于选择最短的句子,因为在这个连乘操作中,每个因子都是小于1的数,因子越多,最后的概率就越小。解决这个问题的方式,最后的概率值除以这个生成序列的单词数(记生成序列的单词数为N NN),这样比较的就是每个单词的平均概率大小。

此外,连乘因子较多时,可能会超过浮点数的最小值,可以考虑取对数来缓解这个问题。

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

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

相关文章

微信支付遇到的坑--签名错误

遇到签名错误,因为微信没有给出具体错误信息,所以我们只能自己排查。 下面是我整理出可能导致签名错误的情况: 1.可以先去微信公众平台用支付接口调试工具验证签名方法是否有问题 https://pay.weixin.qq.com/wiki/tools/signverify/2.如果签名…

Apache Kafka / Spark流系统的性能调优

电信行业的实际案例研究 调试实际的分布式应用程序可能是一项艰巨的任务。 至少在一开始,最常见的Google搜索并没有什么用。 在这篇博客文章中,我将详细介绍如何将Apache Kafka / Spark Streaming / Apache Ignite应用程序加速近十倍,并将开…

mysql 8服务配置文件my.ini 不生效_2、mysql的启动选项和配置文件介绍

mysql服务端可以指定允许同时接入的客户端数量max-connections、客户端与服务器的通信方式、表的默认存储引擎default_storage_engine等等设置项,使得我们可以更加灵活地使用它。进入正题我们讲的是基于linux系统的,本文我们主要讲一下:1、有…

数学中常见的maxmin,min max

数学中常见的maxmin,min max 1、数学中公式(1)与公式(2)含义是不同的 (1) (2) 公式(1)的直接理解,先找出每个班里的身高最高的同学,再由这些同学中挑出身高最低的;同理,公式(2)的直接理解,先找出每个…

Mac入门--Apache/Php/Mysql的开启关闭

注意:mac自带apache环境和PHP环境 一 php服务的启动和关闭 php-fpm 启动 sudo php-fpm php-fpm 关闭 1 查看php-fpm端口是否在被php-fpm进程 netstat -an | grep 9000 查看进程pid sudo lsof -i:9000 杀死进程 sudo kill -9 [pid] 或者 sudo killall php-fpm 2 查看…

method=post 怎么让查看源代码看不到_网上文档无法复制怎么办?试试这几个方法!...

从网上复制资料很简单吗?平常在网上查找资料的时候,总是会有一些文档无法下载、甚至有时连复制都不行。这可怎么办?别急,今天我们就来介绍一些网页复制的方法,帮助大家更好地收集资料。一:复制到Word剪贴板…

python 加载mat文件

python 加载mat文件 直接上程序 import scipy.io as sciomat_path ./USPS_vs_MNIST.matload_mat scio.loadmat(mat_path) # load_mat为字典类型, <class dict> print(type(load_mat)) # 访问load_mat即为访问字典 X_src load_mat[X_src] # 这个X_src为numpy类型&…

[Sdoi2010] 地精部落

F. 地精部落 题目描述 传说很久以前&#xff0c;大地上居住着一种神秘的生物&#xff1a;地精。 地精喜欢住在连绵不绝的山脉中。具体地说&#xff0c;一座长度为 N 的山脉 H可分 为从左到右的 N 段&#xff0c;每段有一个独一无二的高度 Hi&#xff0c;其中Hi是1到N 之间的正 …

怎么判断冠词用a还是an_英文写作常见错误学习笔记 | 冠词

写在前面的话在知乎中看到“英文学术论文写作&#xff0c;有什么好书可以推荐”话题中有人推荐了香港大学出版社Steve Hart写的《English Exposed》一书&#xff0c;从副标题“Common Mistakes Made by Chinese Speakers”可以看出书是针对中国人常犯的错误而写的&#xff0c;作…

工厂模式 构建者模式_实践中的构建者模式

工厂模式 构建者模式我将不深入讨论该模式&#xff0c;因为已经有大量的文章和书籍对此进行了详细的解释。 相反&#xff0c;我将告诉您为什么以及何时应该考虑使用它。 但是&#xff0c;值得一提的是&#xff0c;这种模式与《 四人帮》一书中介绍的模式有些不同。 虽然原始模式…

python 反复访问迭代器iter,反复使用next

python 反复访问迭代器iter&#xff0c;反复使用next test [1, 2, 3]# 定义迭代器 iter_test iter(test)# 使用for循环访问迭代器 # 由于next()只向前走&#xff0c;所以当跌代到test最后一个值3之后&#xff0c;就会爆发异常StopIteration # 这里使用了一个try语句&#xf…

PPT转PDF方法

引用&#xff1a; using Microsoft.Office.Interop.PowerPoint;方法&#xff1a; ///<summary> /// PPT转PDF ///</summary> ///<param name"sourcePath">源文件路径</param> ///<param name"targetPath&qu…

打印容器_3D打印:增材点阵结构在压力容器优化设计中的应用

“增材制造是未来制造业的发展趋势&#xff0c;其优势显而易见&#xff0c;它可以实现传统加工工艺难以制造的设计&#xff0c;比如复杂薄壁结构、点阵结构、一体化结构等。其中&#xff0c;点阵结构作为一种新型的轻量化结构&#xff0c;具有良好的比刚度、比强度等力学性能。…

Java平台模块系统公众审查未能通过

在过去的几周里&#xff0c;Java世界中的戏剧&#xff0c;阴谋和政治活动异常高涨&#xff0c;最终在本周的JSR 376 Java平台模块系统公共评审投票中达到了顶峰。 Java模块化&#xff08;包括Java平台模块系统&#xff08;JPMS&#xff09;&#xff09;可以说是JDK 9最重要的部…

区间素数个数查询

给出一个闭区间的两端l和r&#xff0c;输出[l,r]中素数的个数。 输入格式: 两个整数l和r&#xff0c;之间用空格隔开&#xff08;1<l<r<10000&#xff09;。 输出格式: 输出一个结果。 输入样例: 2 10输出样例: 4 import java.util.Scanner;public class Main {static…

jtabel 遍历_使用抽象表模型获取JTable中选定的行

在下面的示例中&#xff0c;TableModel更新Set checked在执行setValueAt()..相邻模型JList侦听表的模型并显示当前选定的行号。该示例假定所选行数与行数相比较小。注意使用TreeSet&#xff0c;其迭代器保留了元素的自然顺序。import java.awt.Dimension;import java.awt.Event…

neo4j cypher_优化Neo4j Cypher查询

neo4j cypher上周&#xff0c;我花了很多时间来尝试优化大约20个使用实时系统数据执行的灾难性的Cypher查询&#xff08;36866ms至155575ms&#xff09;。 经过一番尝试和错误&#xff0c;以及来自Michael的大量投入&#xff0c;我能够大致确定对查询进行哪些操作才能使它们性能…

Mac--PHP已经开启gd扩展验证码不显示

错误显示&#xff1a;Call to undefined function imagettftext() 原因&#xff1a; mac系统中自带的php的gd库中&#xff0c;缺少对freetype的支持&#xff0c;导致图片无法显示。 解决&#xff1a; 1 下载freetype&#xff0c;安装即可 下载地址&#xff1a;https://download…

cprintdialog预览_怎样用CPrintDialog来实现打印功能

把以下程序段加入你的程序把dc1当作Device Content.就任你打印了.注意别画错地方.自己换页.更绝的是可调用窗口的OnPrint或OnDraw成员函数直接打印.不用你去做行距多少啦!但别忘换页.// 打印// 建立打印对话框对象CPrintDialoghttp://www.gaodaima.com/?p65323怎样用CPrintDia…

容器中Java RAM的使用:不会丢失内存的5大技巧

在本文中&#xff0c;我们希望分享Java内存管理的细节和容器内部的弹性&#xff0c;这些细节乍一看并不明显。 在下面&#xff0c;您将找到要注意的问题列表以及即将发布的JDK版本中的重要更新&#xff0c;以及针对核心痛点的现有解决方法。 我们收集了5个最有趣&#xff0c;最…