TopkToppSamplingOperation
功能
依据给定的词表概率以及top-k、top-p,从词表概率中选取前k个作为候选,然后选取概率高于top-p的词表按照TopkToppSamplingType的值采取不同的后处理策略,最后选择最合适的词序号以及对应的概率作为输出。
Top-k取样:从tokens里选取k个作为候选,然后根据它们的"likelihood scores"来采样模型从最有可能的k个选项中随机选择一个。
Top-p取样:从tokens里选取累计概率大于或等于概率p的最小集合作为候选,然后随机选择一个。
定义
struct TopkToppSamplingParam { enum TopkToppSamplingType { SAMPLING_UNDEFINED = -1, SINGLE_TOPK_SAMPLING, BATCH_TOPK_MULTINOMIAL_SAMPLING, BATCH_TOPK_EXPONENTIAL_SAMPLING, SAMPLING_MAX, }; TopkToppSamplingType topkToppSamplingType = SINGLE_TOPK_SAMPLING; uint32_t randSeed = 0; uint32_t topk = 100; std::vector<uint32_t> randSeeds; };
参数列表
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
topkToppSamplingType |
TopkToppSamplingType |
SINGLE_TOPK_SAMPLING |
取样处理类型。
|
randSeed |
uint32_t |
0 |
top-p阶段随机抽样使用的随机数种子,默认值为0。当topktoppSamplingtype = SINGLE_TOPK_SAMPLING时使用。 |
topk |
uint32_t |
100 |
top-k阶段保留的词的个数,需要小于词表的词数,默认值为100。top-k必须大于0且小于或等于输入probs最后一维的大小。当topktoppSamplingtype = SINGLE_TOPK_SAMPLING时使用。 |
randSeeds |
std::vector<uint32_t> |
- |
每个batch下top-p阶段随机抽样使用的随机数种子。维度与batch大小一致。当topktoppSamplingtype = BATCH_TOPK_MULTINOMIAL_SAMPLING时使用。 |
输入输出
- topkToppSamplingType = SINGLE_TOPK_SAMPLING(非batch级随机种子、topk取样)
参数
维度
数据类型
格式
描述
probs
[batch, voc_size]
float16
ND
输入,词表概率。
topp
[batch, 1]
float16
ND
输入topp,topp截取的概率,batch的值需与probs的一致。
sampled_indices
[batch, 1]
int32
ND
输出,取样的idx。
sampled_probs
[batch, 1]
float16
ND
输出,取样的值。
- topkToppSamplingType = BATCH_TOPK_MULTINOMIAL_SAMPLING(batch级随机种子,topk的multinomial取样)
参数
维度
数据类型
格式
描述
probs
[batch, voc_size]
float16
ND
输入,词表概率。
topk
[batch, 1]
int32
ND
输入,topk截取的位置,batch的值需与probs的一致。
topp
[batch, 1]
float16
ND
输入,topp截取的概率,batch的值需与probs的一致。
sampled_indices
[batch, 1]
int32
ND
输出,取样的idx。
sampled_probs
[batch, 1]
float16
ND
输出,取样的值。
- topkToppSamplingType = BATCH_TOPK_EXPONENTIAL_SAMPLING(batch级随机种子,topk的Exponential取样)
参数
维度
数据类型
格式
描述
probs
[batch, voc_size]
float16
ND
输入,词表概率。
topk
[batch, 1]
float16
ND
输入,topk截取的位置,batch的值需与probs的一致。
topp
[batch, 1]
float16
ND
输入,topp截取的概率,batch的值需与probs的一致。
exp
[batch, voc_size]
float16
ND
输入,所除的指数分布,维度需与probs的一致。
sampled_indices
[batch, 1]
int32
ND
输出,取样的idx。
sampled_probs
[batch, 1]
float16
ND
输出,取样的值。
功能列表
- 非batch级随机种子、topk取样
使用单一的randSeed和topk,对输入的词表概率的所有batch使用统一的topk值进行截取,再对截取后的词表概率的所有batch使用统一的randSeed进行topp取样。
- 使用的参数
topkToppSamplingType = SINGLE_TOPK_SAMPLING、topk、randSeed
- 流程图
图1 非batch级随机种子topk取样流程图
- 使用的参数
- batch级别随机种子、topk的multinomial取样
对于词表概率的每一个batch使用不同的topk进行截取,再对截取后的词表概率的每个batch使用不同的随机种子进行topp的multinomial取样。
- 使用的参数
topkToppSamplingType = BATCH_TOPK_MULTINOMIAL_SAMPLING、randSeeds
- 流程图
图2 batch级别随机种子topk的multinomial取样流程图
- 使用的参数
- batch级随机种子,topk的Exponential取样
对于词表概率的每一个batch使用不同的topk进行截取,再对截取后的词表概率的每个batch使用不同的随机种子进行topp的exponential取样。
- 使用的参数
topkToppSamplingType = BATCH_TOPK_EXPONENTIAL_SAMPLING
- 流程图
图3 batch级别随机种子topk的Exponential取样流程图
- 使用的参数
规格约束
probs必须是是两维张量。