流畅chatbot采样

1. introduction

​  这篇博客可以作为chatbot旅程的终点了,前面已经介绍了模型相关的工作,那么做完模型训练以后,剩下的就是生成了。要注意的是,模型生成的内容并不是和训练过程类似的,要想生成流畅且通顺的response还是需要一些额外的处理,这里会介绍一些生成相关的工作,以便让自己训练的模型有用武之地,毕竟,辛辛苦苦做出来的东西,能用且可用才是最让自己有成就感的。

2. 生成方法

2.1 greedy search

 每次预测的时候选择概率最大的那个token,最简单,不过效果比较差。

 采样公式:

w t = a r g m a x w P ( w ∣ w 1 : t − 1 ) 时 间 步 t 采 样 w_{t}=argmax_{w}P(w|w_{1:t-1}) \quad 时间步t采样 wt​=argmaxw​P(w∣w1:t−1​)时间步t采样

采样图示,红线为采样路径

 该方法其实是贪心算法的应用,缺陷在于虽然每个t都取最优值,不过最终得到的句子可能并不是最优的。真实应用的时候产生的response通常质量并不高,比如使用gpt2模型从*“I enjoy walking with my cute dog”开始生成文本,其结果可能是“I enjoy walking with my cute dog, but I’m not sure if I’ll ever be able to walk with my dog. I’m not sure if I’ll ever be able to walk with my dog.”*

2.2 Beam search

 差不多相当于多路greedy search

beam search:保留num_beams路序列,每次从上个num_beams路序列生成下个num_beams路序列,上图为num_beams=2路序列生成过程,生成完成以后从num_beams个序列中根据需要选择适合自己任务的序列。

beam search表现要强于greedy search,不过,它也不是完美的:

  • beam search会消耗更多资源,num_beams越大则资源消耗越大。
  • beam search在生成的序列长度或多或少是可以预测的任务,比如机器翻译等任务重表现很好,不过在生成的序列长度变化非常大的开放类生成任务比如会话或者故事生成中表现并不是太好。
  • Ari Holtzman et al. (2019)等人提出,高质量的人类语言并不遵循下个词的高概率分布。换句话说,作为人类,我们希望生成的文本能给我们带来惊喜,而不是枯燥/可预测的,概率高的句子可能并不是最好的,因为概率最高的句子通常是generic, repetitive, and awkward

模型会给出的文本输出与beam search给出的输出的对比。

