对于相同问题大模型的生成为什么会不同?
对于LLM来说,有好几种采样算法。但是要记住LLM既需要准确性也需要多样性。
前置基础(基于transformers官方库)
大语言模型是自回归生成:逐 token 预测,每一步基于上文输出词表 logits,通过解码算法选出下一个 token,循环直到输出结束符 EOS。
所有解码分为两大体系,由 do_sample 参数划分:
- 确定性解码 do_sample=False:无随机数介入,相同输入+相同参数,每次生成结果完全一致;包含贪婪、束搜索、多样束搜索。
- 随机采样解码 do_sample=True:引入随机采样机制,每次生成文本存在差异;基础为多项式采样(softmax),搭配 Temperature、Top-K、Top-P 做约束优化。
Temperature、Top-K、Top-P 不属于独立解码算法,是概率分布修正工具,仅作用于采样流程。
一、贪婪解码 Greedy Search
原理
每一步拿到词表概率分布后,直接选取当前概率最大的 token 追加到序列。
会完整使用全部上文上下文计算当前分布,仅做局部最优选择,不回溯、不对比多条候选序列。
transformers 参数
num_beams=1, do_sample=False,model.generate() 默认配置。
优缺点
优点:计算最简单、推理速度最快、输出稳定;
缺点:容易出现文本循环重复、局部语义生硬;无法一次性输出多条文本。
二、束搜索 Beam Search
原理
设置束宽 beam_size=K,每一步保留全局累计对数概率最高的 K 条完整候选序列(而非单个 token);
每轮将 K 条序列全部向前扩展,从所有新候选中重新筛选前 K 条高分序列;生成结束后,从全部完整序列里选出全局联合概率最高一条作为输出。
采用对数概率避免小数下溢,工业中常搭配 length_penalty 解决束搜索容易生成短句的缺陷。
transformers 参数
num_beams>1, do_sample=False
拓展:多样束搜索 num_beam_groups>1,可一次性输出多条风格差异明显的最优文本。
优缺点
优点:相比贪心,全局语义连贯性更好,重复问题大幅缓解;
缺点:依旧无随机性,创意类文本单调;算力开销高于贪心。
1. 解决什么问题?
贪心解码每一步只保留1条序列,只看当前最优token,容易陷入局部最优、句子重复、语义断裂。束搜索每一步保留 KKK 条候选序列(KKK 称为束宽 beam_size),在多条路径里全局择优,用少量算力换取整体文本连贯性。
2. 核心数学:序列对数累积概率
自回归序列 [x1,x2,...,xt][x_1,x_2,...,x_t][x1,x2,...,xt] 的联合概率:
P(x1,x2,...,xt)=∏i=1tP(xi∣x1,...,xi−1) P(x_1,x_2,...,x_t)=\prod_{i=1}^t P(x_i|x_1,...,x_{i-1}) P(x1,x2,...,xt)=i=1∏tP(xi∣x1,...,xi−1)
连续乘大量小于1的小数会出现数值下溢,工程统一取对数,乘积变累加:
logP=∑i=1tlogP(xi∣x1:i−1) \log P = \sum_{i=1}^t \log P(x_i|x_{1:i-1}) logP=i=1∑tlogP(xi∣x1:i−1)
束搜索比较的是每条完整序列的对数总分,分数越高代表这条句子整体越符合模型预期。
3. 分步执行流程(beam_size=2 举例)
输入prompt编码得到初始序列 S0S_0S0,初始分数 score=0\text{score}=0score=0。
- 扩展候选
对当前所有 KKK 条beam序列,分别走模型推理,得到词表每个token的log概率;
每条序列生成词表大小 VVV 个新序列,总候选数量:K×VK\times VK×V。 - 筛选Top-K高分序列
把全部 K×VK\times VK×V 条扩展后的序列按总分从高到低排序,只保留前 KKK 条作为本轮新beam;丢弃其余低分路径。 - 终止判断
只要某条beam末尾生成EOS结束符,就把这条序列存入最终候选池;
- 若收集满
num_return_sequences条完整句子,提前停止; - 若达到最大长度上限,停止生成。
- 最终输出
从所有完整、以EOS结尾的句子中,选出对数总分最高的1条作为结果;如需多条则取前N条。
4. 标准束搜索固有缺陷
- 偏好短句
短序列累加项少,分数天然更高,模型倾向早早输出EOS,句子残缺。
解决方案:length_penalty长度惩罚,对长序列加分、短序列扣分。
KaTeX parse error: Expected 'EOF', got '_' at position 52: …g P}{(\text{seq_̲len})^\alpha}
α>1\alpha>1α>1:鼓励长句;α<1\alpha<1α<1:鼓励短句。 - 结果同质化严重
多条beam路径演化后内容高度相似,很难产出风格不同的多版本文本。 - 无随机性,输出固定
相同输入参数每次生成完全一致,不适合小说、对话等创意场景。 - 算力开销随K线性上涨
beam_size越大,并行推理序列越多,显存/速度开销明显上升。
介绍一下束搜索的典型衍生变体(transformers 全部支持)
变体1:多样束搜索 Diverse Beam Search
解决痛点
标准beam的K条候选高度重复,想要一次性输出多条差异大的译文/文案。
核心机制:分组束
新增参数 num_beam_groups = G,将总beam数量均分G组:
KaTeX parse error: Expected 'EOF', got '_' at position 11: \text{beam_̲size} = G \time…
- 每组独立执行束搜索,组与组之间增加多样性惩罚项;
- 筛选序列时,会降低和其他组已选序列相似候选的分数;
- 每组产出一条最优句子,最终得到G条语义、措辞差异明显的文本。
参数配置
num_beams>1, num_beam_groups>1, do_sample=False
适用场景
机器翻译多版本输出、多条摘要备选、多条广告文案生成。
变体2:束采样 Beam Sample / Stochastic Beam Search
解决痛点
标准束搜索完全确定性,缺乏创意;纯采样容易语句混乱。束搜索结构+随机采样折中。
核心机制
- 依旧维护K条beam候选序列;
- 不再按分数argmax择优,而是对K×V候选序列做多项式随机采样选出下一轮K条beam;
- 同样支持temperature、top_p调节随机程度。
参数配置
num_beams>1, do_sample=True
特点
兼顾束搜索的全局连贯性与采样的多样性,长文本故事生成常用。
变体3:受限束搜索 Constrained Beam Search
解决痛点
强制生成包含指定关键词、固定句式、实体名词(如产品名、专有名词)。
核心机制
在每一轮筛选beam时增加硬约束:
force_words_ids:必须出现指定词语;prefix_allowed_tokens_fn:自定义每一步允许生成的token集合;- 不满足约束的序列直接大幅扣分,不会被选入beam。
适用场景
法律文书、固定格式输出、品牌文案、关键词问答。
变体4:块束搜索 Block Beam Search(轻量化优化)
核心改进
不逐token扩展beam,一次生成一整段token块再筛选,减少模型前向传播次数,提速;
多用于离线批量翻译,transformers高层封装较少直接暴露。
变体5:长度可控束搜索(基于length_penalty)
不算独立算法,是标准束搜索的调参增强:
length_penalty > 1:新闻、小说、长摘要;length_penalty < 1:短句标题、指令极简回答。
变体6:多候选束输出(num_return_sequences)
标准束搜索扩展用法:
设置 num_return_sequences=N,要求N ≤ beam_size;
生成结束后返回分数最高的N条完整句子,不增加多样性,只是输出多条近似结果。
各类束搜索横向对比
| 类型 | 是否随机 | 多条结果差异性 | 核心适用场景 |
|---|---|---|---|
| 标准束搜索 | 否 | 低,内容近似 | 翻译、摘要、高精度问答 |
| 多样束搜索 | 否 | 高,分组差异化 | 需要多条不同版本文案/译文 |
| 束采样 Beam Sample | 是 | 中高 | 故事、对话、创意长文本 |
| 受限束搜索 | 否 | 可控 | 强制包含关键词、固定格式生成 |
束搜索与贪心/采样关键边界区分
num_beams=1:无束结构,只有两种分支do_sample=False→ 贪心解码do_sample=True→ Top-P/Top-K 随机采样
num_beams>1:启用束结构do_sample=False→ 标准/多样/受限确定性束搜索do_sample=True→ 束采样(随机束)
三、多项式采样 Multinomial Sampling(基础随机采样)
原理
基于模型原生完整词表概率分布做随机采样,概率越高的 token 被抽中概率越大,天然带来生成多样性。
transformers 参数
num_beams=1, do_sample=True
优缺点
优点:彻底解决确定性算法文本重复问题;
缺点:直接使用全词表分布,会大量采样极低概率无意义 token,极易出现语法错乱、乱码,工业几乎不会单独使用,必须搭配截断/平滑工具。
四、Top-K 采样
原理(关键:包含概率重归一化)
- 将全部 token 按预测概率从高到低排序;
- 只保留前 K 个概率最高的 token,直接丢弃剩余所有低概率候选;
- 对保留的 K 个 token 的概率重新归一化,保证总和为 1;
- 在归一化后的分布中随机采样下一个 token。
特点
固定候选集数量,适配概率分布稳定场景;但文本概率分布动态变化,固定 K 值很难适配所有上下文,容易冗余候选或截断有效词。
五、Top-P 核采样 Nucleus Sampling
原理
不固定候选数量,动态筛选最小的高概率子集:
- token 按概率降序排列;
- 持续累加概率,直到累积总和 ≥ 预设阈值 P;
- 仅保留参与累加的 token,概率重新归一化后采样。
特点
自适应候选集大小:概率集中时候选少、分布分散时候选自动增多;是目前对话、写作场景最主流采样截断方案,相比 Top-K 容错性更强。
六、Temperature 温度系数(分布平滑工具)
数学作用
对原始 logits 做缩放:zi′=zi/Tz_i' = z_i / Tzi′=zi/T,再经过 softmax 生成概率分布,仅配合采样使用。
分段效果:
- T→0+T \to 0^+T→0+:概率分布极度尖锐,等价贪心解码,无多样性;
- T=1T = 1T=1:原始概率分布,不做任何修改;
- T>1T > 1T>1:高低 token 概率差距缩小,分布更平缓,文本随机性、创意性大幅提升;
- T→+∞T \to +\inftyT→+∞:所有 token 概率趋近相等,完全随机乱生成,无可读性。
工程常用区间
- 严谨场景(代码、问答、翻译):0.2 ~ 0.6
- 通用对话:0.7 ~ 1.0
- 小说、诗歌、创意文案:1.0 ~ 1.5
七、工业标准组合使用方案
- 高精度、确定性任务(翻译、摘要、知识库问答)
束搜索:num_beams=4~8, do_sample=False - 对话、故事、创意生成(通用业务)
采样组合:do_sample=True, top_p=0.9, temperature=0.7~1.2 - 极简快速生成、本地低算力设备
贪心解码num_beams=1, do_sample=False
八、参数逻辑总表
| 解码类型 | 参数配置 | 输出特性 |
|---|---|---|
| 贪婪解码 | num_beams=1, do_sample=False | 确定、最快、易重复 |
| 标准束搜索 | num_beams>1, do_sample=False | 确定、文本流畅、无创意 |
| 基础多项式采样 | num_beams=1, do_sample=True | 随机、易乱码,不单独使用 |
| Top-P+Temperature 采样 | do_sample=True + top_p + temperature | 随机、均衡流畅与多样性,主流 |
| 束采样 Beam Sample | num_beams>1, do_sample=True | 束结构+随机,长文本质量更高 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)