认识大语言模型
我们在聊天软件里输入一句话,系统很快就能写出回答。这个过程看起来像两个人在交流,但如果想进一步学习 Agent,就需要了解:文字怎样进入模型,回答又是怎样生成的。
大语言模型,英文是 Large Language Model,简称 LLM,是通过大规模训练获得语言处理能力的一类深度学习模型。它能够根据给定的内容,进行文本生成、改写、摘要、翻译等任务。
名称中的“大”,通常与较大的模型参数规模和训练规模有关。这里的参数,就是上一篇提到的那些会在训练中调整、影响计算结果的数值。判断一个模型是否适合某项任务,还需要看训练数据、训练方法和实际效果,不能只看参数多不多。大语言模型与 Transformer
先看一个简单的例子。你输入:
请把“会议改到周五下午”改写得正式一点。
模型可能回答:
会议时间调整为周五下午。
这是一种可能的回答,不是某个模型的实测结果。我们就沿着这个例子,看看输入到输出之间发生了什么。
Token、编号与向量
电脑要计算这些文字,首先需要把它们转换成数值。常见的处理方式,是先由一个叫 Tokenizer 的组件,把文字转换成一串称为 Token 的基本单位,再为这些单位找到对应的编号。Tokenizer 通常译为“分词器”,但它切出来的单位不一定是日常所说的完整词语。
一个 Token 不一定等于一个汉字,也不一定等于一个英文单词。 同一段文字使用不同的分词器,得到的切分结果可能不同。因此,不能简单地把“100 个 Token”理解成“100 个字”。文字如何转换成 Token 和编号
编号的作用,可以先类比为书籍的索书号:帮助系统找到对应项目。假设某个单位的编号是 100,另一个是 200,这不表示后者的含义是前者的两倍,也不表示编号接近,意思就一定接近。
常见模型接着会根据编号,取出一组对应的数值。这一组数值叫“向量”,这里可以先把它理解为按顺序排在一起的一列数字。把 Token 编号映射成这种向量表示的环节,叫 Token Embedding,通常译为“词元嵌入”。这些表示可以随训练调整,供后面的神经网络继续计算。Embedding 怎样把编号变成向量
上下文计算与逐步生成
到了这一步,原本显示在屏幕上的文字,就有了模型能够计算的数值形式。后面的多层网络,还会结合文字顺序和前后关系,继续改变这些内部表示。
例如,处理刚才的请求时,“改写得正式一点”决定了任务要求,“会议改到周五下午”提供了需要改写的内容。只处理其中几个孤立的字,很难完成整个任务;模型需要在计算中利用这些内容之间的关系。
许多大语言模型采用 Transformer 结构,其中的“注意力机制”能够在计算时,把不同位置的信息按计算出的权重组合起来。这里的“注意力”是一个技术名称,可以先理解成一种利用上下文信息的计算方法。它的具体结构,会在后面的学习编号中单独介绍。Transformer 中的注意力机制
有了这些计算,模型怎样把回答写出来?
这里先看常见的“自回归生成”方式:模型根据已经给出的内容,预测接下来可能出现的 Token;选出一个以后,把它接到已有内容后面,再继续预测下一个。 语言模型还有其他结构和训练方式,这里先理解这一条常见的生成路线。生成模型与其他语言模型结构
在我们的例子中,模型接收到改写要求后,会为下一个 Token 的不同候选计算分数,并转换成概率分布。生成程序按照设定的规则选择一个候选,再让模型根据更新后的内容继续计算。重复这个过程,生成的 Token 序列就可以转换成我们看到的回答。
为了方便理解,可以把主要过程连起来看:
输入文字 → 转换成 Token 编号 → 映射成向量并经过网络计算 → 选择下一个 Token → 接回已有内容 → 继续生成 → 转换成可读文字
这里说的是 Token 级别的生成过程,所以屏幕上出现的“会议”两个字,内部可能对应一个或多个 Token。生成通常在遇到结束标记、达到长度限制,或满足其他停止条件时结束。
选择候选也不一定每次都取概率最高的那个。程序可以直接选择最高概率项,也可以按照某种采样规则,从候选中选择。因此,相同问题可能得到不同措辞。这种差异与生成设置有关,不能直接用来判断模型是否“学会了新东西”。文本生成与候选选择
训练怎样形成语言能力
接下来还有一个问题:模型为什么会算出这些概率?它又是怎样知道,“调整为”可能比“改到”更适合正式通知的?
这就要回到训练。
对于常见的自回归语言模型,预训练时可以从现成文本中构造任务:给出前面的 Token,让模型预测紧随其后的 Token。训练目标,就来自原文实际出现的下一个 Token。这里要预测的是原文怎样继续,并不等于训练程序已经核实了原文中的事实。
模型预测与原文目标之间的差异,会被转换成损失,再通过上一篇介绍的反向传播和优化器更新参数。大量这样的训练,让模型逐渐学到语言结构、表达习惯,以及文本中体现的知识和关系。
这种训练目标可以从数据本身构造,不需要人把每一句原文都另外写成一道问答题。这是“自监督学习”的一个例子。语言模型的自监督训练
不过,学会继续生成文字,与稳定地按照用户要求提供帮助,还有距离。面向对话的模型通常还会经过后续训练,例如使用“指令与合适回答”的样例进行微调,让模型更好地遵循任务要求。具体的预训练、微调和偏好训练,后面会继续展开。预训练与指令训练
因此,当你要求“改写得正式一点”时,模型会使用训练得到的参数,结合这次输入,生成符合要求的表达。它不必在训练资料里见过你此刻输入的完整句子,才有可能完成改写;是否真的改得准确,仍然要检查输出有没有保留原意、有没有增加未经提供的信息。
例如,原文只说“周五下午”,如果模型改成“本周五下午三点在会议室召开”,表达虽然完整,却擅自补充了时间和地点。对于这个任务,写得顺畅还不够,保留原文信息同样重要。
这里也能进一步理解“预测下一个 Token”的含义。它描述的是生成机制;一段输出是否体现出有效的翻译、分析或推理能力,还需要通过具体任务检验。仅凭生成机制,既不能保证回答正确,也不能直接断定模型只能完成简单的文字接续。
上下文、事实与能力边界
再把例子往前推进一步。假设你补充:
不要太生硬,像发给同事的消息。
模型可能据此调整措辞。这时,你新提供的信息会进入本次生成所使用的上下文。这里的“上下文”,就是模型当前能够用来生成回答的信息,包括被送入模型的任务要求、对话内容或参考资料等。
上下文影响这一次怎样回答;模型参数则来自训练。往对话里补充资料,通常是在改变输入,并没有立即改变模型参数。
上下文也有容量限制,这与“上下文窗口”有关。聊天应用可能选择保留部分历史内容、生成摘要,或从外部存储中取回资料。界面上能翻到很早以前的聊天,并不能证明那些内容都被送进了当前这一次模型计算。上下文窗口的含义
理解上下文以后,再看模型的错误,就容易一些了。
假设用户要求:“告诉我这次会议的具体地点。”如果当前输入没有地点,系统也没有从其他可靠来源取得地点,模型就缺少回答这个具体问题的依据。它可能说明信息不足,也可能生成一个听起来合理、实际上没有依据的地点。
生成式模型把看似可信、实际错误的内容当作事实输出,这类问题通常称为“幻觉”。语言流畅、语气肯定,甚至附带一个格式完整的引用,都不能单独证明内容真实。模型幻觉的含义
同样,语言模型具备生成回答的能力,并不自动意味着它正在查询实时信息。应用可以接入搜索、数据库或文件读取工具,把取得的结果提供给模型;有没有接入、这次有没有实际使用,需要看具体系统。即使提供了资料,也仍然需要检查模型是否正确使用了它。
这就自然接近了我们接下来要学习的大模型 Agent。
在刚才的任务里,模型把一句话改写成另一句话,工作就可以结束。如果用户进一步要求“查一下日历,确认会议时间,再把通知保存成文件”,系统就需要处理多个动作和中间结果。
语言模型可以帮助分析要求、生成通知,也可以生成调用工具的请求;真正读取日历、保存文件,则需要应用程序和相应工具去执行。系统还要接收执行结果,判断是否继续,以及什么时候结束。
接下来的 01.05:大模型 Agent,就从这里继续:怎样围绕语言模型组织这些能力,让系统根据任务和执行结果推进下一步。
当前学习编号:01.04 大语言模型 LLM。
下一学习编号:01.05 大模型 Agent。后续还有其他学习编号。
关联分支:文字进入模型的过程,对应 08.01 Token、08.02 Tokenizer 与子词切分、08.03 Token Embedding;结合上下文并生成文字,对应 08.04 上下文化表示、08.06 注意力机制、08.10 Transformer 模块、08.11 Encoder、Decoder 与架构差异、08.12 自回归生成与下一个 Token 预测。
训练与使用边界,对应 09.01 预训练、09.03 监督微调 SFT、09.04 指令微调与对话微调、08.15 模型参数、激活值与上下文窗口、08.16 模型能力边界与幻觉、13.16 提示词、上下文与记忆的区别。本文先建立整体认识,这些支系会在各自编号中单独解释。