Text Generation
文本生成是语言模型撰写文本的过程:模型每次预测一个词元,并通过贪心解码、束搜索或采样来选择词元。
文本生成是模型自动生成书面语言的过程,内容从一句简短回复到完整报告或程序不等。如今,文本生成主要由大型语言模型(LLM)完成,这些模型以自回归方式工作:给定提示词后,模型会为其词汇表中的每个token计算概率,选出一个 token,将其添加到文本末尾,然后重复此过程,直到模型决定停止。同样的循环驱动着聊天助手、代码补全、机器翻译和文本摘要。早期系统使用模板,或者从 n-gram 和循环神经网络模型中采样;自 2019 年 GPT-2 起,Transformer让生成连贯的长文本变得切实可行。
自回归生成的工作原理#
分词会将提示词转换成 token ID,模型会在一次并行预填充过程中处理所有 token,并将每个 token 的注意力键和值存入 KV 缓存。之后,每个解码步骤只会将最新 token 输入模型,读取缓存并生成 logits(每个词汇表条目对应一个原始分数),再由 softmax将其转换为概率。解码策略会选出下一个 token,该 token 随即流式传给用户并加入序列。遇到序列结束 token、停止字符串或 token 数量限制时,生成就会停止,因此输出长度是在生成过程中决定的:
预填充需要大量计算,而解码受内存带宽限制,因此服务引擎会精心安排这两个阶段,例如采用分块预填充。流式传输让应用能够在文本生成时即时显示内容:Ultralytics LLM 接口会将 stream=True 传递给 OpenAI SDK,因此 YOLO26应用可以在每个 response.output_text.delta 事件到达时,逐个 token 打印模型对检测场景的描述。
解码策略#
解码策略对输出的影响不亚于模型本身。贪心解码总是选取概率最高的 token,虽然结果确定,但容易重复。束搜索会保留概率最高的 k 个部分序列,并返回其中最佳的完整序列,因此适合翻译这类只有一个正确答案的任务。采样会从概率分布中抽取 token,通常会先对分布进行调整:温度会在 softmax 之前缩放 logits,top-k 采样只保留概率最高的 k 个 token;核采样(top-p)由 Holtzman 等人于 2019 年在《神经文本退化的奇特案例》中提出,它会保留概率总和达到 p 的最小 token 集合。下面使用 PyTorch中的五 token 词汇表展示这两种效果:
import torch
# Next-token logits over a five-word vocabulary after the prompt "I took the"
vocab = ["bus", "train", "car", "stairs", "banana"]
logits = torch.tensor([3.0, 2.4, 1.8, 0.6, -2.0])
# Temperature divides the logits: low values sharpen the distribution, high values flatten it
for temperature in [0.5, 1.0, 1.5]:
probs = torch.softmax(logits / temperature, dim=-1)
print(f"T={temperature}:", ", ".join(f"{w} {p:.2f}" for w, p in zip(vocab, probs)))
# Top-p (nucleus) sampling keeps the smallest set of tokens whose probabilities reach p
probs, order = torch.softmax(logits, dim=-1).sort(descending=True)
keep = probs.cumsum(dim=-1) - probs < 0.9
print("Top-p 0.9 keeps:", [vocab[i] for i in order[keep]])
# Sample from the renormalized nucleus
torch.manual_seed(0)
picks = torch.multinomial(probs[keep] / probs[keep].sum(), num_samples=10, replacement=True)
print("Samples:", [vocab[order[i]] for i in picks])温度为 0.5 时,“bus”的概率为 0.71;温度为 1.5 时,该概率降至 0.42,而“banana”的概率则从 0.00 升至 0.02。Top-p 0.9 会保留“bus”“train”和“car”,它们的概率总和为 0.95,因此永远不会采样到“stairs”和“banana”;采样 10 次会得到这三个保留项的多样组合。其他控制也会作用于相同的 logits:重复惩罚会降低已使用 token 的分数,而约束解码会屏蔽所有会破坏语法或 JSON 架构的 token,API 正是通过这种方式保证结构化输出。推测解码则让小型草稿模型提出多个 token,再由大型模型一次性验证,从而加快生成速度。
文本生成与相关术语的区别#
- 语言建模: 学习下一个 token 的概率,这是使生成成为可能的训练目标。生成是该模型在推理阶段的使用方式。
- 序列到序列模型: 编码器-解码器模型根据单独的输入生成输出文本,例如翻译任务。仅解码器 LLM 则通过续写提示词来完成相同任务。
- 扩散语言模型: 通过多个去噪步骤并行细化所有位置来生成完整段落,而不是一次生成一个 token。
- 文本生成图像: 输入文本并生成像素。
质量与风险#
生成的文本无论正确与否都可能很流畅,因此幻觉是事实性任务中的主要风险;检索增强生成(RAG)会将源文档放入提示词中,以减少幻觉。较低的温度会让答案更具可重复性,而较高的温度会增加多样性,同时也更容易选中概率较低、错误的 token。机器生成的文本也很难被识别,因此研究人员正在开发AI 水印。在 2020 年的 GPT-3论文中,人们被要求区分由这个拥有 1,750 亿参数的模型撰写的 200 字新闻文章与人工撰写的文章,答对率仅为 52%。










