一、 面试题目
在大模型推理配置中,Temperature、Top-p、Top-k 和 Repetition penalty 分别控制什么?你会如何根据业务场景进行组合调优?
二、 知识储备
1. 核心背景:概率分布的"剪枝"
大模型每预测一个词,本质上是在对词表里数万个词做"多选题"。模型会给每个词打分(Logits),这些参数的作用就是决定如何从这个分数分布中"采样"出最终的词。
2. 参数拆解:四大调节杠杆
① Temperature (温度):控制"分布的平滑度"
物理含义: 在 Softmax 归一化之前,对原始分数进行缩放。
- 低温度(接近 0): 让高分更高,低分更低。模型会变得极其自信且保守,总是选那个概率最大的词。
- 高温度(> 1.0): 让分数分布变平坦。模型变得随机且跳脱,甚至会选概率很低的词。
② Top-k:控制"候选池的绝对大小"
- 逻辑: 简单粗暴,只保留概率最高的前 k 个词,剩下的全部归零。
- 作用: 它是硬性截断,防止模型在采样时选到那些排名太靠后、完全不着边际的"噪音词"。
③ Top-p (核采样/Nucleus Sampling):控制"候选池的相对质量"
- 逻辑: 按照概率从高到低累加,当累加和达到 p 时停止。
- 作用: 它是动态筛选。如果模型对某个词很有把握,候选池可能只有 1 个词;如果模型很困惑,候选池会自动扩大。这比 Top-k 更灵活。
④ Repetition penalty (重复惩罚):控制"语义的多样性"
- 逻辑: 检查已经生成的词,如果即将生成的词已经出现过,就强行打低它的分数。
- 作用: 它是防死循环工具 。有效解决模型反复输出同一个短语(如
I don't know, I don't know...)的问题。
三、 代码实现
1. Python 实现:定义场景化参数模板
python
# 针对不同任务特性的参数组合
INFERENCE_CONFIGS = {
"fact_check": { # 事实类:要求严谨、确定
"temperature": 0.1,
"top_p": 0.9,
"repetition_penalty": 1.0
},
"story_telling": { # 创意类:要求多样、丰富
"temperature": 0.85,
"top_p": 0.95,
"repetition_penalty": 1.2
}
}
2. Node.js 实现:模拟带参数的推理请求
javascript
// 在 Node.js 中调用模型接口时的参数传递
async function generateResponse(prompt, isCreative = false) {
const options = {
temperature: isCreative ? 0.8 : 0.2,
top_p: 0.95,
repetition_penalty: 1.1
};
return await llm.request(prompt, options);
}
四、 破局之道
在回答完概念后,通过这段话展现你对 采样算法本质 的思考:
回答这些参数的作用,核心要理解它们是在 "平衡模型生成的确定性与多样性"。
你可以告诉面试官:
- Temperature 调整的是模型的性格(保守还是激进);
- Top-p/k 限制的是模型的范围(是只看最优解还是博采众长);
- Repetition Penalty 优化的是模型的习惯(防止无意义的重复)。
在实际落地中,我通常会优先固定 Top-p (通常设为 0.9)来过滤掉长尾噪音,然后根据业务属性调节 Temperature :对于代码生成、数学计算等任务,使用近乎 0 的温度以追求绝对的准确;对于文案创作、润色等任务,使用 0.7 以上的温度来激发灵感。一个成熟的开发者,应该能通过调整概率分布的"形状",让同一个模型在"严谨的考卷"与"开放的剧本"之间无缝切换。