目 录CONTENT

文章目录

top-k和top-p的区别

~梓
2026-06-29 / 0 评论 / 0 点赞 / 1 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

top-k 与 top-p 学习笔记

这两个概念经常被混在一起问,但它们属于不同阶段、含义不同。最大的混淆点是:top-k 在检索和生成两个阶段都有,而 top-p 只在生成阶段。本笔记把三者彻底分清。


一、核心混淆点

top-k 在两个阶段都有:
  检索阶段 top-k:  取相似度最高的 k 个文档        (RAG 用)
  生成阶段 top-k:  采样时只考虑概率最高的 k 个词   (LLM 用)

top-p 只在生成阶段:
  生成阶段 top-p:  采样时只考虑累积概率达 p 的词集合 (nucleus sampling)

所以"top-k vs top-p"这个问题本身就有歧义——要分清是检索阶段还是生成阶段。


二、两个阶段

检索阶段(RAG 检索文档)

从向量库里挑文档,用 top-k(取最相似的 k 个)。没有 top-p。

生成阶段(LLM 生成下一个词)

LLM 每次生成一个词,从词表里选。采样策略有 top-ktop-ptemperature


三、检索 top-k(RAG 用)

含义

从向量库检索时,取和 query 相似度最高的 k 个文档。

query 向量 vs 所有文档向量 → 算相似度 → 排序 → 取前 k 个

例子

相似度排序: D1(0.92), D3(0.80), D2(0.71), D4(0.12), D5(0.08)
top-k=3 → 取 D1, D3, D2

作用

控制召回文档数量。k 太小可能漏掉相关文档,k 太大可能引入噪声(不相关的)。

特点

  • 固定数量:永远取 k 个
  • 只看相似度排名,不看分数差距

四、生成 top-k(LLM 采样)

背景

LLM 生成下一个词时,对词表里每个词算一个概率,然后按概率采样。直接按全词表采样会有问题:大量低概率词拉低质量。

含义

只考虑概率最高的 k 个词,从这 k 个里按概率采样,其余词直接忽略。

例子

下一个词的概率:

"的" 0.40
"是" 0.20
"在" 0.15
"有" 0.10
"了" 0.05
"也" 0.03
... (剩下几千个词概率极低)

top-k=3:只看前 3 个(的/是/在),重新归一化后采样:

"的" 0.40/(0.40+0.20+0.15) = 0.53
"是" 0.20/0.75 = 0.27
"在" 0.15/0.75 = 0.20

从这 3 个里按概率抽一个。

作用

过滤掉大量低概率噪声词,只在高概率词里采样。

特点

  • 固定数量:永远只看 k 个词
  • 不管概率分布形状(集中的时候 k 太多引入噪声,分散的时候 k 太少漏掉好词)

五、生成 top-p(nucleus sampling)

含义

只考虑累积概率达到 p 的最少词集合。从概率最高的词开始累加,加到累积概率 ≥ p 就停,这些词里采样。

例子(同上概率)

"的" 0.40  → 累积 0.40
"是" 0.20  → 累积 0.60
"在" 0.15  → 累积 0.75
"有" 0.10  → 累积 0.85
"了" 0.05  → 累积 0.90  ← 达到 p=0.9, 停

top-p=0.9:取前 5 个词(的/是/在/有/了),归一化后采样。

作用

动态调整候选词数量:

  • 概率集中时(一个词概率很高):少量词就到 p,候选少,更确定
  • 概率分散时(没有明显高概率词):要多取几个才到 p,候选多,更多样

特点

  • 动态数量:候选数随概率分布变化
  • 比_top-k 更自适应:分布集中时候选少,分散时候选多

六、top-k vs top-p(生成阶段对比)

top-k top-p
候选数量 固定 k 个 动态(累积概率达 p)
依赖概率分布 不依赖(永远 k 个) 依赖(集中少、分散多)
自适应性
极端情况 分布集中时 k 太多引入噪声 不会(自动减少候选)

直观对比

分布集中时("的" 0.9,其他都低):

  • top-k=50:还是看 50 个,引入一堆低概率噪声
  • top-p=0.9:只看"的"(累积 0.9 就停),干净

分布分散时(最高才 0.1):

  • top-k=50:看 50 个,可能够
  • top-p=0.9:要看十几个才累积到 0.9,自动多取

top-p 更智能,所以现代 LLM 多用 top-p。


七、temperature(顺带)

调整概率分布的尖锐程度,和 top-k/top-p 配合控制生成随机性。

原始概率: "的" 0.40, "是" 0.20, "在" 0.15...

temperature 低 (如 0.2): 分布变尖, "的" 概率更高 → 更确定, 偏向高概率词
temperature 高 (如 1.5): 分布变平, 概率差距缩小 → 更随机, 多样性高
temperature=0: 贪心, 永远选概率最高的词
  • 低温度(0~0.3):确定、保守,适合事实问答、代码
  • 高温度(0.7~1.0):多样、有创意,适合聊天、写作

八、三者怎么配合

生成阶段通常同时设置 top-k、top-p、temperature,组合控制生成行为:

temperature 调整概率分布尖锐度
  ↓
top-k / top-p 筛选候选词
  ↓
从候选里按概率采样

常见配置:

  • 事实问答:temperature=0, top-p=1(贪心,确定)
  • 聊天:temperature=0.7, top_p=0.9(多样但不离谱)
  • 创意写作:temperature=1.0, top_p=0.95

本项目 RAG agent 用 temperature=0.7,没显式设 top-p(用默认)。


九、完整对比表

检索 top-k 生成 top-k 生成 top-p
阶段 检索 生成 生成
选什么 文档
数量 固定 k 固定 k 动态(累积概率 p)
依据 相似度排名 概率排名 累积概率
用途 RAG 召回文档 LLM 采样候选词 LLM 采样候选词
本项目 k=3 未显式设 未显式设

0

评论区