Hugging Face 文本生成解碼方法指南
文本生成解碼概述
自回歸語言生成假設詞序列的機率分佈是條件下一個詞分佈的乘積。解碼方法的選擇——即模型如何從該分佈中選擇下一個 token——會顯著影響生成文本的流暢度、連貫性與創造力。
貪婪搜索 (Greedy Search)
貪婪搜索是最簡單的解碼方法,在每個時間步選擇機率最高的 token:$w_{t} = \text{argmax}{w} P(w \mid w{1:t-1})$。
關鍵限制:
- 重複性: 使用貪婪搜索的模型經常會陷入重複的循環。
- 次優序列: 如果高機率序列隱藏在較低機率的初始 token 後面,它可能會錯失這些序列。例如,如果第 $t$ 步的詞不是絕對機率最大的候選者,則無法到達第 $t+1$ 步中非常可能的詞。
束搜索 (Beam Search)
束搜索透過在每個時間步維持 num_beams 個最可能的假設,來降低錯失高機率序列的風險,最終選擇整體機率最高的序列。
使用 N-gram 懲罰改進束搜索
為了對抗束搜索的重複特性,可以應用 n-gram 懲罰。透過設置 no_repeat_ngram_size,任何會產生重複 n-gram 的 token 機率會被手動設置為 0。然而,這必須謹慎使用;例如,一個 2-gram 懲罰會防止「New York」這個詞組在文本中出現超過一次。
開放式生成的權衡
雖然束搜索對於長度可預測的任務(如翻譯或摘要)非常有效,但由於以下幾個原因,束搜索對於開放式生成(如故事創作)通常是次優的:
- 重複輸出: 它非常容易產生重複。
- 可預測性: 人類語言通常不會僅遵循高機率詞的分佈;束搜索產生的文本往往過於可預測或「乏味」。
採樣策略 (Sampling Strategies)
採樣涉及根據條件機率分佈隨機挑選下一個詞,使生成過程具有非確定性。
基礎採樣與溫度 (Temperature)
純粹的採樣可能導致不連貫的「胡言亂語」。為了優化這一點,可以使用 溫度 (temperature) 來銳化 softmax 分佈。降低溫度會增加高機率詞的可能性,並降低低機率詞的可能性。當溫度接近 0 時,採樣會變得等同於貪婪解碼。
Top-K 採樣
Top-K 採樣會將分佈過濾為最可能的 $K$ 個下一個詞,並在它們之間重新分配機率質量。這消除了經常導致不連貫的 laong tail(長尾)低機率 token,
限制: Top-K 不會根據分佈的形狀進行調整。在「尖銳」的分佈中,它可能會包含不合適的詞;在「平坦」的分佈中,它可能會排除合理的候選者。
Top-p (Nucleus) 採樣
Top-p 採樣動態地選擇一組詞,其累積機率超過閾值 $p$。這允許採樣池在下一個詞難以預測時擴大,並在下一個詞高度可預測時縮小。
解碼方法總結
| 方法 | 方法論 | 主要優點 | 主要缺點 |
|---|---|---|---|
| Greedy Search | 最高機率 token | 簡單、快速 | 重複、錯失最佳路徑 |
| Beam Search | 前 $N$ 個假設 | 整體機率較高 | 重複、可預測性高 |
| Sampling | 基於分佈隨機採樣 | 多樣化、有創造力 | 可能不連貫 |
| Top-K | 前 $K$ 個 token | 減少胡言亂語 | 無論分佈如何,池大小固定 |
| Top-p | 累積機率 $p$ | 動態且流暢 | 仍可能受到重複問題影響 |
研究表明,雖然採樣方法在開放式任務中通常感覺更像人類,但如果模型的訓練目標經過特別調整,束搜索可以更流暢。最終,解碼策略的選擇取應決於具體的使用案例以及在連貫性與創造力之間的平衡需求。