2.3 sampling

 要想生成的文本更具surprise,一个很自然的想法就是引入randomness。最简单的sampling即是根据条件概率分布随机取下一个word w t w_{t} wt​,不过,这样做的话基本可以预料到结果不会很理想,因为随机采样到话无法避免选到一个概率很低的word,一旦出现这种情况,由于后续的word要依赖于前面的word,这必然会导致输出的文本变得语义不明,令人费解。

 [Ari Holtzman et al. (2019)将这种现象称之为:an unreliable tail,需要进行truncate处理。

2.4 temperature sampling

 随机的sampling有概率采到tail的无关的词,那么可以通过对softmax引入temperature加以缓解:

P ( x ∣ x 1 : t − 1 ) = e x p ( μ t / t ) ∑ t ′ e x p ( μ t ′ / t ) t ∈ [ 0 , 1 ) P(x|x_{1:t-1})=\frac {exp(\mu _{t}/t)}{\sum_{t^{'}}exp(\mu_{t^{'}}/t)}\quad t \in[0,1) P(x∣x1:t−1​)=∑t′​exp(μt′​/t)exp(μt​/t)​t∈[0,1)

 考虑到softmax函数的特性可知,当temperature t<1的时候,新的概率分布是变的比较sharp的,也就是大的更大,小的更小,符合马太效应,这时候模型就会有更高的概率选择高频词,而忽略低频词。

 另外注意,对该供水,当 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EI8fPtkk-1632812985646)(https://www.zhihu.com/equation?tex=t+%5Crightarrow+0)] 时,就变成了greedy decoding;当 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gVMZ4QHO-1632812985648)(https://www.zhihu.com/equation?tex=t%5Crightarrow+%5Cinfty)] 时,就变成了uniform sampling。这样通过调整t的大小,就可以缓解(而不是解决)sampling from tail distribution

2.5 Top-K sampling

Facebook于2018年提出的算法,本来是用于辅助他们的seq2seq模型的,不过可以泛化到其他模型中去。

 其思路非常简单,不过效果却更好。其做法是在选取下一个token的时候,选取概率最高的ktokens,然后做归一化得到新的概率分布 P ′ P^{'} P′,然后以 P ′ P^{'} P′从ktokens中随机选取。

 这种方法存在的问题是,k需要事先确定,而由于概率分布是多样的,同样的k在某个概率分布下加和可能比较大,比如达到0.8,而在有的概率分布下可能只有0.6,加和不大的情况可能导致我们漏选了后面的许多token,缺乏灵活性。

固定的k无法动态适应概率分布变化较大的情况

 如上图所示,设k=10,第一句话*"She said, 'I never"后面可以跟的选项能有很大的diversity*,此时10个tokens或许不足以包含全部可能的选择;而第二句话*"I ate the pizza while it was still"后面可以跟的选项则不能有太大的diversity*,否则会使得整个句子含义表达错乱,此时10个tokens就变得过多了,会让模型陷入sample from tail distribution的风险。

2.6 Top-P sampling

 针对top-k的问题的改进算法,保证选取的tokens的概率加和 > = >= >=一个实现设定的常数概率阈值: p ′ ∈ ( 0 , 1 ) p^{'}\in(0,1) p′∈(0,1),这种处理方式可以比较好的动态适应不同的概率分布情况。

 transformers库中top-k和top-p不是互斥的,可以结合使用。

 不过注意,top-k与top-p的引进毕竟也会导致超参数,所以也需要精细调节,不然采样的效果也不怎么样,实践中一般top-k与top-p不结合使用,常用的是top-k=0, top-p=0.9,如果设置有温度概念,常用的temperature=0.7

3.conclusion

 目前来说,top-p sampleing是最好的,不过不排除未来会出现更好的采样算法,另外就是有研究表明top类算法也会产生重复,这个需要自己结合自己的项目去验证了。

流畅chatbot采样相关推荐

  1. 多重采样和超级采样哪个流畅_测试之前你需要做这些功课

    本文约3568字,需6分钟阅读(全文浏览) 如果让你在脑海里以进化的视野回望过去历史的长河中游戏的画面是如何从拙劣慢慢进化到目前的精细,相信大家都有自己的一套历史观,首先当然是随着分辨率的提高.硬件的 ...

  2. 多重采样和超级采样哪个流畅_OpenGL多重采样:结果与未使用多重采样时的结果相同...

    在QT框架中使用OpenGL(版本330)多重采样 . 渲染图像就像星形 . 我使用片段着色器在黑色画布上渲染形状强度 . 我不使用OpenGL原语 . 当不使用多重采样时,并且当渲染输出画布具有较小 ...

  3. 多重采样和超级采样哪个流畅_蒙特卡洛方法-多重采样

    全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...

  4. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 头文件与静态库拷贝到 Android Studio 二. CMakeList.txt 构建脚本配置 三. Java 层 AudioRecord 音频 ...

  5. 人一样自然流畅地说话,下一代智能对话系统还有多长的路要走?

    为了推动 AI 技术的应用创新,促进人工智能领域的学术交流.人才培养,打造人工智能的人才交流平台与产业生态圈,中国人工智能学会联合杭州市余杭区人民政府联合发起了首届全球人工智能技术创新大赛,并得到了阿 ...

  6. ​搜出来的文本:从文本生成到搜索采样

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 最近,笔者入了一个新坑:基于离散优化的思想做一些文本生成任务.简单来说,就是把我们要生成文本的目标量化地写 ...

  7. 采样算法哪家强?一个针对主流采样算法的比较

    论文标题: A Systematic Characterization of Sampling Algorithms for Open-ended Language Generation 论文作者: ...

  8. 实车采集的数据重建场景_避障、探测、采样......华理这套系统让无人小车“身手非凡”...

    原标题:避障.探测.采样......华理这套系统让无人小车"身手非凡" 无论是坑洼不平.灌木丛生的荒地,还是土丘遍布的山坡,抑或是突发爆炸毒害未知的灾后现场,只要装备上这套系统,无 ...

  9. 像人一样自然流畅地说话,下一代智能对话系统还有多长的路要走?

    来源:机器之心 机器之心编辑部 作为人工智能的一个子领域,自然语言处理(NLP)指的是机器理解并解释人类书面语和口语的能力,目的在于使计算机像人类一样智能地理解语言和用语言表达,弥补人类交流(自然语言 ...

最新文章

  1. influxDB+grafana 日志监控平台(Golang)
  2. HDU 6044 Limited Permutation(2017多校)【计数 快速读入挂 线性逆元】
  3. python 等比例缩放图片 自写
  4. OpenCV霍夫圈检测Hough Circle Detection的实例(附完整代码)
  5. Navicat for MySQL在ubuntu下运行没有反应
  6. JDBC连接数据库的8个步骤
  7. ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器
  8. python基础网易_看看你的Python基础怎么样?
  9. Doc命令之 cd,(跳转到别的盘符)。
  10. 自学python后自己接单-自学python后,可以自己独立做什么事情来挣钱吗?
  11. ServletConfig讲解
  12. NSString Unicode
  13. 全国计算机二级公共基础知识电子版,全国计算机二级公共基础知识汇总.pdf
  14. Stata12文件转码为Stata15格式解决办法
  15. 构建自己的Conficker
  16. 服务器显示raid报警,Raid为什么会出现故障?RAID/服务器恢复
  17. python还款程序_python 之简单模拟银行系统功能(卡号申请、还款、支付、取现)...
  18. Matlab中矩阵的右上角有一撇表示什么意思
  19. Distractor-aware Siamese Networks for Visual Object Tracking 论文学习
  20. 解决Hyperledger Fabric通道重复创建问题( readset expected key [Group] /Channel/Application at version 0, but )

热门文章

  1. mycat 常用分片规则使用详解
  2. 离线数仓-01-项目介绍和用户行为数据采集
  3. 自动化测试与自动化测试生命周期
  4. html5行高有什么用,css行高line-height的一些深入理解及应用
  5. 从郭靖夫妇之死想到的(转载
  6. python turtle 太极八卦图
  7. 假设有一条绳子长3000m,每天剪去一半,请问需要几天时间,绳子的长度会短于五米?
  8. 2019年一月十日 Mixin Network 资产持有量快照
  9. 没有了老师,该如何学习?
  10. css 针对ie6 hank 兼容的终极解决办法