在Seq2Seq模型生成文本的decoder端,假设处于第t步,则生成的结果依赖于encoder端对输入句子的向量hidden state和先前生成的t-1个字;我们会得到一个第t个字的向量,然后通过softmax的方式得到该步时的整个vocabulary的概率分布。当前字到底生成候选词典(vocab)中的哪一个,需要一定的策略,显然遍历的复杂度较高,如何选取也会影响生成文本的质量,一些常见的优化方法如下。

一、贪心搜索
即第t+1时间步取一个词使得第1步到第t+1的概率最大,然后依次进行递进搜索。例如下图,每一个时间步都取出对应使得概率最大的词(可以联系语言模型的定义),生成了序列[A,B,C]

二、Beam Search
又称集束搜索,Beam Search(集束搜索)是一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。这样减少了空间消耗,并提高了时间效率,但缺点就是有可能存在潜在的最佳方案被丢弃,因此Beam Search算法是不完全的,一般用于解空间较大的系统中。

相对贪心策略绝大的搜索空间,我们每次选制定的个数,num_beams个;num_beams=1时集束搜索就退化成了贪心搜索;num_beams=2,即,每个时间步都会保留到当前步为止条件概率最优的2个序列。然后依次往前递推;

如下图所示,假设字典vocab是之含有A,B,C,D,E的大小为5的字典;第一步有两个候选 A,C概率最高先被选出;第二步有AA,AB,AC,AD,AE,CA,CB,…,CD,CE共10种可能,依然只选概率最高的两种,如下图是AB,CE被选出,因为这两个概率最高


三、随机采样
虽然Beam Search优化了空间效率,高效的选取了一些结点,但还是容易生成重复、无意义的文本,这点在做实验中比较容易遇到。目前提出了随机采样(sampling)的做法对Beam Search做出一些改进;候选字有一定的概率分布,通过一些策略提高生成文本的质量。比较常见的做法如下:

1.Temperature Sampling

在softmax计算过程中引入温度参数 t来改变vocabulary probability distribution,使其更偏向high probability words
P(x∣x1:t−1)=exp(ut/t)∑t′exp(ut′/t))P(x|x_{1:t-1})=\frac{exp(u_{t}/t)}{\sum _{{t}'}exp(u_{{t}'}/t))}P(x∣x1:t−1​)=∑t′​exp(ut′​/t))exp(ut​/t)​,其中t的取值在[0,1)之间。

2.Top-k 采样
在解码过程中从 P(x∣x1:i−1)P(x|x_{1:i-1})P(x∣x1:i−1​)分布中,取概率最高的k个tokens,将其概率求和记为sum-topk。概率重新分布转化如下:上述这k个tokens分别除以概率和sum-topk得到各自新的概率,其余token概率变为0。Top-k Sampling存在的问题是,常数k是给定的值,k设置过小则会容易生成更平淡或泛的句子。当k很大的时候,候选集合会包含一些不合适的token。下面的核采样方法则会有更动态的选取策略。

3.NUCLEUS SAMPLING 方法,或记为Top-p方法
主要的想法根据概率的分布来决定一个可以用来被采样的token集合。给定所有候选tokenx的分布 P(x∣x1:i−1)P(x|x_{1:i-1})P(x∣x1:i−1​),这样的满足top-p条件的集合V(p)⊂VV^{(p)}\subset VV(p)⊂V。
sumx∈V(p)P(x∣x1:i−1)≥psum_{x\in V^{(p)}}P(x|x_{1:i-1})\geq psumx∈V(p)​P(x∣x1:i−1​)≥p

