为什么需要解码策略?
在大型语言模型(如GPT、LLaMA)的文本生成过程中,直接选择概率最高的词(贪心搜索)会导致重复和机械化的输出,而完全随机采样又可能产生不合理的文本。top-k、top-p和temperature这三个参数,正是为平衡创造性与可控性设计的核心工具。
核心参数解析
1. Top-k 采样
原理
# 伪代码实现
def top_k_sampling(prob_distribution, k=50):
top_k_probs, top_k_indices = get_top_k(prob_distribution, k)
sampled_token = random.choice(top_k_indices, weights=top_k_probs)
return sampled_token
- 功能:每步生成时,仅保留概率最高的前
k个候选词 - 特点:
k越大,多样性越强(例:k=100适合创意写作)k越小,输出越保守(例:k=10适合技术问答)
典型值建议
| 场景 | k值范围 |
|---|---|
| 开放创作 | 50-100 |
| 技术内容生成 | 20-50 |
| 高精度任务 | 1-10 |
2. Top-p(核采样)
原理
# 伪代码实现
def top_p_sampling(prob_distribution, p=0.9):
sorted_probs, sorted_indices = sort_descending(prob_distribution)
cumulative_probs = calculate_cumulative(sorted_probs)
cutoff_index = find_first_exceeding(cumulative_probs, p)
valid_probs = sorted_probs[:cutoff_index+1]
sampled_token = random.choice(sorted_indices[:cutoff_index+1], weights=valid_probs)
return sampled_token
- 功能:动态选择累积概率超过
p的最小词集合 - 特点:
p=0.9表示只考虑覆盖90%概率质量的词汇- 自适应上下文:候选词数量随分布变化
典型值建议
| 场景 | p值范围 |
|---|---|
| 故事生成 | 0.9-0.95 |
| 对话系统 | 0.85-0.9 |
| 代码生成 | 0.7-0.85 |
3. Temperature(温度系数)
3.1. 背景知识:Softmax函数
Softmax函数是将一个实数向量转换为概率分布向量的常用函数。其定义为:对于输入向量 x = ( x 1 , x 2 , ⋯ , x n ) \mathbf{x}=(x_1,x_2,\cdots,x_n) x=(x1,x2,⋯,xn),经过Softmax函数处理后得到的输出概率分布向量 p = ( p 1 , p 2 , ⋯ , p n ) \mathbf{p}=(p_1,p_2,\cdots,p_n) p=(p1,p2,⋯,pn),其中 p i = e x i ∑ j = 1 n e x j p_i = \frac{e^{x_i}}{\sum_{j = 1}^{n}e^{x_j}} pi=∑j=1nexje

最低0.47元/天 解锁文章
556

被折叠的 条评论
为什么被折叠?



