想象你是一家智慧餐厅的主厨,每天要从几千道菜里为客人选出“下一道菜”。大模型写字的过程也像这样:每生成一个词,都要在几万个候选词里做选择。如果只选最受欢迎的招牌菜,客人三顿就腻;如果每道菜都乱试,可能端出一盘黑暗料理。所以主厨需要一套选菜规则:Top-K 是老板规定候选菜单最多放最受欢迎的前K道菜;Top-P 是看客人热度动态凑单,凑到覆盖八成顾客的菜都上桌;温度则是你手里的“冒险旋钮”,调低只卖经典菜,调高敢上创意菜。这篇文章就带你搞懂这三个旋钮怎么配合,让AI生成既稳定又出彩。

岗位关联

对 AI 从业者来说,采样参数是LLM应用上线的“最后一公里”。掌握Top-K、Top-P与温度的配合,能在不重训模型的前提下,精准控制聊天机器人和内容产品的输出风格与稳定性。

目录
  1. 可视化演示
  2. 采样必要性
  3. 概率分布基础
  4. Top-K采样
  5. Top-P采样
  6. 温度参数
  7. 参数组合调优
  8. 应用与权衡
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

Top-K采样

采样必要性

智慧餐厅的主厨有个坏习惯:每道菜只选点评最高的那一道端上桌。一开始客人觉得不错,但连续吃几天,菜单变成了一首单曲循环。大模型如果每写一个词都挑概率最高的那个,结果也一样——文本会变得重复、机械、毫无信息量。这个“只选冠军”的规则在解码里叫贪心解码,它是最简单也最容易翻车的策略。

为了让生成更自然,主厨需要学会“抽签”,而不是“颁奖”。模型每走一步都会给词表里的每个词算一个概率,我们真正要做的,是从这个概率分布里随机抽取下一个词。随机听上去不靠谱,但正是在概率高的词里多抽、概率低的词少抽,才能既合理又有多样性。

技术上看,贪婪地取 \(\arg\max\) 会让文本退化成复读机,尤其在长文本生成中,一个高概率词被反复选中,很快就陷入重复循环。因此现代LLM解码普遍使用采样:让低概率词也有微弱机会被选中,但又不至于变成胡言乱语。

所以,贪心解码不是不能用,而是它像一个只敢点招牌菜的主厨,安全但缺乏惊喜。后面的Top-K、Top-P和温度,就是帮他摆脱“只会炒招牌菜”的利器。

wt=arg⁡max⁡w∈Vp(w∣x<t)w_t = \arg\max_{w \in V} p(w \mid x_{<t})
  1. 词表 VV 是模型能输出的全部候选词集合,相当于餐厅的完整菜单。
    V={w1,w2,…,w∣V∣}V = \{w_1, w_2, \dots, w_{|V|}\}
  2. 条件概率\(p(w \mid x_{<t})\) 表示在已经生成的前 \(t-1\) 个词之后,下一个词是 \(w\) 的概率。
    p(w∣x<t)p(w \mid x_{<t})
  3. argmax 取出最大值从所有候选中挑概率最大的那个词作为输出,这就是贪心策略。
    wt=arg⁡max⁡w∈Vp(w∣x<t)w_t = \arg\max_{w \in V} p(w \mid x_{<t})

概率分布基础

每道菜在端上桌之前,后厨会给它打一个“生评分数”,分数高不代表客人一定会点,还得换算成“受欢迎概率”。大模型输出的原始分数叫 Logits,通常有正有负、没有上下界,不能直接当概率使用。主厨需要一个标准流程把它们变成一份能看懂的人气榜单,这个流程就是 Softmax。

Softmax 做的事情很简单:先给每个分数取指数,让所有数都变成正数,同时把分数间的差距放大;再把所有指数加起来当分母,算每个词占比。经过这一步,每个词都会拿到一个介于0到1之间的概率,而且所有词的概率加起来正好等于1。

直观理解,Softmax 就是把后厨的“生评分数”翻译成客人真正会点餐的“人气比例”。比例越高的词,越容易被模型选中;比例低的词,虽然机会渺茫,但也并没有完全被杜绝。

