Skip to content
🔗 分享本题
查看我的学习进度 →

采样控制动漫知识图:温度控制概率分布的平滑程度,Top-K和Top-N限制候选集大小,重复惩罚降低已出现token的概率,logit_bias强制提升或压制特定词元,stop_sequences定义终止条件

🧠 图解记忆:生成控制是一把组合拳——温度管风格、候选集管范围、惩罚管倾向、Bias管精确控制。

Logit Bias = 在模型输出的 logits 上加一个手动设置的偏置值,直接改变特定 token 被选中的概率。它是 LLM 可控生成的最后一道防线。

采样控制的"工具链"全景

模型输出 logits(原始未归一化的分数)

[1] Logit Bias  —— 手动加减特定 token 的分数

[2] Temperature  —— 整体缩放 logits,控制随机性

[3] Top-K / Top-P / Top-A —— 过滤候选集,缩小选择范围

[4] Repetition Penalty —— 对已出现的 token 降分

[5] Stop Sequences —— 命中即终止生成

Softmax → 采样 → 输出 token

Logit Bias 详解

python
# OpenAI API 示例
response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "请用一句话回答"}],
    logit_bias={
        1234: 10,   # Token ID 1234 的 score +10(极高概率被选中)
        5678: -10,  # Token ID 5678 的 score -10(极低概率被选中)
    }
)
# 注意:bias 范围通常是 -100 ~ 100(不同 provider 可能不同)
# +10 意味着该 token 的概率大约是原来的 e^10 ≈ 22026 倍
# -10 意味着该 token 的概率大约是原来的 e^-10 ≈ 4.5e-5 倍

关键特性:

  • Logit Bias 直接修改的是 raw logits(Softmax 之前的值),而非概率
  • 指数级的影响:bias=+10 使某 token 的概率翻 2万倍,bias=+5 翻倍
  • 优先级最高:在 Temperature 之前生效(先加 bias,再缩放宽窄)
  • 不支持批量 token 的排除(需逐 token ID 设置)

Top-A(Absolute Threshold)采样

Top-A(Absolute threshold sampling)是比 Top-P 更精细的控制方法:

原理:
  对每个 token 的 softmax 概率 p_i,保留满足以下条件的 token:
    p_i > A × (max(p))^A
  其中 A 是一个很小的值(如 0.02),max(p) 是最高概率

特点:
  - 自动适应模型的置信度水平
  - 当模型很有信心时(max p 很大),候选集较小
  - 当模型犹豫不决时(max p 很小),候选集自动扩大
  - 避免了 Top-P 中"概率分布平坦时选太多 token"的问题

代表应用:Anthropic Claude 系列采用此方法

采样控制策略实战搭配

| 场景 | 推荐配置 | 说明 | |------|---------|------|| | 聊天/对话 | temp=0.7, top_p=0.9 | 平衡创意和质量 | | 事实问答 | temp=0.1, top_p=0.95 | 偏向确定性和准确性 | | 代码生成 | temp=0.2, top_p=0.95, repetition_penalty=1.1 | 代码要准确也要有多样性 | | JSON 结构化输出 | temp=0, logit_bias={合法字符ID:+20, 非法ID:-20} | 严格约束输出格式 | | 品牌术语强制 | logit_bias={"Apple":+15, "苹果":-15} | 强制使用英文 brand name | | 创作/故事 | temp=1.0, top_k=40 | 高多样性和创意 |

常见陷阱

❌ 陷阱1:Temperature 和 Top-P 混用时行为不可预期
   解决:先设 Temp,再做 Top-P 截断。多数 API 会自动按这个顺序处理

❌ 陷阱2:Repetition Penalty 和 Logit Bias 冲突
   解决:Bias 优先于 Penalty。如果需要对已出现的 token 同时做 bias 调整和 penalty,
   需要在应用层自行合并效果

❌ 陷阱3:Top-A 的参数 A 太小导致候选集为空
   解决:A 通常在 0.01~0.05 之间,具体取决于 vocab size 和模型风格

面试高频追问

  • Temperature 到底怎么影响采样? Temperature = τ 时,新 logits = raw_logits / τ。τ < 1 使分布更尖锐(偏向最高分 token),τ > 1 使分布更平坦(增加随机性),τ = 0 等价于 greedy decoding(取 argmax)
  • Top-K、Top-P、Top-A 三者的关系? Top-K 固定数量,Top-P 自适应比例,Top-A 自适应绝对阈值。实践中 Top-P 最常用,Top-A 在 Anthropic 证明了对不确定性场景更鲁棒
  • 能否用 logit_bias 实现"禁止输出某些内容"? 可以但不优雅——需要提前知道要禁用的 token ID 列表。更好的方式是配合 guard-rails 系统或使用 stop sequences

面试话术:

"Logit Bias 是我在需要精确控制 LLM 输出时最后的杀手锏。它的原理很直观——直接往模型的原始打分上加钱或扣钱,加的正越多那个 token 越容易被选中。比如在 JSON 输出场景中,我会把合法的逗号、冒号、引号的 token 加 positive bias,把中文标点加 huge negative bias,确保模型不会输出格式混乱的结果。配合 Temperature 控制整体风格、Top-P 控制候选集大小、repetition penalty 防复读,这一套工具链基本能覆盖 99% 的生产环境控制需求。"