这篇文章主要介绍了pytorch如何实现beam search,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在机器学习中经常用到一种搜索算法——束搜索算法,又叫beam search 算法,他是贪心算法的一种优化实现。使用类似层次遍历的方式进行搜索,用队列进行维护,每次循环对当前层的所有节点进行搜索,这些节点每个分别对应topk个节点作为下一层候选节点,取所有候选节点的前tok个作为下一层节点加入队列bfs with width constraint. 启发式搜索的一种. 属于贪心算法. 如果k -> inf,那么等价于bfs.从根节点开始(),选取所有可能(大概几万个)里面概率最大的k个,拓展为下一层节点.然后在这k个节点里面,其可能拓展的所有节点中(一般是k * 几万个),再选取概率最大的k个(注意这里的概率是累乘,即从根节点到该节点的概率乘积)拓展. 这里拓展的k个子节点,其父节点可以是上一层的k个,也可以只是其中一部分,甚至全部出自其中一个节点. 以此类推.这样形成的是一棵每层都是k个节点树(除了根节点、末尾,和候选者不足k个的情况).一般概率取log,避免值过小. 选取概率最大的三个, “i”: 0.6, “he”: 0.4. 其他单词忽略不计拓展一共有4个 (1)“i”后面接,假设概率最大的是”love”: 0.7, “like”: 0.3 其他单词忽略不计(2)“he”后面接:假设概率最大的是”hates”: 0.9, “loves”: 0.1 其他单词忽略不计; 这样4免费云主机域名种可能中,到这里 “i love”概率是0.6 * 0.7 = 0.42, “i like”概率是0.6 * 0.3 = 0.18, “he hates”概率是0.4 * 0.9 = 0.36, “he loves”概率是0.4 * 0.1 = 0.04; 选取概率最大的两个,“i love”和”he hates”.下一层拓展仍为4个 (1) “i love”后面接 ,假设概率最大是 “you”:0.9, 其他单词加起来0.1;(2)“he hates”后面接,假设概率最大的是”her”:0.8, “himself”:0.1, 其他单词加起来0.1; 那么”i love you”概率为 0.42 * 0.9 = 0.378; “he hates her”概率为0.36*0.8 = 0.228,其他不用算了都小于这个值. 最后也选取2个概率最大的: “i love you”和 “he hates her”下一层拓展, “i love you”应该拓展两个子节点,发现””概率0.99,其他单词加起来0.01;“he hates her”应该拓展两个子节点,发现””概率0.99,其他单词加起来0.01;所以概率最大的是”i love you “和”he hates you “. 因两个分支均遇到,均结束搜索.最后在两个当中选择概率最大的 “i love you “. 结束代码是从一个项目中截取的,只选取了关键内容,pytorch实现:不进行层次遍历,而是每次从整个队列中拿出概率最大的节点出队(优先队列)进行搜索,将该节点的topk加入优先队列,循环终止的条件是节点所在位置对应长度达到限制或队列节点个数超过限制补充:beam search 简单例子实现及讲解每次循环sequences的值[[[4], 0.6931471805599453], [[3], 0.916290731874155], [[2], 1.2039728043259361]][[[4, 0], 0.4804530139182014], [[4, 1], 0.6351243373717793], [[3, 0], 0.6351243373717793]][[[4, 0, 4], 0.33302465198892944], [[4, 0, 3], 0.4402346437542523], [[4, 1, 4], 0.4402346437542523]]最终print的结果[[4, 0, 4, 0, 4, 0, 4, 0, 4, 0], 0.025600863289563108][[4, 0, 4, 0, 4, 0, 4, 0, 4, 1], 0.03384250043584397][[4, 0, 4, 0, 4, 0, 4, 0, 3, 0], 0.03384250043584397]感谢你能够认真阅读完这篇文章,希望小编分享的“pytorch如何实现beam search”这篇文章对大家有帮助,同时也希望大家多多支持百云主机,关注百云主机行业资讯频道,更多相关知识等着你来学习!
相关推荐: 微信小程序View:flex布局的方法
这篇文章主要讲解了“微信小程序View:flex布局的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序View:flex布局的方法”吧! 微信小程序 View 支持两种布局方式:Block 和 Fl…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。