人气榜单准备好之后,主厨才有依据去设计筛选规则。Top-K、Top-P 和温度本质上都是在这份榜单上做文章,只是动作各不相同。

pi=ezi∑j=1∣V∣ezjp_i = \frac{e^{z_i}}{\sum_{j=1}^{|V|} e^{z_j}}
  1. 取指数对第 \(i\) 个词的 Logits 分数 \(z_i\) 做指数运算,得到恒为正的权重。
    ezie^{z_i}
  2. 对所有词求和把词表里全部词的指数结果加起来,作为归一化分母。
    ∑j=1∣V∣ezj\sum_{j=1}^{|V|} e^{z_j}
  3. 做比值用第 \(i\) 个词的指数除以总和,得到 0 到 1 之间的概率 \(p_i\)。
    pi=ezi∑j=1∣V∣ezjp_i = \frac{e^{z_i}}{\sum_{j=1}^{|V|} e^{z_j}}

Top-K采样

既然不能每道菜都端上桌,主厨就给自己定了个规矩:候选菜单最多只放人气最高的 K 道菜,其余全部下架。这个思路对应采样的 Top-K 策略:先把所有词按概率从高到低排序,只保留前 K 个作为候选,然后在这 K 个词里按概率重新抽签。

为什么是“重新抽签”而不是直接从原概率里挑?因为截断之后,被留下的 K 个词的概率之和不再是 1。为了让它们变成一份合法的人气榜单,需要先把这 K 个词的概率加起来当分母,再把每个词的概率除一遍。这个过程叫重新归一化,相当于把菜单缩小后,重新计算每道菜在候选菜单里的“相对热度”。

K 值的大小直接决定保守程度。K 设小一点,候选词少,输出更稳定、更安全;K 设大一点,冷门词有机会上场,文本更多变。但 Top-K 也有局限:菜单大小是固定不变的,如果当前概率分布特别集中,前 K 个词里可能混入不少低概率噪声词;如果分布很平,K 又可能太小,白白丢掉本来可信的候选。

Top-K 像一张固定大小的候选桌:K 设多大,桌上就永远摆几个盘子。它简单直观,但少了一点弹性,于是主厨又有了一个更聪明的方案——Top-P。

p′(w)=p(w)∑v∈VtopKp(v),VtopK={w:rank(p(w))≤K}p'(w) = \frac{p(w)}{\sum_{v \in V_{\text{topK}}} p(v)}, \quad V_{\text{topK}} = \{w : \mathrm{rank}(p(w)) \le K\}
  1. 构造候选集按概率降序排列后,只保留排名不超过 K 的词。
    VtopK={w1,w2,…,wK}V_{\text{topK}} = \{w_1, w_2, \dots, w_K\}
  2. 候选集内求和把这 K 个词的原始概率加起来,记为 \(S_K\)。
    SK=∑v∈VtopKp(v)S_K = \sum_{v \in V_{\text{topK}}} p(v)
  3. 重新归一化每个候选词的原始概率除以 \(S_K\),得到候选菜单内新的抽样概率。
    p′(w)=p(w)SKp'(w) = \frac{p(w)}{S_K}

Top-P采样

主厨放弃了“固定放几道菜”的规矩,改成“从人气最高的菜开始往上加,直到覆盖八成客人会点的菜就停”。这就是 Top-P,也叫核采样。它不像 Top-K 那样拿着一个固定数字,而是根据当前概率分布的形状动态决定候选菜单的大小。

具体做法是:先把所有词按概率从高到低排好队,然后从第一名开始一个一个累加概率,直到累积和第一次达到阈值 P(比如 0.8)就停下来,这时排在队首的这批词组成候选集合。概率越集中,达到 P 需要的词就越少;概率越分散,候选词就越多。因此 Top-P 能自动适应不同语境下的概率分布,被公认为比 Top-K 更稳健。

不过要注意,P 是概率阈值,不是候选词数量。P 越大,候选集合越宽松,输出越多样;P 越小,候选集合越严格,输出越稳定。选好 P,主厨就能做到“爆款多时菜单精,众口难调时菜单宽”,既不错过热门词,又给冷门词留了机会。