让p′=sumx∈V(p)P(x∣x1:i−1)≥pp'=sum_{x\in V^{(p)}}P(x|x_{1:i-1})\geq pp′=sumx∈V(p)​P(x∣x1:i−1​)≥p,原始的分布重新计算转化到一个新的分布如下,可以看到不在候选集里的直接概率为0,屏蔽掉了,在候选集里 的要除以这个和p’。
P′(x∣x1:i−1)={P(x∣x1:i−1)/p′ifx∈V(p)0othersizeP'(x|x_{1:i-1})=\left\{\begin{matrix} P(x|x_{1:i-1})/p'&if x\in V^{(p)}\\ 0 & othersize \end{matrix}\right.P′(x∣x1:i−1​)={P(x∣x1:i−1​)/p′0​ifx∈V(p)othersize​

参考链接

[1]https://blog.csdn.net/hecongqing/article/details/105040105?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
[2]https://zhuanlan.zhihu.com/p/68383015
[3]The Curious Case of Neural Text Degeneration(https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1904.09751)

文本生成解码策略笔记-常见解码策略相关推荐

  1. 文本生成图像简述4——扩散模型、自回归模型、生成对抗网络的对比调研

    基于近年来图像处理和语言理解方面的技术突破,融合图像和文本处理的多模态任务获得了广泛的关注并取得了显著成功. 文本生成图像(text-to-image)是图像和文本处理的多模态任务的一项子任务,其根据 ...

  2. 文本生成中的OOV问题

    oov问题是文本生成任务中很常见的现象,oov问题是怎么产生的呢? Vocab 首先,我们在做文本生成的时候,都要先定义一个vocab语料库,这个语料库可能是在训练集中经过分词构建的,可能是这个模型自 ...

  3. 搜索,然后学习:两阶段的无监督文本生成

    论文标题: Unsupervised Text Generation by Learning from Search 论文作者: Jingjing Li, Zichao Li, Lili Mou, X ...

  4. 浅谈文本生成或者文本翻译解码策略《转》

    原文链接,感谢原作者 目录 一.文本生成和翻译的基本流程 翻译类模型的训练和解码 训练过程 解码过程 生成类模型的训练和解码(GPT系列) 训练过程 解码过程 二.解码策略 1.贪心搜索(greedy ...

  5. 浅谈文本生成或者文本翻译解码策略

    目录 一.文本生成和翻译的基本流程 翻译类模型的训练和解码 训练过程 解码过程 生成类模型的训练和解码(GPT系列) 训练过程 解码过程 二.解码策略 1.贪心搜索(greedy search) 2. ...

  6. 【自然语言处理】【文本生成】Transformers中用于语言生成的不同解码方法

    Transformers中用于语言生成的不同解码方法 原文地址:https://huggingface.co/blog/how-to-generate 相关博客 [自然语言处理][ChatGPT系列] ...

  7. 我的Android进阶之旅------gt;Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  8. Qt 5.12学习笔记--QML性能策略

    Qt 5.12学习笔记--QML性能策略 1 简介 2 时间因素 2 性能分析 3 JavaScript 部分 4 绑定 5 类型转换 6 解析属性 6 属性绑定 7 序列提示(Sequence ti ...

  9. 编解码学习笔记(基础)

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  10. 【NLP笔记】文本生成?还不快上知识库

    来自 | 知乎 地址 | https://zhuanlan.zhihu.com/p/163343976 作者 | 三和厂妹 编辑 | 机器学习算法与自然语言处理公众号 本文已获得作者授权,未经许可禁止 ...

最新文章

  1. poj1195(二维树状数组)
  2. 独家 | 机器学习模型应用方法综述
  3. 深挖之后吓一跳,谷歌AI专利何止一个dropout,至少30项今日生效
  4. Android ConstraintLayout约束布局的理解与使用
  5. 【项目实战】P2P金融数据指标分析
  6. 理解单片机系统—汇编语言
  7. laravel 调试mysql_Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)...
  8. leetcode 153. 寻找旋转排序数组中的最小值(二分查找)
  9. 【BZOJ1563】【NOI2009】—诗人小G(决策二分栈优化dp)
  10. respond是空的_httpClient 获取response 中的 content 为空的原因(急求)
  11. VB.NET外部程序调用总结下
  12. win10系统安装jdk8全过程
  13. C语言-判断上三角矩阵
  14. 信息学奥赛与大学计算机课程,为什么要学信息学奥赛(NOIP)
  15. 车联网信息服务数据——采集合规性——行业标准解读
  16. 2.shel脚本l知识点学习一
  17. java导出word纸张方向_java导出word的几种方式
  18. discuz X2数据字典
  19. matlab int double类型,( ) 一个 int 型与一个 double 型数据进行混合运算时,其结果是 double 型。...
  20. 电子科大计算机学院郑欣,我校研究生在“华为杯”第十六届中国研究生数学建模竞赛中获佳绩...

热门文章

  1. 虚继承 - C++快速入门29
  2. Oracle基本数据标准存储样式浅析(二)——数字标准
  3. 浏览器渲染页面的原理及流程---------重绘与重排(回流)--优化
  4. CentOS下安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64
  5. Android相机基础基于camera2API
  6. 浅入浅出数据结构(23)——图的概念、存储方式与拓扑排序
  7. 【转】 Android Performance Case Study(安卓绘图性能案例研究)
  8. 那些年,我们一起玩过的响应式布局
  9. solr学习笔记-linux下配置solr
  10. 091118 T 数组的继承