尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从Token到生成:深入解析LLM预测下一个词的核心原理与工程实践

从Token到生成:深入解析LLM预测下一个词的核心原理与工程实践 1. 从“猜词游戏”到万亿参数LLM预测下一个词的直观理解我们每天都在玩一个“猜词游戏”。当你在手机输入法里敲出“今天天气真”这几个字时输入法大概率会给你推荐“好”、“不错”、“热”这些候选词。这其实就是一种最简单的“下一个词预测”。大型语言模型LLM所做的本质上就是这个游戏的超级进化版只不过它的“词汇量”和“上下文理解能力”达到了人类难以想象的高度。想象一下你面前坐着一位博览群书、记忆力超群的朋友。你刚说出“床前明月光疑是”他几乎不假思索就能接上“地上霜”。他并不是在背诵而是基于对无数文本的“阅读经验”瞬间计算出在“疑是”这个语境之后“地上霜”出现的概率远高于“红烧肉”或“计算机”。LLM就是这位朋友的数字化化身它的核心任务就是给定一串已经出现的词或更准确地说Token计算出下一个最可能出现的词是什么并以此为基础一个词一个词地“生成”出连贯的文本。这个过程在技术上被称为“自回归生成”。这个看似简单的任务背后却是一个极其复杂的系统工程。它不像查字典而更像是一个基于海量数据训练出的、拥有千亿甚至万亿参数的“概率宇宙”。模型每预测一个词都需要对这个宇宙进行一次快速扫描和计算。从我们输入一句话开始到模型输出第一个词中间经历了文本的数字化Token化、上下文的理解与表征Transformer编码、可能性的评估与选择解码等多个精密环节。理解这个过程不仅是理解当今AI如何“思考”的关键也能帮助我们在使用、调优甚至开发相关应用时避免很多想当然的错误。接下来我们就拆开这个黑盒看看从你按下回车键到模型给出回答究竟发生了什么。2. 基石从文本到Token——模型世界的“第一语言”在人类世界我们使用文字交流在LLM的世界里它只认识数字。因此任何文本在进入模型之前都必须被转换成模型能理解的格式——Token序列。这是整个预测流程的第一步也是最基础、却最容易引发问题的一步。2.1 Token化的本质一种高效的压缩与编码方案Token化不是简单地把每个汉字或英文单词映射成一个数字。它的核心目标是在“词汇粒度”和“序列长度”之间取得最佳平衡。如果以单个字符为Token如‘今’ ‘天’ ‘’ ‘天’ ‘气’ ‘真’序列会很长模型难以学习有意义的组合模式如果以整个句子为Token词汇表将变得无比庞大且无法处理新句子。因此主流的子词Subword分词法如BPE、WordPiece、Unigram应运而生。它们通过统计学习将频繁出现的字符组合如“ing”、“ation”、“我们”、“模型”作为一个独立的Token。例如“Transformer”这个单词可能会被拆分成“Trans” “form” “er”三个Token。这样做的好处显而易见解决未登录词问题即使模型从未见过“ChatGPTing”这个词它也可以根据学到的“ChatGPT”和“ing”两个Token来理解和生成它。平衡效率与效果用一个中等大小的词汇表通常3万到10多万可以高效地表示绝大多数文本。在实际操作中比如使用OpenAI的tiktoken库或Hugging Face的tokenizers库你会发现同一个句子用不同的分词器如cl100k_base对应GPT-4o200k_base对应o1得到的结果可能不同。一个关键的注意事项是Token的长度直接影响模型的计算成本和上下文窗口的“有效容量”。对于中文由于汉字本身信息密集一个汉字通常就是一个Token这使得在相同Token数限制下中文能承载的语义信息可能少于英文。这也是为什么在处理长中文文档时需要特别关注上下文是否被截断。2.2 Token ID与嵌入向量从离散符号到连续空间Token化后我们得到一串数字ID比如[2301, 792, 11, 1246, 345]。但模型无法直接处理这些离散的ID。下一步模型会通过一个叫做“嵌入层”的查找表将每个Token ID转换成一个高维的连续向量例如维度为4096或8192。这个过程可以理解为为每个“词”赋予了一个在模型语义空间中的“坐标”。这个嵌入向量至关重要它包含了模型从海量数据中学到的关于该Token的语义信息。在训练之初这些向量的值是随机初始化的。随着训练的进行模型通过调整这些向量使得语义相近的词如“猫”和“狗”在向量空间中的位置也接近而语义无关的词如“猫”和“哲学”则相距甚远。这里有一个实操心得预训练模型的嵌入层是高度特化的。如果你在一个新的领域如医疗、法律进行微调冻结嵌入层通常不是好主意因为新领域的术语如“血小板减少症”其向量表示可能需要调整以适应新的上下文。3. 核心引擎Transformer架构如何理解上下文得到了Token的嵌入向量序列后就进入了模型的核心——Transformer架构。它的任务是理解整个输入序列的上下文并为每个位置生成一个包含了上下文信息的“增强版”向量表示。Transformer摒弃了RNN/LSTM的顺序计算采用“自注意力”机制实现了高效的并行化上下文建模。3.1 自注意力机制全局关联的“信息聚会”自注意力机制是Transformer的灵魂。它的工作方式可以类比于一场讨论会。序列中的每个Token与会者都会做三件事生成问题基于自己的嵌入向量提出一个“查询”。准备答案同样基于自己的嵌入向量准备一个“键值对”“键”用于匹配查询“值”是实际要贡献的信息。交流互动每个Token用自己的“查询”去与会场里所有Token包括自己的“键”进行匹配计算得到一个“注意力分数”。这个分数决定了在思考当前Token时应该从其他每个Token那里汲取多少信息。最后用这些分数作为权重对所有Token的“值”进行加权求和得到当前Token新的表示。公式上对于输入序列矩阵X经过线性变换得到查询矩阵Q、键矩阵K、值矩阵V。注意力输出为Attention(Q, K, V) softmax(QK^T / sqrt(d_k)) V其中sqrt(d_k)是一个缩放因子防止点积结果过大导致softmax梯度消失。为什么需要多头注意力单一组的注意力可能只聚焦于一种关系例如语法结构。多头注意力例如32头或64头允许模型在不同的“表示子空间”中同时关注不同的信息。比如一个头可能关注句法依赖主谓宾另一个头可能关注指代关系“它”指代什么再一个头可能关注情感一致性。最后所有头的输出被拼接起来再经过一个线性层融合从而获得更丰富的上下文表征。3.2 编码器与解码器在预测任务中的分工原始的Transformer论文提出了编码器-解码器架构但在像GPT这样的纯自回归LLM中通常只使用解码器结构。这里需要仔细区分编码器如BERT所用在训练时可以看到完整的输入序列并通过自注意力学习每个Token的上下文表示常用于理解类任务如文本分类、情感分析。它的注意力是“双向的”每个Token都能看到序列中的所有其他Token。解码器如GPT所用在训练和生成时都只能看到当前时刻及之前的Token未来的Token是被“掩码”掉的。这是为了严格模拟自回归生成过程预测下一个词时你只知道已经说出来的话不知道后面要说什么。这种注意力被称为“因果注意力”或“掩码自注意力”。在GPT等模型的解码器块中其核心是一个掩码多头自注意力层后面跟着一个前馈神经网络。每个子层周围还有残差连接和层归一化以确保训练的稳定性。一个至关重要的细节是在生成阶段模型会缓存之前所有时间步的键值对。这样在预测第t个词时无需为前t-1个Token重新计算注意力只需计算最新Token的Q与缓存的所有K的注意力大大提升了生成效率。这也是为什么在API调用中你可以传递past_key_values参数来加速长文本生成。4. 从理解到生成解码策略与下一个词的诞生经过多层Transformer解码器的处理序列中最后一个Token即我们期望预测的下一个词的位置的输出向量包含了之前所有上下文的精华信息。这个向量将被送入模型的“语言模型头”。4.1 语言模型头从向量到概率分布“语言模型头”通常就是一个线性层全连接层它将高维的上下文向量例如4096维映射到整个词汇表大小的维度例如10万维。这个10万维的向量经过一个Softmax函数就被转换成了一个概率分布。假设词汇表是[“好” “不错” “热” “冷” …“人工智能”]那么对于上下文“今天天气真”模型输出的可能是一个类似这样的概率分布P(“好”) 0.55P(“不错”) 0.25P(“热”) 0.15P(“冷”) 0.04P(…) 很小P(“人工智能”) 近乎0至此模型已经完成了它的核心计算工作给出了在所有可能的下一个词上的一个概率分布。接下来的问题就是我们如何从这个分布中选出一个词4.2 解码策略贪婪、采样与束搜索选择哪一个词作为输出这就是解码策略。不同的策略会导致生成文本的风格和质量产生巨大差异。贪婪解码每次都选择概率最高的那个词。如上例中永远选择“好”。这种方法简单高效但容易导致生成重复、枯燥的文本比如“好好好好……”因为一旦进入某个高概率循环就难以跳出。随机采样完全根据概率分布随机选取。概率为0.55的“好”被选中的机会最大但也有可能选中“不错”甚至“冷”。这种方法生成的内容多样性高但可能不稳定有时会产生不合逻辑或偏离主题的词。核采样这是目前最常用的策略之一在多样性和可控性之间取得了很好的平衡。它首先将概率分布按值从大到小排序然后只保留累积概率达到某个阈值如top_p0.9的最高概率词项重新归一化这些词的概率然后从中采样。这样既避免了选择那些概率极低的奇怪选项又保留了一定的随机性。例如如果“好”、“不错”、“热”三者的累积概率已超过0.9那么“冷”及之后的词就会被过滤掉模型只从这三个词中随机选一个。束搜索这是一种考虑多个候选序列的全局优化方法。它维护一个大小为k束宽的候选序列列表。在每一步对每个候选序列都考虑词汇表中概率最高的k个扩展然后从所有k*k个可能的新序列中选择总体概率或对数概率之和最高的k个作为新的候选。束搜索能生成更连贯、更准确的序列特别适合事实性、确定性强的任务如机器翻译。但其计算成本高且对于开放生成长文本有时会导致过于保守和重复。在实际应用中我们通常结合使用温度参数和Top-p采样。温度参数T在Softmax之前调整概率分布的平滑程度T1使用原始分布T1使分布更平滑多样性增加0T1使分布更尖锐确定性增加倾向于高概率词。一个常见的配置是temperature0.8, top_p0.95这能在保持创造力的同时维持一定的可控性。5. 循环与迭代自回归生成的完整链条选中了一个词假设是“好”之后这个新生成的Token并不会直接输出给你就结束。相反它会被追加到原有的输入序列末尾形成新的输入序列“今天天气真好”。然后这个新的序列再次经过整个流程Token化虽然“好”已经是Token ID了、经过所有Transformer层、计算新的最后一个位置的概率分布、选择下一个词比如“”或“啊”。这个过程循环往复直到生成了一个特殊的结束符如|endoftext|。达到了预设的最大生成长度。在某些交互式场景中用户主动中断。这就是“自回归”的含义每一次预测的输出都作为下一次预测的输入模型像是在跟自己对话逐步编织出完整的文本。这里有一个非常重要的性能优化点KV缓存。在生成过程中对于已经处理过的Token序列其对应的键和值向量可以被缓存起来。当新Token加入时只需要为新Token计算其Q、K、V并与缓存的K、V进行注意力计算无需为整个历史序列重新计算这极大地提升了长文本生成的效率。这也是为什么LLM的生成速度通常远低于其处理等长输入的速度。6. 实战中的常见问题与调优技巧理解了原理我们来看看在实际使用和开发中会遇到哪些典型问题以及如何应对。6.1 重复与退化为什么模型会车轱辘话来回说这是自回归生成最常见的问题之一。模型陷入循环不断重复相同的短语或句子。根本原因概率分布陷入了局部最优。当某个n-gram如“这是一个非常好的非常好的”出现后模型历史上下文形成了一个强模式导致其后续预测该模式重复的概率极高。排查与解决调整解码参数这是首选方法。适当提高temperature如从0.7调到0.9或降低top_p如从0.95调到0.85可以打破概率分布的僵局引入更多变化。使用“重复惩罚”参数如repetition_penalty或frequency_penalty主动降低已出现Token的生成概率。检查提示工程你的输入提示本身是否包含了重复模式或诱导了重复尝试改写提示增加引导性指令如“请用多样化的语言描述”。模型能力问题如果在小模型上频繁出现可能是模型容量不足无法建模长距离依赖和复杂变化考虑换用更大或更先进的模型。6.2 生成无关或有害内容如何让模型“守规矩”模型有时会生成偏离主题、包含虚假信息或不符合伦理的内容。根本原因预训练数据包罗万象模型学到了所有模式包括不好的那些。在生成时如果没有约束它可能按照概率采样到不期望的内容。排查与解决后处理与过滤对生成结果进行关键词、敏感词过滤或使用另一个分类器进行内容安全审核。引导生成在提示中明确要求例如“请生成一段关于XX的、积极健康的文字”。使用系统提示词来设定角色和边界。使用安全层许多生产级API和开源框架如Transformers库的GenerationConfig集成了内容安全模块可以在生成过程中实时抑制有害Token的生成概率。微调与对齐通过指令微调、RLHF等技术从根本上调整模型的生成偏好使其与人类价值观对齐。这是ChatGPT等模型表现“听话”的核心技术。6.3 长文本生成中的“失忆”与逻辑矛盾生成长文档时模型可能会忘记前文设定或在后面出现与前文矛盾的情节。根本原因Transformer的注意力机制虽然是全局的但在固定上下文长度内。当生成文本超过缓存的历史长度如32K最早的信息会被丢弃。此外即使在同一上下文窗口内注意力权重也可能更聚焦于邻近Token远距离依赖可能被稀释。排查与解决利用长上下文模型选择支持更长上下文窗口的模型如128K、1M Token。结构化提示与摘要在生成长文本时主动在提示中插入关键信息摘要或要求模型分阶段生成并在每个阶段前复述核心设定。外部记忆体对于超长文本生成可以引入向量数据库等外部记忆系统将前文的关键信息存储和检索出来在生成时作为补充上下文输入给模型。6.4 生成速度慢如何优化推理性能对于实时应用生成速度至关重要。根本原因自回归生成本质上是串行的无法并行化。每个新Token的生成都依赖于前序所有Token且需要经过整个大模型的前向传播。排查与解决确保KV缓存开启这是最重要的优化。检查你的推理框架是否默认启用了KV缓存。量化与模型压缩使用INT8、INT4甚至更低精度的量化技术可以大幅减少模型内存占用和计算量提升推理速度通常对质量影响很小。使用更快的推理引擎如vLLM、TensorRT-LLM、DeepSpeed等它们通过优化的内核、连续批处理、PagedAttention等技术极大提升吞吐量。调整生成长度与束宽明确设置max_new_tokens避免无意义的过长生成。在非必需场景下使用贪婪解码或束宽为1的束搜索。硬件选择使用性能更强的GPU如H100或AI加速卡并利用多卡并行推理。7. 超越下一个词思维链与规划式生成标准的自回归预测下一个词有时会限制模型在复杂推理任务上的表现。近年来两种重要的技术扩展了这一范式思维链通过提示如“让我们一步步思考”引导模型不是直接输出最终答案而是先生成一系列中间推理步骤。这相当于让模型把“内心的思考过程”也Token化并生成出来。研究发现这能显著提升模型在数学、逻辑推理上的能力。实操技巧在构建复杂任务提示时明确要求模型“分步解答”或“展示你的推理过程”往往能得到更准确的结果。规划式生成对于写文章、编代码等需要长期规划的任务让模型先输出一个高层大纲或计划然后再根据计划分部分生成内容。这打破了严格的自回归顺序引入了顶层设计。例如模型可以先生成“第一章引言第二章原理第三章实验…”然后再去逐一生成每一章的内容。这能有效改善长文本的结构性和一致性。这两种技术本质上都是在利用“下一个词预测”这个基本能力通过巧妙的提示和设计让模型模拟出更高级、更结构化的认知行为。它们提示我们LLM的能力边界不仅取决于模型规模也取决于我们如何与之交互和引导。
返回列表