Top-P 让菜单大小跟着顾客口味自动变化,比 Top-K 灵活不少。但主厨手里还有一个隐藏旋钮,它能在抽签之前直接改变所有菜的人气格局,这就是温度。

Vp={w(1),w(2),…,w(m)},s.t.∑i=1mp(i)≥P,∑i=1m−1p(i)<PV_p = \{w_{(1)}, w_{(2)}, \dots, w_{(m)}\}, \quad \text{s.t.} \quad \sum_{i=1}^{m} p_{(i)} \ge P, \quad \sum_{i=1}^{m-1} p_{(i)} < P
p′(w)=p(w)∑v∈Vpp(v)⋅1[w∈Vp]p'(w) = \frac{p(w)}{\sum_{v \in V_p} p(v)} \cdot \mathbb{1}[w \in V_p]
  1. 概率降序排列把词按概率从大到小排队,\(p_{(1)}\) 是最高概率。
    p(1)≥p(2)≥⋯≥p(∣V∣)p_{(1)} \ge p_{(2)} \ge \cdots \ge p_{(|V|)}
  2. 从前往后累加逐个累加概率,直到累积和第一次达到或超过 P。
    ∑i=1mp(i)≥P\sum_{i=1}^{m} p_{(i)} \ge P
  3. 得到核采样候选集前 m 个词组成 \(V_p\)。
    Vp={w(1),w(2),…,w(m)}V_p = \{w_{(1)}, w_{(2)}, \dots, w_{(m)}\}
  4. 候选集内归一化用指示函数只保留候选集内的词,并按权重重新归一化为 \(p'(w)\)。
    p′(w)=p(w)∑v∈Vpp(v)⋅1[w∈Vp]p'(w) = \frac{p(w)}{\sum_{v \in V_p} p(v)} \cdot \mathbb{1}[w \in V_p]

温度参数

温度参数更像主厨的性格旋钮:把它拧到左边,主厨格外保守,只做最有把握的招牌菜,概率最高的菜会更突出;把它拧到右边,主厨变得大胆爱尝鲜,原本冷门的菜也有了上桌机会。温度并不直接控制候选菜单,而是在 Softmax 之前先对原始分数做一次缩放。

具体做法是把模型输出的 Logits 除以温度 T。T 小于1时,分数之间的差距被放大,Softmax 出来的概率会变得更尖锐,高概率词更显眼;T 大于1时,分数差距被压缩,概率分布更平坦,各候选词之间的差异变小,随机性随之增强;T 等于1时,一切保持原样。温度因此成为调整“稳定 vs 多样”最直接的手感。

注意一个容易混淆的点:温度改变的是概率分布的“陡峭程度”,不会重新排列候选词的先后顺序。它更像是给每一道菜的人气数字统一做了一次缩放,热门菜依然是热门菜,只是冷门菜的机会变大或变小了。由于它作用于采样之前,所以通常会被说得非常形象——“给生成结果加点创意”。

温度旋钮负责调整“人气的集中程度”,而 Top-K 和 Top-P 负责决定“哪些菜能上候选桌”。聪明的做法往往是几个旋钮一起玩,让规则之间互相制衡。

pi=ezi/T∑j=1∣V∣ezj/Tp_i = \frac{e^{z_i / T}}{\sum_{j=1}^{|V|} e^{z_j / T}}
  1. 缩放原始分数把第 \(i\) 个词的 Logits 除以温度 T。
    zi/Tz_i / T
  2. 温度小于 1 放大差距T<1 时,\(z_i/T\) 差距变大,最高概率词更突出。
    T<1⇒概率更尖锐T < 1 \Rightarrow \text{概率更尖锐}
  3. 温度大于 1 缩小差距T>1 时,\(z_i/T\) 差距变小,分布更均匀。
    T>1⇒概率更平坦T > 1 \Rightarrow \text{概率更平坦}
  4. 再做 Softmax 归一化缩放后的分数仍要经过指数和归一化,得到新概率。
    pi=ezi/T∑j=1∣V∣ezj/Tp_i = \frac{e^{z_i / T}}{\sum_{j=1}^{|V|} e^{z_j / T}}

参数组合调优

单一策略都有偏科:Top-K 固定桌数,在概率分散时容易漏掉可信候选;Top-P 虽然动态,但遇到极端分布时候选集可能过大或过小;温度则只改概率形状,不清理噪声词。于是主厨决定把三套规则组合起来用:先拧温度旋钮改变概率轮廓,再用 Top-K 限制候选总量,最后用 Top-P 按热度门槛收尾。这样既管住了“谁能上桌”,又管住了“上桌后抽谁”。

在工程实现上,联合采样的核心是先求出多个策略的交集候选集,再对这个交集做一次归一化。例如最终候选集合 \(V_{\text{final}} = V_{\text{topK}} \cap V_p\),只有同时通过两道门槛的词才会进入最后抽签环节。这样 Top-K 负责上限,Top-P 负责动态下限,温度负责整体锐度,三者协同远比单打独斗好用。

调参时一般遵循“先定风格,再调参数”的思路:想要稳定,就降低温度并缩小 K 和 P;想要创意,就抬高温度并放宽 K 和 P。推荐的起步组合往往是 \(T=0.8\)、\(K=40\)、\(P=0.9\),然后在具体任务上做小范围网格搜索。记住,参数之间不是非此即彼,而是互相配合的关系。

组合调优像把两套筛子叠在一起:Top-K 管最大盘子数,Top-P 管最低人气值。筛好之后,主厨只要再拧一下温度,就能让同一家餐厅既做稳定工作餐,也做创意私房菜。

Vfinal=VtopK∩VpV_{\text{final}} = V_{\text{topK}} \cap V_p
p′(w)=p(w)∑v∈Vfinalp(v)⋅1[w∈Vfinal]p'(w) = \frac{p(w)}{\sum_{v \in V_{\text{final}}} p(v)} \cdot \mathbb{1}[w \in V_{\text{final}}]
  1. 求出两个候选集的交集同时满足 Top-K 排名和 Top-P 累积阈值的词才留下。
    Vfinal=VtopK∩VpV_{\text{final}} = V_{\text{topK}} \cap V_p
  2. 计算交集内概率和把所有最终候选词的原始概率相加。
    ∑v∈Vfinalp(v)\sum_{v \in V_{\text{final}}} p(v)
  3. 在交集中重新归一化最终候选集之外的概率被置零,集合内概率按比例放大。
    p′(w)=p(w)∑v∈Vfinalp(v)⋅1[w∈Vfinal]p'(w) = \frac{p(w)}{\sum_{v \in V_{\text{final}}} p(v)} \cdot \mathbb{1}[w \in V_{\text{final}}]

应用与权衡

同一个主厨,面对不同客群要有不同打法。给企业做客服机器人,客人要的是标准、不出错,这时候主厨应该把温度调低,候选菜单收窄,让AI回复稳定可靠;给市场部写 slogan 和文案,客人要的是新鲜有趣,这时候温度调高,Top-P 放宽,让冷门搭配有机会被选中。没有任何一组参数适合所有任务,关键是理解“稳定”和“多样”之间的跷跷板。

质量与多样性的权衡可以用一句话概括:候选空间越大,随机性越高,文本越有创意,但也越容易跑题;候选空间越小,输出越稳,但越容易重复和乏味。实际调参时,通常先在少量测试句上观察输出,如果句子千篇一律,就适当调高温度、增大 P;如果开始语无伦次,就调低温度、减小 K/P,直到找到那个“又稳又有亮点”的甜点区。

从数学上看,最终生成过程就是按照经过温度、Top-K、Top-P 修正后的概率分布做一次随机抽样。抽样符号 \(\sim\) 表示结果不是固定的 argmax,而是带随机性的抽取。理解这一点后,你就能把采样参数当成模型输出风格的“方向盘”,随时根据业务需求转动它。

主厨的菜单策略从来不是越花哨越好:招牌菜保证下限,创意菜拉升上限。当你学会了根据场景转动温度、收放 K 与 P,就能让大模型在“靠谱”和“有趣”之间自由滑行。

wt∼pfinal(w∣x<t),pfinal(w)=p(w)⋅1[w∈Vfinal]∑v∈Vfinalp(v)w_t \sim p_{\text{final}}(w \mid x_{<t}), \quad p_{\text{final}}(w) = \frac{p(w) \cdot \mathbb{1}[w \in V_{\text{final}}]}{\sum_{v \in V_{\text{final}}} p(v)}
  1. 最终候选集\(V_{\text{final}}\) 由温度、Top-K 和 Top-P 共同决定,是最终允许抽签的词集合。
    Vfinal=VtopK∩VpV_{\text{final}} = V_{\text{topK}} \cap V_p
  2. 归一化概率候选集内每个词的原始概率除以候选集总概率,保证和为 1。
    pfinal(w)=p(w)∑v∈Vfinalp(v)p_{\text{final}}(w) = \frac{p(w)}{\sum_{v \in V_{\text{final}}} p(v)}
  3. 随机采样符号 \(\sim\) 表示按 \(p_{\text{final}}\) 进行有随机性的抽取,而不是取最大值。
    wt∼pfinal(w∣x<t)w_t \sim p_{\text{final}}(w \mid x_{<t})

AI 应用场景

智能客服:用低温小候选守住业务底线

阶段:模型推理与输出控制

解决的问题:客服机器人如果每句话都随机乱说,轻则答非所问,重则引发客诉。传统规则系统写死固定话术,但无法覆盖复杂问题;直接用大模型默认参数又容易发挥过头。

具体案例:某银行智能客服接入大模型后,将温度设为 0.3、Top-P 设为 0.7,并配合 Top-K=20。用户问“信用卡怎么还款”,模型会在几个标准解释里稳定选词,同一个问题答法高度一致,投诉率明显下降。

营销文案:用高温大核采样激发创意

阶段:内容生成与创意探索

解决的问题:写广告语、小红书文案时,模型如果只挑高概率词,产出的句子四平八稳、毫无记忆点。传统头脑风暴效率低,而 AI 又容易跑偏。

具体案例:某食品品牌用 LLM 批量生成 100 条新品卖点,温度设 1.2、Top-P 设 0.95。冷门但惊艳的搭配,比如“咬一口会发光的酥脆”,就被成功捞出来,策划团队再人工筛选,创意提案效率提升了三倍。

代码生成:温度与截断配合保证语法正确

阶段:代码补全与生成

解决的问题:代码必须具备语法确定性,纯随机采样容易生成能读但不合法的代码,而贪心解码又容易生成同质化的模板代码。

具体案例:IDE 插件在做函数补全时,用温度 0.6、Top-K=30、Top-P=0.9 的组合采样。核心 API 调用阶段候选收窄,变量命名阶段适当放宽,使补全命中率与多样性取得平衡,开发者接受率提高约 20%。

Python 演示

python56 行
import randomimport math  def softmax(logits, temperature=1.0):    scaled = [x / temperature for x in logits]    exps = [math.exp(x - max(scaled)) for x in scaled]    total = sum(exps)    return [e / total for e in exps]  def top_k_filter(probs, k):    order = sorted(range(len(probs)), key=lambda i: probs[i], reverse=True)[:k]    mask = [0.0] * len(probs)    for i in order:        mask[i] = probs[i]    total = sum(mask)    return [p / total if mask[i] else 0.0 for i, p in enumerate(probs)]  def top_p_filter(probs, p):    order = sorted(range(len(probs)), key=lambda i: probs[i], reverse=True)    keep = []    cum = 0.0    for i in order:        keep.append(i)        cum += probs[i]        if cum >= p:            break    mask = [0.0] * len(probs)    for i in keep:        mask[i] = probs[i]    total = sum(mask)    return [prob / total if mask[i] else 0.0 for i, prob in enumerate(probs)]  def sample(logits, temperature=1.0, top_k=0, top_p=1.0):    probs = softmax(logits, temperature)    if top_k > 0:        probs = top_k_filter(probs, top_k)    if top_p < 1.0:        probs = top_p_filter(probs, top_p)    r = random.random()    cum = 0.0    for i, p in enumerate(probs):        cum += p        if r < cum:            return i    return len(probs) - 1  if __name__ == "__main__":    logits = [0.5, 1.2, 3.0, 0.1, 2.5, 1.8, 0.7, 2.0, 1.0, 0.3]    for t in [0.8, 1.0, 1.5]:        idx = sample(logits, temperature=t, top_k=5, top_p=0.9)        print("T={} -> 选中 {} 号词".format(t, idx))
目的:用 20 行左右的核心逻辑演示温度、Top-K、Top-P 如何一步一步修正概率并完成最终采样。
  1. scaled = [x / temperature for x in logits]先把原始分数除以温度,改变概率分布的锐度。
  2. math.exp(x - max(scaled))指数运算时减去最大值,避免数值溢出,又不改变相对大小。
  3. total = sum(exps)把所有指数结果相加,作为归一化的分母。
  4. order = sorted(range(len(probs)), key=lambda i: probs[i], reverse=True)[:k]按概率降序取出前 K 个下标。
  5. return [p / total if mask[i] else 0.0 for i, p in enumerate(probs)]对候选集内概率重新归一化,候选集外概率置零。
  6. cum += probs[i]; if cum >= p: breakTop-P 的核心:从高到低累加概率,达到阈值立即停止。
  7. if top_k > 0约定 K 为 0 表示不启用 Top-K,保持函数灵活。
  8. if r < cum用随机数落在累积概率区间的方式实现按权重抽样。

常见误区

误区总觉得 K 设得越大,候选词越多,生成质量就越高。于是我直接把 K 调到 100,结果句子变得又散又乱,还不如默认值好用。

正解K 控制的是候选词数量的上限,K 越大随机性越强,但高质量候选词往往集中在概率头部。K 过大等于把一堆低概率“噪声词”也请上了桌,生成质量反而下降。真正的甜蜜点通常在几十个词附近,需要按任务调,不是越大越好。

为何常见:因为大家容易把“多样”直接等同于“质量高”,忽略了采样还要兼顾语义连贯性。

误区看到 Top-P 里有个 P,以为它和 Top-K 一样,代表选多少个词。设了 P=80,以为候选词就是 80 个。

正解P 是累积概率阈值,不是词数。它表示从最高概率开始累加,直到覆盖到的总概率达到 P(如 0.8)时停止。分布集中时可能 5 个词就够,分布分散时可能要 200 个词。用词数去理解 Top-P,会发现输出结果和自己的预期对不上。

为何常见:Top-K 的 K 是数量,Top-P 的 P 是概率,两者形似但含义不同,初学者很容易张冠李戴。

误区听说温度高能让生成多样,我就把温度调到 5,结果模型开始胡言乱语,甚至出现大量乱码和逻辑断裂。

正解温度改变的是概率分布的平坦程度,温度过高会把高概率词的差距也压平,等于把所有词都当成差不多重要来抽,句子自然失去主线。温度通常只在 0.1 到 2 之间小幅调节,“创意”不等于“失控”。

为何常见:因为“high temperature“听起来就像”high creativity”,人们忽略了它同时会放大低概率词的风险。

误区以为 Top-K 和 Top-P 是两种互斥的采样策略,选了 Top-P 就不能用 Top-K,写代码时也只调用一个。

正解两者完全可以在一次解码中联合使用,生产环境里常常先按温度缩放,再做 Top-K 截断,最后做 Top-P 核采样。最终候选集合可以理解为两个策略候选集的交集,既限制总量又动态适应分布。

为何常见:很多教程把"Top-K vs Top-P"当成对立标题,让人误以为必须站队,而实际工程中它们是配合关系。

面试题

Q1. 贪心解码最直接的问题是什么?

单选题 · easy

  • A.容易生成重复且无新意的文本← 正确答案
  • B.模型推理速度大幅下降
  • C.输出结果无法被程序解析
  • D.需要更长提示词才能启动

答案:A。贪心解码每次都选概率最大的词,相当于一直点同一道招牌菜,长文本中极易陷入重复循环。它不改变推理速度,也不涉及可解析性,因此 A 正确。

Q2. Softmax 把一组实数变成什么?

单选题 · easy

  • A.总和为1的非负概率← 正确答案
  • B.均值为0的原始向量
  • C.总数为词表长度的整数
  • D.保持原值的排序数组

答案:A。Softmax 先指数化再归一化,输出每个候选词的概率,所有概率在 0 到 1 之间且和为 1。它不保证均值为 0,也不会输出词表长度的整数。

Q3. Top-K 采样中的 K 表示什么?

单选题 · easy

  • A.进入候选集的词数量← 正确答案
  • B.温度参数的数值大小
  • C.累积概率的阈值大小
  • D.随机生成的次数上限

答案:A。K 是候选词数量的上限,相当于候选菜单最多放几道菜。温度用 T 表示,累积概率阈值是 Top-P 中的 P,生成次数与解码策略无关。

Q4. Top-P 选择候选词的依据是什么?

单选题 · mid

  • A.按概率降序累积到阈值 P← 正确答案
  • B.随机抽取概率为 P 的词
  • C.取概率大于 P 的所有词
  • D.固定选择前 P 个词

答案:A。Top-P 先把词按概率从高到低排序,再累加概率直到达到 P,前面这些词构成候选集。它不看单个概率是否大于 P,也不固定选 P 个词。

Q5. 温度 T 调高后,概率分布会怎样?

单选题 · mid

  • A.变得更平坦,随机性增加← 正确答案
  • B.更集中在最高概率词
  • C.所有候选词概率归零
  • D.候选集数量自动缩小

答案:A。T 越大,Logits 除以温度后差距越小,Softmax 输出越均匀,冷门词机会增大。T 变小才会更加集中,候选集数量由 Top-K/P 控制,而不是温度。

Q6. 客服场景希望回答稳定,最合适的设置是?

单选题 · mid

  • A.低温度配合较小 Top-K← 正确答案
  • B.高温度配合较大 Top-K
  • C.Top-P 设为 1.0 加大随机
  • D.温度设为 10 提高创意

答案:A。低温度让高概率词更突出,小 Top-K 限制候选数量,整体输出更可控。高温度、大候选、Top-P=1.0 都会增加随机性,不适合客服这种需要一致性的场景。

Q7. 当 Top-K=1 时,最终输出等价于什么?

单选题 · hard

  • A.贪心解码取最大概率词← 正确答案
  • B.完全随机均匀采样
  • C.Top-P=1.0 的动态采样
  • D.温度趋近无穷的采样

答案:A。K=1 表示候选集只有一个概率最大的词,归一化后它的概率为 1,抽样必然选中它,等价于 argmax。这与均匀采样、Top-P 动态采样、高温采样都不同。

Q8. 下列哪些方式可以增加生成多样性?

多选题 · mid

  • A.提高温度参数 T← 正确答案
  • B.增大 Top-K 的 K 值← 正确答案
  • C.增大 Top-P 的阈值 P← 正确答案
  • D.采用贪心解码

答案:ABC。提高温度会让概率更平坦,增大 K 或 P 会让更多词进入候选,都能增强随机性。贪心解码固定选最大概率词,反而减少多样性。

Q9. 关于 Top-P 与 Top-K 联合使用,正确的理解是?

多选题 · hard

  • A.两者候选集合取交集← 正确答案
  • B.截断后需要重新归一化← 正确答案
  • C.可先应用 Top-P 再截断← 正确答案
  • D.两者必须互斥二选一

答案:ABC。联合使用时,最终候选集是 Top-K 集合与 Top-P 集合的交集;无论先 P 后 K 还是先 K 后 P,都要在最终候选集内重新归一化。两者并非互斥,而是互相配合。

Q10. 面对长尾概率分布,Top-P 相比 Top-K 的优势是什么?

多选题 · extreme

  • A.候选数量随分布自动伸缩← 正确答案
  • B.高阈值可纳入更多尾部词← 正确答案
  • C.始终固定使用相同词数
  • D.截断后无需重新归一化

答案:AB。长尾分布下,Top-P 按累积概率动态截断,分布集中时候选少、分布分散时候选多;把 P 设得较高时,尾部低概率词也有机会进入候选。Top-K 固定词数,并且任何截断后都需要归一化,所以 C、D 错误。