temperature、top_p、top_k

大模型問答的交互流程

TOP-K問題_git

圖片來源:阿里大模型ACP考試課件

temperature

temperature和top_p的調整是發生在大模型交互流程的第四階段即輸出Token,大模型會根據候選Token的概率進行隨機挑選,這就會導致“即使問題完全相同,每次的回答都略有不同”。

在大模型生成下一個詞(next-token)之前,它會先為候選Token計算一個初始概率分佈。這個分佈表示每個候選Token作為next-token的概率。temperature是一個調節器,它通過改變候選Token的概率分佈,影響大模型的內容生成。通過調節這個參數,你可以靈活地控制生成文本的多樣性和創造性。

TOP-K問題_概率分佈_02

圖中的低、中、高温度基於通義千問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-K問題_git_03

圖示中藍色部分表示累計概率達到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_ptop_k 是互斥的,API 通常只允許設置一個。

順序是:temperature → top_p/top_k → 採樣

關係

説明

順序

temperature → top_p/top_k → 採樣

互斥

top_ptop_k 不能同時用

優先級

top_p > top_k > temperature(推薦度)

控制維度

- temperature

整體隨機性(拉伸)

- top_p

候選集合大小(動態)

- top_k

候選集合大小(固定)

為什麼是這樣的順序?

為什麼要先用 temperature 控制隨機性,再用 top_p 控制概率質量閾值?” —— 這不是隨意順序,而是 模型解碼(Decoding)的物理邏輯 + 工程最佳實踐 的必然結果。

因為 temperature 作用在 logits 階段(原始分數),決定“概率分佈的形狀”; 而 top_p 作用在 softmax 後的概率階段,決定“保留多少質量”。 必須先“定形狀”,才能“談質量”!

步驟

原因

後果(如果反過來)

1. temperature

作用於 logits,控制“高低分差距”

——

2. softmax

把分數變成 概率(總和=1)

——

3. top_p

概率空間 中累計,判斷“質量閾值”

如果先 top_p,根本沒有概率

  • 以面試場景舉例

步驟

對應參數

説明

1. 定“評分標準”

temperature

是“嚴格模式”(T小)還是“寬鬆模式”(T大)?

2. 打分並歸一化

softmax

所有人的得分總和 = 100 分

3. 錄取“累計得分 ≥ 90 分”的前幾人

top_p=0.9

動態決定錄取人數

4. 或者“前 5 名”

top_k=5

固定人數

所以我們必須 先定標準 → 打分 → 歸一化,才能談“錄取閾值”!