TopkToppSamplingOperation

功能

依据给定的词表概率以及top-k、top-p,从词表概率中选取前k个作为候选,然后选取概率高于top-p的词表按照TopkToppSamplingType的值采取不同的后处理策略,最后选择最合适的词序号以及对应的概率作为输出。

Top-k取样:从tokens里选取k个作为候选,然后根据它们的"likelihood scores"来采样模型从最有可能的k个选项中随机选择一个。

Top-p取样:从tokens里选取累计概率大于或等于概率p的最小集合作为候选,然后随机选择一个。

定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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;
    uint8_t rsv[16] = {0};
};

参数列表

成员名称

类型

默认值

描述

topkToppSamplingType

TopkToppSamplingType

SINGLE_TOPK_SAMPLING

取样处理类型。

  • SAMPLING_UNDEFINED:未定义,不作为取样处理类型。
  • SINGLE_TOPK_SAMPLING: 非batch级别随机种子、top-k。BATCH_TOPK_MULTINOMIAL_SAMPLING: batch级别随机种子、top-k的multinomial取样。
  • BATCH_TOPK_EXPONENTIAL_SAMPLING: batch级别随机种子,top-k的exponential取样。
  • SAMPLING_MAX: 枚举最大值,不作为取样处理类型。

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时使用。

rsv[16]

uint8_t

{0}

预留参数。

输入输出

规格约束

probs必须是是两维张量。

功能列表