- 简单来说,generate就是封装好的自回归生成函数,其会调用指定次的forward,用来以自回归的方式生成输出;但是注意,generate只能用于推理,不能用于训练,在训练过程中应该使用forward
- generate和forward的区别
- 怎么利用forward函数模仿实现generate函数的功能
- 详细介绍generate函数的参数设置,如解码方式里的greedy search、beam search、top-k sample、top-p sample等的详细介绍
- greedy search 贪心搜索
- 每次选择概率最大的vacab id作为当前token的值
- beam search 波束搜索
- 每次储存beam个概率最大的vacab id,并在结束生成时选择所有路径中累积概率最大的路径作为最终生成
- top-k sample
- 把greedy search和beam search的确定性选取输出的操作转变为基于概率分布的采样操作,选出概率最高的k个vocab id,然后把它们的概率重新归一化,之后在这个概率分布中随机采样
- 这样模型输出的随机性和创造性会更好,能够产生一些让人感觉富有insight的输出
- top-p sample
- 把top-k里固定取k个概率最高的vocab id的操作变成从概率最高的vocab id开始取,直到取到当前vocab id时,累积概率超过预设值p
- 相比于top-k sample,top-p sample可以保证采样分布里的vocab id数量动态调整,只采样那些概率较大的vocab id
- generate函数手册