参考文章:
Top-K vs Top-P:生成式模型中的采样策略与 Temperature 的影响-优快云博客
在生成文本时,模型为每个可能的下一个词汇分配一个概率分布,选择下一个词汇的策略直接决定了输出的质量和多样性。以下是几种常见的选择方法:
Greedy Search(贪心搜索): 每次选择概率最高的词汇。
Beam Search(束搜索): 保留多个候选序列,平衡生成质量和多样性。
Top-K 采样: 限制候选词汇数量。
Top-P 采样(Nucleus Sampling): 根据累积概率选择候选词汇,动态调整词汇集。原理见上面的参考文章
在文本生成中,当同时设置 top-p、top-k 和 温度系数 并与 束搜索(beam search) 结合时,这些参数会按照分层过滤的方式协同工作。以下是它们的具体作用机制和交互流程:
一、核心参数的作用层级
-
温度系数(Temperature)
-
最先应用:调整模型原始输出的 logits 分布形状
-
公式:
-
效果:
-
T<1:锐化分布(偏向高概率token)
-
T>1:平滑分布(增加多样性)
-
-
-
top-k
-
第二层过滤:保留概率最高的 k 个候选
-
操作:
probs = [0.4, 0.3, 0.15, 0.1, 0.05] topk_probs = [0.4, 0.3, 0.15] # 假设k=3
-
-
top-p (nucleus sampling)
-
最后一层过滤:从 top-k 结果中选取累积概率≥p的最小集合
-
操作:
sorted_probs = sorted([0.4, 0.3, 0.15], reverse=True) cumulative = [0.4, 0.7, 0.85] # 假设p=0.8 filtered = [0.4, 0.3] # 0.4+0.3=0.7<0.8 → 再加0.15达到0.85
-
-
束搜索(Beam Search)
-
最终序列选择:在过滤后的候选集上维护多条高概率路径
-
每步保留得分最高的 B 个序列(B=束宽)
-
二、参数交互规则
-
优先级顺序:
温度调整 → top-k → top-p → 束搜索-
先调整分布形状,再逐步缩小候选范围
-
-
冲突处理:
-
若
top-k与top-p同时设置,实际候选集是两者的交集:candidates = top_k( temperature_adjusted_probs, k ) candidates = top_p( candidates, p ) # 对top-k结果再过滤
-
极端情况:当
top-k的候选累积概率已满足top-p时,top-p不进一步过滤
-
-
束搜索的特殊性:
-
即使经过采样过滤,束搜索仍会维护多条路径(束宽B)
-
每条路径独立进行
top-k/p采样
-
top-p采样过程
1. 关键点
-
候选集(nucleus):通过累计概率 ≥
p动态筛选出的token集合。 -
概率权重:候选集内的token保持原始概率的相对比例,但会重新归一化(总和=1)。
-
随机采样:根据重新归一化的概率分布,按概率随机选择1个token(不是直接选最高概率的)。
2. 具体选择步骤
假设概率分布(p=0.9)
| Token | 原始概率 |
|---|---|
| A | 0.5 |
| B | 0.3 |
| C | 0.1 |
| D | 0.05 |
| E | 0.05 |
-
排序并累计概率:
-
排序:
A(0.5) → B(0.3) → C(0.1) → D(0.05) → E(0.05) -
累计:
A(0.5) + B(0.3) + C(0.1) = 0.9(达到p=0.9)。 -
候选集:
{A, B, C}。
-
-
重新归一化概率:
-
总和 =
0.5 + 0.3 + 0.1 = 0.9。 -
重新计算:
-
A: 0.5 / 0.9 ≈ 0.555 -
B: 0.3 / 0.9 ≈ 0.333 -
C: 0.1 / 0.9 ≈ 0.111。
-
-
-
按概率随机采样1个token:
-
生成一个随机数
r ∈ [0, 1),根据概率区间选择:-
若
r < 0.555→ 选A; -
若
0.555 ≤ r < 0.555+0.333→ 选B; -
否则 → 选
C。
-
-
3. 为什么是随机采样(而非选最高概率)?
-
目的:保持生成多样性。如果总是选最高概率(贪婪采样),文本会过于保守和重复。
-
对比:
-
贪婪采样:确定性,每次选
argmax(固定输出)。 -
top-p采样:随机性,按概率选择(动态调整多样性)。
-
4. 极端情况
-
候选集仅1个token(例如
p很小,或某个token概率极高):-
直接选择该token(退化为贪婪采样)。
-
-
候选集=全部token(
p=1.0):-
按原始概率分布采样(完全随机,可能不连贯)。
-
top-k采样过程
1. top-k采样的步骤
核心思想
固定选择概率最高的 k 个token作为候选集,然后按它们的原始概率(重新归一化后)随机采样1个token。
具体流程
-
排序概率:对所有token按概率从高到低排序。
-
选择top-k:保留前
k个概率最高的token,其余丢弃。 -
重新归一化:对这
k个token的概率重新归一化(使它们的概率之和=1)。 -
随机采样:按归一化后的概率分布随机选择1个token。
举例
假设词汇表概率分布和 k=3:
| Token | 原始概率 |
|---|---|
| A | 0.5 |
| B | 0.3 |
| C | 0.1 |
| D | 0.05 |
| E | 0.05 |
-
步骤1-2:候选集 =
{A, B, C}(原始概率和=0.5+0.3+0.1=0.9)。 -
步骤3:重新归一化:
-
A: 0.5/0.9 ≈ 0.555 -
B: 0.3/0.9 ≈ 0.333 -
C: 0.1/0.9 ≈ 0.111
-
-
步骤4:按
[0.555, 0.333, 0.111]的概率随机选1个token。
2. top-k vs. top-p的关键区别
| 特性 | top-k采样 | top-p采样 |
|---|---|---|
| 候选集大小 | 固定 k 个token | 动态选择累计概率 ≥ p 的token |
| 灵活性 | 对长尾分布可能不灵活(如概率分布平坦时,k 可能包含低质量token) | 自适应分布形状,排除长尾低概率token |
| 极端情况 | 若 k=1,退化为贪婪采样 | 若 p→0,退化为贪婪采样 |
为什么需要重新归一化?
无论是top-k还是top-p,候选集的概率和通常 <1,重新归一化是为了保证采样时概率分布的有效性。
4079

被折叠的 条评论
为什么被折叠?



