temperature、top_p、top_k
大模型問答的交互流程
圖片來源:阿里大模型ACP考試課件
temperature
temperature和top_p的調整是發生在大模型交互流程的第四階段即輸出Token,大模型會根據候選Token的概率進行隨機挑選,這就會導致“即使問題完全相同,每次的回答都略有不同”。
在大模型生成下一個詞(next-token)之前,它會先為候選Token計算一個初始概率分佈。這個分佈表示每個候選Token作為next-token的概率。temperature是一個調節器,它通過改變候選Token的概率分佈,影響大模型的內容生成。通過調節這個參數,你可以靈活地控制生成文本的多樣性和創造性。
圖中的低、中、高温度基於通義千問Max模型的範圍[0, 2)劃分。
由上圖可知,温度從低到高(0.1 -> 0.7 -> 1.2),概率分佈從陡峭趨於平滑,候選Token“RAG”從出現的概率從0.8 -> 0.6 -> 0.3,雖然依然是出現概率最高的,但是已經和其它的候選Token概率接近了,最終輸出也會從相對固定到逐漸多樣化。
針對不同使用場景,可參考以下建議設置 temperature 參數:
- 明確答案(如生成代碼):調低温度。
- 創意多樣(如廣告文案):調高温度。
- 無特殊需求:使用默認温度(通常為中温度範圍)。
需要注意的是,當 temperature=0 時,雖然會最大限度降低隨機性,但無法保證每次輸出完全一致。
top_p
top_p 是候選詞向量生成階段的設置參數,也叫 Nucleus Sampling(核採樣) 的核心閾值,它也是一種篩選機制,用於從候選 Token 集合中選出符合特定條件的“小集合”。具體方法是:按概率從高到低排序,選取累計概率達到設定閾值的 Token 組成新的候選集合,從而縮小選擇範圍。
下圖展示了不同top_p值對候選Token集合的採樣效果。
圖示中藍色部分表示累計概率達到top_p閾值(如0.5或0.8)的Token,它們組成新的候選集合;灰色部分則是未被選中的Token。
當top_p=0.5時,模型優先選擇最高概率的Token,即“RAG”;而當top_p=0.8時,模型會在“RAG”、“提示詞”、“模型”這三個Token中隨機選擇一個生成輸出。
由此可見,top_p值對大模型生成內容的影響可總結為:
- 值越大 :候選範圍越廣,內容更多樣化,適合創意寫作、詩歌生成等場景。
- 值越小 :候選範圍越窄,輸出更穩定,適合新聞初稿、代碼生成等需要明確答案的場景。
- 極小值(如 0.0001):理論上模型只選擇概率最高的 Token,輸出非常穩定。但實際上,由於分佈式系統、模型輸出的額外調整等因素可能引入的微小隨機性,仍無法保證每次輸出完全一致。
通過 Assistant API 的 Assistant 類創建的智能體對象,可以通過設置top_p參數來設定概率質量的閾值,從而在保持多樣性的同時提高輸出質量
相似與區別:
top_p和温度的特點是值越大 生成結果越多樣性 那這倆有啥區別呢?
|
步驟
|
温度 T
|
top_p(nucleus)
|
|
① 原始 logits
|
z(候選 token 打出的“原始得分”)
|
z
|
|
② 温度縮放
|
z’ = z / T
|
|
|
③ Softmax
|
p = softmax(z’)
|
p = softmax(z)
|
|
④ 裁剪候選集
|
無
|
保留累計概率 ≤ p 的最小集合
|
|
⑤ 重歸一化
|
已在③完成
|
對保留集合再 softmax
|
|
⑥ 採樣
|
多項式採樣
|
多項式採樣
|
模型幻覺
大模型可能會產生一些不真實的內容,通常稱為幻覺。你可以通過提示詞要求大模型:「如果所提供的信息不足以回答問題,請明確告知"根據現有信息,我無法回答這個問題。"切勿編造答案。」,來減少大模型產生幻覺的機率。
top_k和top_p的區別是什麼?
top_k 和 top_p 都是要“砍候選”,但top_k按個數砍,top_p按累計概率砍;場景也因此不同。
1. 直觀對比(同一 logits)
|
方案
|
保留策略
|
保留數
|
是否動態
|
極端 token 能否留下
|
|
top_k=3 |
分數最高的 3 個 |
固定 3
|
❌
|
不可能,池子鎖死
|
|
top_p=0.9 |
累計概率 ≤ 0.9 的最小集合
|
不固定(可能 2~10)
|
✅
|
只要累計沒到 0.9,再冷門也能進 |
2. 優缺點速覽
top_k
✅ 簡單、計算量恆定,適合嵌入式/高併發場景。
❌ 池子大小死板:頭部極集中時仍拉進 3 個,尾部很分散時卻硬砍到 3 個,要麼太亂要麼太單調。
top_p
✅ 概率自適應:頭部集中時只剩 1-2 個,尾部分散時自動擴池,多樣且乾淨。
❌ 計算量隨分佈變化,極端情況下要掃整個詞表;實現需排序 cumsum。
3. 典型用法
|
任務
|
推薦組合
|
理由
|
|
對話/創意寫作 |
T=1.2 + top_p=0.9~0.95
|
保證長尾靈感,避免採到錯別字
|
|
代碼生成 |
T=0.2 + top_p=0.95
|
邏輯嚴謹,又留多種寫法
|
|
嵌入式設備 |
T=0.8 + top_k=20~40
|
池大小固定,緩存友好
|
|
Beam Search 前剪枝 |
top_k=5~10
|
快速砍掉大量分支,減少後續計算
|
對輸出結果有什麼影響,相互之間有什麼關係
temperature 拉伸/壓縮概率分佈 → top_p/top_k 再從“變形後”的分佈中截取候選詞 → 最終採樣生成文本
top_p和top_k是互斥的,API 通常只允許設置一個。
順序是:temperature → top_p/top_k → 採樣
|
關係
|
説明
|
|
順序 |
temperature → top_p/top_k → 採樣
|
|
互斥 |
|
|
優先級 |
|
|
控制維度 |
|
|
- |
整體隨機性(拉伸)
|
|
- |
候選集合大小(動態)
|
|
- |
候選集合大小(固定)
|
為什麼是這樣的順序?
為什麼要先用 temperature 控制隨機性,再用 top_p 控制概率質量閾值?” —— 這不是隨意順序,而是 模型解碼(Decoding)的物理邏輯 + 工程最佳實踐 的必然結果。
因為 temperature 作用在 logits 階段(原始分數),決定“概率分佈的形狀”; 而 top_p 作用在 softmax 後的概率階段,決定“保留多少質量”。 必須先“定形狀”,才能“談質量”!
|
步驟
|
原因
|
後果(如果反過來)
|
|
1. |
作用於 logits,控制“高低分差距” |
——
|
|
2. |
把分數變成 概率(總和=1) |
——
|
|
3. |
在 概率空間 中累計,判斷“質量閾值” |
如果先 |
- 以面試場景舉例
|
步驟
|
對應參數
|
説明
|
|
1. 定“評分標準”
|
|
是“嚴格模式”(T小)還是“寬鬆模式”(T大)?
|
|
2. 打分並歸一化
|
|
所有人的得分總和 = 100 分
|
|
3. 錄取“累計得分 ≥ 90 分”的前幾人
|
|
動態決定錄取人數
|
|
4. 或者“前 5 名”
|
|
固定人數
|
所以我們必須 先定標準 → 打分 → 歸一化,才能談“錄取閾值”!