Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #5544

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 11月 10, 2017 by saxon_zh@saxon_zhGuest

Paddle现有代码中BeamSearch中的一些细节/智慧

Created by: lcy-seso

今天和之前合作的同学讨论一个问题:如何通过策略在不修改代码情况下,非常简单地便可以控制生成长度。

第一次清晰地意识到 Paddle 目前BeamSearch代码实现的两个细节有着一定的好处(我之前从来没有特别地意识到这种好处),所以简单记录一下这两个细节,供参考。

这些细节在程序层面都只是简单的if else 判断,但在过去我做过诸多和beam search相关的任务中,对实际的生成质量都有着非常有效的改善,前人的经验和智慧供参考,经验也是可以被code~


BeamSearch 会遇到的一个难题:

  • beam size 越大,越容易搜索到<e>,短序列的 logProb 更高
  • 通过 logProb 对生成结果排序,选择 top 1,对长度有 bias

paddle beam search 的2个细节:beam search 会产生多于 beam size 个结果

在beamSearch 的过程中,一旦生成出终止符<e>,会得到一个完整的路径,否则是一个partial path

  1. 删除短路径

    • 在beam search没有结束之前,当前一轮的展开可能会由于搜索到 <e>,生成出若干个完整的路径
    • 这时候,还会维护至多 beam_size * beam_size 个 partial paths
    • 取 partial paths 的 log probabilty 的最小值记作: $p1$ (最差的路径)
    • 如果一条完整路径的 log prob 比 $p1$ 小,这条完整的路径,不会保留,会删被掉
  2. 直到再也无法生成更好的结果,才终止 beam seach

    • 没有超过配置里面设置的 max 迭代次数时,已经得到了 beam size 个最终路径,beam search 仍然不会结束
    • 始终维护一个所有完整路径 log prob 的最小值,记作 :min_prob 。
    • 每一轮展开,只要有完整路径生成都会走上面第1条的逻辑,接下来:
      • 取 partial paths 的 logProb 的最大值,记作 max_prob 。
      • 满足:min_prob (已经生成的完整路径中的最差路径) >= max_prob(未生成完的partial paths 中的最好路径) 时,才结束beam search

上面2点逻辑上的作用是这样:

  • 关于1:

    • 如果已经生产了一个完整的路径,但如果这个路径,比还没有彻底生成完的 partial path 还差,这个生成结果被删掉
    • 实际上,这些可能更好的、没有彻底生成完的路径,经过后续更多步的迭代,最终生成的完整路径会更长,更长路径的logProb 很可能会比之前删掉的那条完整路径还低(路径更差)
    • 但是,如果不进行(1)会由于生成短路径,提前结束beam search。
  • 关于2点:

    • 在所有完整路径里面的最差的路径,比还没有完全生成的路径里面最好的结果,还要好,才结束beam search
    • 这时候,再也不会生成出更好的完整路径了
指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#5544
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7