NLP(一)文本生成 --Sampling问题

文本生成原理 --Sampling问题

我们在做seq predcition时,需要根据假设模型每个时刻softmax的输出概率来sample单词,合适的sample方法可能会获得更有效的结果

1. Greedy Decoding

1.1 Greedy Search

核心思想: 每一步取当前最可能的结果,作为最终结果
具体方法:
获得新生成的词是vocab中各个词的概率,取argmax作为需要生成的词向量索引,继而生成后一个词

1.2 Beam Search

核心思想: beam search尝试在广度优先基础上进行进行搜索空间的优化(类似于剪枝)达到减少内存消耗的目的
具体方法:
在decoding的每个步骤,我们都保留着 top K 个可能的候选单词,然后到了下一个步骤的时候,我们对这 K 个单词都做下一步 decoding,分别选出 top K,然后对这 K^2 个候选句子再挑选出 top K 个句子。以此类推一直到 decoding 结束为止。当然 Beam Search 本质上也是一个 greedy decoding 的方法,所以我们无法保证自己一定可以得到最好的 decoding 结果

1.3 Greedy Decoding与Beam Search存在问题

①容易出现很无聊的回答:I don’t know.
②容易重复自己:I don’t know. I don’t know. I don’t know. I don’t know. I don’t know. I don’t know.

2. Sampling引入随机性

核心思想: 根据单词的概率分布随机采样

2.1 随机Sampling(vocab(yi))

我们可以在生成文本的时候引入一些随机性。例如现在语言模型告诉我们下一个单词在整个单词表上的概率分布是 p = (p_1, p_2, … p_|V|),那么我们就可以按照这个概率分布进行随机采样,然后决定下一个单词生成什么。采样相对于greedy方法的好处是,我们生成的文字开始有了一些随机性,不会总是生成很机械的回复了

2.2 随机Sampling存在问题

①生成的话容易不连贯,上下文比较矛盾。
②容易生成奇怪的话,出现罕见词。

2.3 top-k sampling

可以缓解生成罕见单词的问题。比如说,我们可以每次只在概率最高的50个单词中按照概率分布做采样
我只保留top-k个probability的单词,然后在这些单词中根据概率做sampling

2.4 Neucleus Sampling

Neucleus Sampling的基本思想是,top p sampling,例如设置一个threshold,p=0.95

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值