大语言模型入门:从语言模型到N-gram、预训练与对齐
简介:这份面向大语言模型初学者与转型开发者的PDF文档,围绕语言模型的基本概念、技术脉络与常见评估方法展开,帮助读者建立从统计语言模型到LLM的完整认知框架。文档以1个PDF文件交付,压缩包约3.24MB,轻量便携,适合通勤或碎片时间系统阅读。内容从LLM的定义、参数规模及GPT-3、ChatGPT、GLM、BLOOM、LLaMA等代表模型切入,梳理语言模型四阶段演进,并详解N-gram的链式法则、马尔科夫假设、bigram与trigram计数及数据稀疏问题,再延伸至神经网络语言模型的词向量拼接、全连接层、tanh与softmax输出流程,同时补充评估指标。已有129人学习,适合希望打牢术语、模型演进与概率建模基础的入门者按章节查漏补缺,也可作为课程笔记与技术分享的参考底稿。
1. 大语言模型入门先弄懂一件事:它到底在“算”什么
大语言模型入门最容易卡住的地方,不是参数有多少,而是没弄清它本质上仍是一个语言模型。手机输入法打“今天天气”,后面常蹦出“不错”;聊天框里打“我想去”,后面常接“吃饭”。它并不真的懂天气,也不真的想去吃饭,它只是在算下一个词出现的概率。
把这个直觉放大到千亿级参数、海量文本和复杂对话,就是大语言模型让人惊讶的地方。语言模型这四个字听起来学术,拆开却很朴素:给一串词,判断这串词像不像正常话;再往前一步,根据前文预测下一个词。搞懂这条主线,再看预训练、微调、对齐、幻觉这些词,就不会被术语牵着走。
值得花十分钟弄明白,是因为今天很多讨论把“会聊天”和“真理解”混在一起。知道它在算概率,就能明白它为什么流畅,也能明白它为什么会一本正经地胡说。
2. 语言模型到底是什么:从“这句话像不像人话”说起
2.1 一句话定义:给句子打概率的模型
通俗地说,语言模型就是给一个句子序列算概率的模型。假设有一个很小的词典,里面只有“黑马、程序、员、来、学习”几个词,那么“程序员来学习”是一个词序列,“学习黑马来程序”也是一个词序列。语言模型要做的事,就是给前者高一点的概率,给后者低一点的概率。它不直接告诉你语法规则,而是用概率表达“这句话在语料里像不像人话”。
标准定义可以写成:对于句子序列 S = {W1, W2, W3, …, Wn},语言模型计算 P(S),也就是这串词按这个顺序出现的概率。P(S) 必须大于等于 0。概率越高,说明这个序列越符合模型见过的语言习惯;概率越低,说明它越别扭。这里的关键不是“模型喜不喜欢”,而是“在训练语料所反映的语言分布里,这串词有多常见”。
从生成角度看,语言模型还有另一种同样实用的定义:给定一个短语,它能预测接下来的一个词。比如给定“我想去打”,模型会在“篮球”“晚饭”“游戏”等候选词上分配概率。概率最高的那个词,往往就是最符合语境的接法。聊天、写作、翻译、问答,表面上是不同任务,底层都离不开这种“看前文、估下一个词”的动作。
这也是为什么语言模型既能打分又能生成。打分时,它判断整句概率;生成时,它把句子拆成一步一步的条件概率,每步选一个词,再把这个词放回前文继续算。理解了这个双重视角,后面看 N-gram、神经网络语言模型和大语言模型,就不会觉得它们是四套完全无关的东西。
2.2 为什么用链式法则:整句概率太难估,就拆成一步步接话
直接统计整句概率听起来简单:准备一个语料库,数一数某个句子出现了多少次,再除以总句子数。假设数据集里共有 N 个句子,某个句子出现了 n 次,那么 P(S) = n / N。这个办法在小例子里成立,一到真实语言就翻车。因为句子组合近乎无限,绝大多数合理句子都没在语料里出现过,按最大似然估计,它们的概率会直接变成 0。模型没见过“程序员来学习黑马程序”,不代表这句话不可能出现。
于是要用概率论里的链式法则,把整句概率拆成条件概率的连乘:P(W1, W2, …, Wn) = P(W1) × P(W2|W1) × P(W3|W1,W2) × … × P(Wn|W1,…,Wn-1)。通俗地说,先估第一个词出现的概率,再估“在第一个词已经出现的情况下第二个词出现的概率”,再估“在前两个词已经出现的情况下第三个词出现的概率”,一路接下去。整句概率难估,是因为要同时看所有词;拆成条件概率后,每一步只关心“前文给定后,下一个词接什么”。
这个拆法也解释了为什么语言模型和“接龙”这么像。接龙时,你不需要一次性想好整段话,只要看前面几句,接出下一句。语言模型也是这样,它把长句子拆成很多个小的预测问题。区别在于,人接龙靠生活经验,模型靠统计规律和参数。链式法则不是语言模型独有的技巧,而是把联合概率拆成条件概率的通用方法;语言模型把它用在词序列上,于是“算整句概率”和“预测下一个词”变成了同一件事的两种看法。
这里还有一个容易被忽略的点:条件概率里的“前文”越长,理论上信息越充分,但估计难度也越大。因为“前文”每多一个词,可能的组合就多一层。N-gram 后来引入马尔科夫假设,本质上就是在这里做取舍:不看完所有前文,只看最近几个词,用有限记忆换可计算性。
2.3 语言模型不只是“打分”:生成、补全、对话都从预测下一个词来
很多人第一次听到语言模型,会以为它只是一个“语法打分器”。这只说对了一半。打分是它的基础能力,生成是它的自然延伸。给定前文,模型给每个候选词一个概率,选一个词输出;再把输出词拼回前文,继续预测下一个词。这样一步步走,就能从“我想去打”走到“我想去打篮球”,也能从一句提示走到一段回答。
文本分类可以看成“给定文本,判断它属于哪一类”;问答可以看成“给定问题,生成答案”;翻译可以看成“给定一种语言的句子,生成另一种语言的句子”;对话可以看成“给定对话历史,生成下一句回复”。这些任务的形式不同,但都可以塞进“条件生成”的框架:给定输入序列,估计输出序列的概率。语言模型学的正是序列概率,所以它能被迁移到很多任务上。
这也是大语言模型让人觉得“什么都能干”的原因。它并不是为每个任务单独写一套规则,而是先在海量文本里学语言分布,再通过提示、示例或微调,把同一套预测能力引导到不同任务上。当然,能生成不等于能保证事实正确。模型会优先选“像”的下一个词,而不是自动去查证“真”的下一个词。流畅和正确之间,隔着一道需要评估和外部工具来补的缝。
理解到这一层,再看“大语言模型”就不会神秘化。它仍然在做语言模型的事:算序列概率、预测下一个词。只是它的参数更多、训练数据更广、训练方式更复杂,于是表现出了对话、推理、代码生成等更像人的能力。
3. 从N-gram到神经网络:语言模型为什么要一次次换引擎
3.1 N-gram:用前N-1个词做“有限记忆”的统计模型
链式法则把整句概率拆成条件概率,但条件概率里的前文太长,仍然没法估。N-gram 的做法是加一个马尔科夫假设:一个词出现的概率,只和它前面有限的几个词有关。如果假设当前词只和前面一个词有关,就是 bigram,也叫二元语言模型;只和前面两个词有关,就是 trigram;如果假设词和周围词独立,就是 unigram。一般说 N 元模型,就是假设当前词只和前 N-1 个词有关。
以 bigram 为例,P(Wi|W1,…,Wi-1) 被简化成 P(Wi|Wi-1)。参数用计数就能估:先数一数前一个词 Wi-1 出现了多少次,记作 C(Wi-1);再数一数词对 (Wi-1, Wi) 出现了多少次,记作 C(Wi-1, Wi);两者相除,就是条件概率。这个办法很直观,完全包含了前 N-1 个词的信息,参数也容易训练,可解释性强。早期的统计语言模型大量使用 bigram 和 trigram,原因就在这里。
用一个极简语料演示 bigram 条件概率的计算逻辑:
# 用两条极简句子演示 bigram 条件概率:P(打|去) = C(去,打) / C(去) from collections import Counter corpus = [ ["我", "想", "去", "打", "篮球"], ["我", "想", "去", "吃", "晚饭"], ] bigram = Counter() # 统计相邻词对,例如 ("去", "打") unigram = Counter() # 统计单个词,例如 "去" for sent in corpus: for word in sent: unigram[word] += 1 for left, right in zip(sent, sent[1:]): bigram[(left, right)] += 1 p_da_qu = bigram[("去", "打")] / unigram["去"] # 条件概率 P(打|去) print(p_da_qu)这段代码里,bigram存的是分子 C(Wi-1, Wi),unigram存的是分母 C(Wi-1)。zip(sent, sent[1:])把句子切成相邻词对;p_da_qu就是“在‘去’已经出现的情况下,下一个词是‘打’的概率”。真实语料大得多,还要处理没见过的词对,通常要加平滑,否则分母或分子为 0 时概率会直接归零。参数含义不复杂:分子看“这对词一起出现多少次”,分母看“前一个词单独出现多少次”。
N-gram 的局限也很明显。它只能建模到前 N-1 个词,记忆窗口有限;N 越大,参数空间呈指数增长;数据稀疏和 OOV 问题很难避免;泛化能力也差,没见过的组合很难合理估计。比如“我想去打篮球”和“我想去打晚饭”,bigram 能靠局部搭配算出前者更常见,但它很难真正理解“打”后面接什么取决于更长的语境。N-gram 像一本记满固定搭配的短语手册,查得到就准,查不到就僵。
3.2 神经网络语言模型:把词变成向量,缓解数据稀疏
N-gram 的痛点是“没见过就为零”。神经网络语言模型的思路是:不再只数词对,而是把词映射成连续向量,让模型从相似词、相似上下文里学到泛化。输入是前 n-1 个词,每个词先查表得到词向量 C(w),再把这几个向量首尾拼接成一个 (n-1)×m 的向量 x。这个 x 进入全连接层,经过 tanh 激活函数处理,最后输出 V 个节点,V 是词汇表大小。每个输出节点对应一个词作为下一个词的未归一化分数,再用 softmax 归一化成概率,概率最大的词就是预测结果。
通俗地说,N-gram 把词当成孤立的符号,神经网络语言模型把词当成空间里的点。含义相近的词在向量空间里靠得近,上下文相似的词也能共享统计强度。于是即使某个具体词对没在语料里出现过,模型也能根据相似词对给出一个不那么离谱的概率。这就是它比 N-gram 泛化更好的原因,也是数据稀疏问题被缓解的关键。
但神经网络语言模型也不是万能药。它对长序列的建模能力仍然有限,输入窗口还是前 n-1 个词;训练深层网络时可能出现梯度消失;可解释性也比 N-gram 弱。它像是从“查短语手册”升级到“看词向量之间的相似关系”,但还没有解决“如何让模型有效记住很长前文”的问题。这个问题要等 Transformer 架构和预训练范式成熟后,才有更大的改观。
3.3 预训练加微调:Transformer把语言模型推上新台阶
基于 Transformer 的预训练语言模型,把语言模型的能力又推高了一层。它的核心变化不是换了一个预测公式,而是换了一套学习方式:先在大规模通用文本上预训练,让模型学习通用的语言表示和知识;再在具体下游任务上微调,用任务数据调整模型,让它适应分类、问答、翻译等具体目标。预训练像先读大量杂书,建立语感和常识;微调像入职后针对岗位做专项训练。
这一阶段的模型大致有编码器式、解码器式和编码解码混合式几类。编码器式擅长理解上下文,常用于分类、抽取类任务;解码器式擅长自回归生成,常用于续写、对话;混合式兼顾理解和生成。它们都借助 Transformer 的注意力机制,让模型在处理一个词时能关注到序列中其他位置的信息,比只盯着前 n-1 个词更适合长距离依赖。
预训练加微调的优点很实在:泛化能力更强,语义表示更丰富,能有效防止过拟合,下游任务不必从零训练。缺点同样明显:计算资源需求大,训练成本高,可解释性差。模型像一个巨大的黑匣子,输入输出都能看见,中间为什么这么判断却很难逐条拆开。对入门者来说,这里最值得记住的是范式变化:从“针对一个任务设计一套特征”转向“先学通用表示,再迁移到任务”。大语言模型 later 的很多能力,都是在这条路上继续放大规模、继续调整训练目标得来的。
4. 大语言模型“大”在哪里:参数、数据与对齐的三重变化
4.1 参数规模跨过门槛:从千万级到千亿级发生了什么
大语言模型,英文缩写 LLM,是一种人工智能模型,目标是理解和生成人类语言,能处理文本分类、问答、翻译、对话等多种自然语言任务。它仍然属于语言模型,但通常指包含数千亿甚至更多参数的语言模型;目前常见说法把参数量超过 100 亿(10B)的模型归入大语言模型。参数可以理解为模型内部可调整的数值,它们在海量文本上训练得到,决定了模型如何把输入映射到输出。
规模跨过某个门槛后,能力会出现明显跃迁。小模型也能做语言模型的事,但往往在复杂语境、长尾知识、多步指令上表现吃力;参数变大、训练语料变广后,模型能记住更多模式,也更容易在没专门训练过的任务上给出像样结果。原文提到一种很有代表性的变化:有的千亿级模型可以在不调整权重的情况下,仅依据用户给出的任务示例完成具体任务。通俗地说,就是“不重新培训,只给几个例子,它就能照着做”。这种能力让大语言模型从“一个任务一个模型”走向“一个模型多种任务”。
但“大”不是免费午餐。参数越多,算力要求越高,训练时间越长,部署成本也越大。参数规模像发动机排量,排量大通常动力强,但油耗、散热、维护成本也跟着上来。入门阶段不必迷信参数数字,更该看模型在目标任务上的实际表现、响应成本、上下文长度和可控性。参数是能力的基础之一,不是能力的全部。
4.2 训练范式变化:预训练、指令微调、人类对齐
大语言模型的训练通常不是一步到位,而是分层次推进。第一层是预训练:在大量文本上让模型学习语言分布和通用知识,形成基础能力。第二层是指令微调:用任务指令和示例教模型“听懂人话”,知道什么问题该用什么形式回答。第三层是人类对齐:让模型的输出更符合人类偏好,更可靠、更安全、更少有害内容。原文把这一阶段概括为走向 AIGC 时代,模型架构以自回归为主,走向对话式、生成式、多模态,更加注重与人类交互进行对齐。
这三层可以类比成培养一个新人。预训练像让他大量阅读,建立知识底子;指令微调像给他岗位手册,告诉他收到什么请求该怎么处理;人类对齐像价值观和沟通规范培训,让他知道什么该说、什么不该说、遇到不确定时怎么表达。只做预训练,模型可能很会续写,但不一定听得懂指令;只做指令微调,模型可能学会答题格式,但知识面不够;只做对齐,模型可能礼貌,但能力上限受基础模型限制。三层配合,才有可用的对话助手。
这一阶段的关键词还有自回归、生成式、多模态。自回归是指模型按顺序一个词一个词地生成,每一步都依赖前面已生成的内容;生成式是指它输出的是新文本,而不是从固定标签里选一个;多模态是指模型不只处理文字,还能处理图像、音频等不同形态的信息。对入门者来说,不必一开始就钻多模态细节,先记住主线:大语言模型是在语言模型基础上,用更大规模、更复杂训练流程,把“预测下一个词”的能力扩展到通用任务和自然交互。
4.3 大语言模型的边界:会聊天不等于会计算
大语言模型的优点很突出:它像“人类”一样智能,具备与人类沟通聊天的能力,甚至能借助插件做自动信息检索。它能写草稿、改句子、解释概念、生成代码、做对话式问答,交互门槛比传统软件低很多。但它的缺点同样要摆在桌面上:参数量大,算力要求高,训练时间长,可能生成部分有害的、有偏见的内容。它还可能产生幻觉,也就是用很流畅的语气说出不准确甚至虚构的信息。
会聊天不等于会计算,也不等于会查证。语言模型的训练目标是提高序列概率,不是自动保证事实正确。它擅长根据上下文生成“像”的内容,不擅长在没有外部依据时保证“真”。所以涉及数字计算、最新事实、专业结论、法律医疗建议时,不能只看它说得顺不顺,还要看有没有可靠来源、有没有人工复核、有没有边界测试。模型越流畅,越容易让人放松警惕,这是使用中最需要防的坑。
还有一个常见边界是知识截止和上下文限制。模型训练完之后,世界还在变化;它没有自动更新所有新信息的能力。对话上下文再长,也不等于它能记住无限历史。把它当“全能大脑”容易翻车,把它当“语言能力很强的助手”更稳。它能帮你组织思路、生成候选、解释概念,但关键判断仍要由人把关。
5. 常见误区与易混概念:语言模型、大模型、N-gram别混着叫
5.1 四条最容易混的概念,逐条拆开看
第一条,语言模型和大语言模型。易混点在于两者都叫“语言模型”,日常讨论又常把“大模型”当成“语言模型”的同义词。为什么混?因为大语言模型确实属于语言模型,能力又太出圈,导致很多人以为语言模型天然就是千亿参数、会对话的东西。怎么区分?看范围和规模:语言模型是上位概念,N-gram、神经网络语言模型、预训练语言模型、大语言模型都在这个家族里;大语言模型是其中参数规模很大、训练数据很广、具备通用生成能力的一支。说“语言模型”时,可能指一个 bigram 计数器;说“大语言模型”时,通常指能对话、能写代码、能处理多任务的大参数模型。
第二条,N-gram 和神经网络语言模型。易混点在于两者都在做“预测下一个词”,输入输出看起来相似。为什么混?因为入门例子常从 bigram 讲起,紧接着又讲神经网络,读者容易以为只是换了个算法名字。怎么区分?看表示方式和泛化方式:N-gram 把词当离散符号,靠计数估计条件概率,记忆窗口是前 N-1 个词,没见过的组合容易为零;神经网络语言模型把词映射成连续向量,靠网络参数学习条件概率,能根据相似上下文泛化,但长序列建模仍有限。一个像查固定搭配手册,一个像用向量空间找相似关系。
第三条,预训练和微调。易混点在于两者都是训练,都涉及数据,听起来像同一件事的两个说法。为什么混?因为大语言模型的新闻常把“预训练模型”“微调模型”连在一起讲,初学者容易把微调当成预训练的别名。怎么区分?看目标和阶段:预训练在大规模通用文本上学习语言表示和通用知识,目标是打底子;微调在具体下游任务数据上调整模型,目标是适配任务。预训练像通识教育,微调像岗位培训。没有预训练,微调成本高、效果受限;只有预训练,模型不一定听得懂具体指令。
第四条,生成流畅和事实正确。易混点在于大语言模型输出太顺,读者容易把“像真的”当成“是真的”。为什么混?因为语言模型的核心能力就是生成高概率词序列,流畅本来就是它擅长的;人读文章时又习惯用通顺程度判断可信度。怎么区分?看证据链和任务类型:写文案、改语气、头脑风暴,流畅本身就有价值;查事实、算数字、做专业判断,必须引入外部资料、人工复核或工具验证。模型说得越顺,越要问一句“依据在哪里”。
5.2 怎么快速判断:先问“它在预测什么”,再问“它靠什么学会”
遇到一个新名词,先别急着背定义,可以问两个问题。第一个问题:它在预测什么?如果它在算一个词序列的概率,或者根据前文预测下一个词,那它就在语言模型的家族里。第二个问题:它靠什么学会?靠计数统计,可能是 N-gram;靠神经网络参数和词向量,可能是神经网络语言模型;靠大规模预训练加微调,可能是预训练语言模型;靠更大参数、更多数据、指令微调和人类对齐,可能是大语言模型。这两个问题能把大部分易混概念拉回同一条主线。
再补一个判断:它解决的是“表示”还是“生成”?编码器式模型更偏向理解上下文、做分类和抽取;解码器式模型更偏向自回归生成、做续写和对话;混合式兼顾两边。这个判断不是绝对分类,但能帮你读懂很多模型说明。入门阶段不需要把每个架构细节都吃透,先建立“语言模型是根,N-gram、神经网络、预训练、大语言模型是不同阶段的枝干”这张地图,遇到术语就不容易迷路。
还要注意,参数大不等于能力强,能力强不等于适合你的场景。一个千亿参数模型可能在开放对话上很亮眼,但你的任务如果是固定格式抽取,一个小而专的模型可能更稳、更便宜、更可控。评估时要看任务准确率、事实一致性、响应延迟、成本、安全边界,而不是只看参数海报。语言模型的评估指标是另一条线,入门时先记住一个原则:别用“看起来顺”代替“测起来准”。
6. 什么时候该用语言模型、什么时候别用:一个内容审核场景的边界判断
假设要做一个内容审核辅助工具,让语言模型判断用户提交的短文本是否包含辱骂、谣言或广告。这个场景里,语言模型适合做“第一道筛子”:它能快速读语义、抓上下文、给候选标签,把明显正常的内容放过去,把可疑内容留给人工。它适合处理表达多样、规则难穷举的文本,也适合生成审核理由草稿,帮人工更快理解模型为什么标红。但它不适合独立做最终裁决,尤其是涉及封禁、申诉、法律责任的环节。模型可能被反讽、谐音、缩写绕过去,也可能把正常吐槽误判成辱骂。它给的是概率判断,不是事实认定。
| 场景 | 更适合用语言模型 | 不建议只靠语言模型 |
|---|---|---|
| 文本初筛 | 语义多样、规则难写全 | 需要最终裁决和申诉处理 |
| 内容摘要 | 长文压缩、提取要点 | 需要逐字准确的法律条文 |
| 对话辅助 | 草稿生成、语气改写 | 高风险专业结论直接输出 |
| 事实判断 | 提供候选线索 | 最新事实、数字计算、证据核验 |
边界判断可以用三个问题过一遍。第一,输出错了谁承担后果?如果只是生成草稿、给人工参考,容错空间大;如果直接面向用户做封禁或医疗建议,容错空间小。第二,有没有人工兜底?有复核流程,模型可以大胆做初筛;没有复核,模型就不能被当成最终裁判。第三,评估样例够不够?至少要有正常文本、边界文本、对抗文本和历史上翻车过的案例。没有这些样例,只凭几句演示就上线,等于把黑匣子直接接进业务。
我自己的习惯是,每次把语言模型接进具体流程前,都强制走一遍边界清单:先问输出错了谁承担,再问有没有人工兜底,最后问评估样例够不够。早些年我也有过“它回答得这么顺,应该没问题”的侥幸心理,后来才明白,流畅只是语言模型的强项,不是正确性的保证。从那以后我每次做类似判断,都先把“它能做什么”和“它不能保证什么”分开写清楚,再决定要不要用、怎么用。
这份资料把语言模型定义、N-gram、神经网络语言模型、预训练范式和大语言模型特点串成一条线,适合放在手边当入门地图;遇到一个术语,就翻回对应章节对齐认知。如果你正准备系统补这块,可以先读定义,再看 N-gram 为什么不够,最后看大语言模型为什么需要对齐。希望帮到你。
本文还有配套的精品资源,点击获取