尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从N-gram到Transformer:语言模型演进与工程实践全解析

从N-gram到Transformer:语言模型演进与工程实践全解析 1. 从“词袋”到“世界模型”语言模型的演进脉络聊起自然语言处理绕不开的一个核心概念就是语言模型。你可能在很多地方都听过这个词尤其是在ChatGPT这类大模型火爆之后。但语言模型到底是什么它为什么能从简单的“下一个词预测”工具演变成今天能理解、生成、推理的“智能体”这篇文章我想从一个从业者的视角为你梳理清楚语言模型的发展脉络、核心原理以及在实际项目中我们到底该如何看待和运用它。它不是一篇教科书式的定义罗列而是结合我这些年从统计模型做到神经大模型的实战经验聊聊那些文档里不会写的细节和思考。简单来说语言模型的核心任务就是计算一个词序列一句话、一段文本出现的可能性。这个看似简单的目标却蕴含着让机器理解人类语言的全部野心。早期的模型比如N-gram就像一个记忆力有限但勤奋的图书管理员它通过统计历史文本中词语搭配的频率来预测下一个词。而今天的大语言模型则更像是一个博览群书、融会贯通的学者它构建了一个关于世界的内部表示不仅能续写句子还能回答复杂问题、编写代码、进行逻辑推理。这个演变过程是算法、数据和算力共同驱动的结果也是我们理解当前AI浪潮的关键。2. 统计时代的基石N-gram模型及其工程实践在深度学习统治NLP之前N-gram模型是语言建模的绝对主力即便在今天它在某些资源受限或需要极强可解释性的场景下依然有其用武之地。理解它是理解一切更复杂模型的基础。2.1 N-gram的核心思想与数学本质N-gram模型基于一个非常强的假设马尔可夫假设。即一个词出现的概率只依赖于它前面有限的N-1个词。比如一个二元模型BigramN2认为下一个词只依赖于当前词一个三元模型TrigramN3则认为依赖于前面两个词。它的数学形式化很简单对于一个词序列 ( w_1, w_2, ..., w_m )其联合概率可以分解为一系列条件概率的乘积 [ P(w_1, w_2, ..., w_m) \prod_{i1}^{m} P(w_i | w_{i-1}, ..., w_1) ] 应用马尔可夫假设近似为 [ P(w_1, w_2, ..., w_m) \approx \prod_{i1}^{m} P(w_i | w_{i-1}, ..., w_{i-N1}) ] 而条件概率 ( P(w_i | w_{i-1}, ..., w_{i-N1}) ) 通过最大似然估计MLE从语料库中统计得到 [ P(w_i | w_{i-1}, ..., w_{i-N1}) \frac{count(w_{i-N1}, ..., w_{i})}{count(w_{i-N1}, ..., w_{i-1})} ] 这里的count就是该词序列在训练语料中出现的次数。为什么这个简单的模型曾经如此有效因为它巧妙地用统计规律捕捉了语言的局部约束性。例如在“我爱吃”后面出现“苹果”、“米饭”的概率远大于出现“汽车”、“哲学”。这种局部共现信息对于语音识别从声音序列中选出最可能的词序列、文本输入法拼音转汉字等任务已经提供了巨大的助力。2.2 平滑技术应对“零概率”问题的艺术N-gram模型最致命的工程挑战就是数据稀疏性。无论你的语料库多大总会有大量的N元组从未出现过导致其概率为零。一旦乘起来整个句子的概率就变成了零这显然不合理。为了解决这个问题一系列“平滑”技术被发明出来其核心思想是“劫富济贫”从出现次数多的N元组概率中匀出一点点分配给那些未出现或出现次数少的N元组。加一平滑拉普拉斯平滑最简单粗暴给所有可能的N元组的计数都加1。假设词汇表大小为V那么Bigram平滑后的概率为 [ P(w_i|w_{i-1}) \frac{count(w_{i-1}, w_i) 1}{count(w_{i-1}) V} ] 这种方法对于小词汇表还行但对于大词汇表加1会导致概率被过度平滑所有概率都变得趋同效果不好。古德-图灵估计一种更聪明的平滑方法。其核心思想是用出现次数为r的词序列的数量来重新估计出现次数为r的词序列的概率。具体来说它会观察语料中出现1次的词称为“单身汉”有多少个然后用这个数量来估计那些出现0次未出现的词的总概率。然后按比例分配给所有未出现的词。古德-图灵估计是很多现代平滑方法的基础组件。回退与插值这是工程上最常用、效果也较好的平滑策略。回退如果一个高阶N-gram如Trigram的计数为0或很小我们就“回退”到低阶的N-gram如Bigram或Unigram的概率并用一个回退权重来调整。插值将不同阶的N-gram概率线性组合起来。例如一个Trigram插值模型的计算方式是 [ P(w_i|w_{i-2}, w_{i-1}) \lambda_1 P_{MLE}(w_i) \lambda_2 P_{MLE}(w_i|w_{i-1}) \lambda_3 P_{MLE}(w_i|w_{i-2}, w_{i-1}) ] 其中 (\lambda) 是非负的权重且和为1。这些权重可以在一个留存数据集上通过期望最大化EM算法优化得到。Kneser-Ney平滑是目前公认效果最好的平滑方法之一它本质是一种高级的回退/插值方法特别在估计低阶分布时不仅考虑词本身出现的频率还考虑了该词前面有多少种不同的上下文即该词的“延续概率”这能更好地处理像“弗朗西斯科”这种经常跟在“圣”后面但单独出现概率不高的词。实操心得在真正构建一个N-gram语言模型时选择哪种平滑方法往往比纠结N取3还是4更重要。对于大多数通用任务直接从成熟的工具包如KenLM一个用C编写的高效语言模型工具库中使用修正的Kneser-Ney平滑是稳妥的选择。自己实现平滑算法很容易在概率分布的尾巴上处理不当导致模型在生成长文本时出现极端概率过小或NaN。2.3 局限性为什么我们需要更强大的模型尽管N-gram在工程上被优化到了极致但其天花板是显而易见的上下文窗口有限N通常最大取到5因为再大数据稀疏性问题会指数级恶化。这意味着模型无法捕捉长距离的依赖关系比如段落开头的主语对段落末尾谓语的影响。无法理解语义它只认识词的“形状”字符串不认识词的“含义”。“苹果公司”和“吃苹果”中的“苹果”对N-gram模型来说是同一个词它无法区分其多义性。泛化能力差如果训练语料里没有“深度学习赋能产业变革”这个Trigram模型就会给它很低的概率尽管每个词都很常见组合起来也合理。它缺乏基本的组合泛化能力。这些根本性的缺陷催生了神经网络语言模型的登场。3. 神经网络的革命从NNLM到Transformer神经网络为语言模型带来了根本性的改变将离散的符号词映射到连续的向量空间词向量在这个空间里进行数学运算从而能够捕捉语义和更复杂的模式。3.1 神经概率语言模型概念的飞跃Bengio等人在2003年提出的神经概率语言模型是里程碑式的工作。它的结构并不复杂但思想深刻投影层将上下文中的每个词如前n-1个词通过一个查找表映射为一个稠密的词向量。拼接层将这些词向量拼接成一个长向量。隐藏层通过一个或多个全连接神经网络层并配合非线性激活函数如tanh学习上下文向量到下一个词向量的复杂映射。输出层最后通过一个softmax层输出在整个词汇表上的概率分布。它的核心贡献是什么分布式表示词向量Word Embedding的引入。语义相似的词如“猫”和“狗”在向量空间中的位置也相近。模型学会了“词义”而不仅仅是词形。自动特征工程神经网络隐层自动学习到了对预测下一个词有用的特征表示替代了手工设计N-gram特征。缓解数据稀疏即使某个具体的词序列未出现过但只要构成它的词在别的上下文中出现过模型就能通过词向量和神经网络的泛化能力给出一个合理的概率估计。然而早期的NNLM计算成本极高因为输出层的softmax需要在整个词汇表通常数万到数十万上计算训练非常缓慢。这催生了后续一系列优化如层次化softmax、负采样等这些技术后来也成为了Word2Vec模型的核心。3.2 RNN与LSTM处理序列的“记忆”模型为了处理任意长度的序列循环神经网络RNN被引入语言建模。RNN拥有一个“隐藏状态”像是一个记忆单元随着序列的推进而更新理论上可以捕捉无限长的依赖关系。经典的RNN语言模型在时间步t的操作如下 [ h_t \tanh(W_{xh}x_t W_{hh}h_{t-1} b_h) ] [ y_t \text{softmax}(W_{hy}h_t b_y) ] 其中 ( x_t ) 是当前词的词向量( h_t ) 是当前隐藏状态( y_t ) 是预测的下一个词的概率分布。RNN的困境与LSTM的救赎标准RNN存在梯度消失/爆炸问题导致其难以学习长距离依赖。长短时记忆网络LSTM通过引入“门控机制”输入门、遗忘门、输出门和“细胞状态”精巧地控制了信息的流动让模型能够选择性地记住或忘记长期信息。这使得LSTM成为2018年之前序列建模任务包括语言模型的默认选择。踩坑实录在实际训练RNN/LSTM语言模型时除了梯度问题批次化和序列长度处理是两大工程难点。文本序列长度不一你需要决定是填充到固定长度浪费计算还是按长度分组进行批次训练实现复杂。此外LSTM的“状态”需要在批次内样本间独立但在不同批次间如果你想处理超过批次长度的长文本就需要小心翼翼地传递和重置隐藏状态这里极易出错导致模型学到批次边界上的虚假关联。3.3 Transformer的降维打击并行化与注意力机制尽管LSTM解决了长程依赖但其序列计算的特性必须一步步算导致训练无法并行效率低下。2017年Transformer架构的提出彻底改变了游戏规则。Transformer的核心是自注意力机制。它允许序列中的任意两个位置直接建立联系计算“注意力分数”从而动态地决定在编码或生成某个位置时应该“注意”序列中其他哪些部分的信息。计算过程可以高度并行化因为所有位置的词向量是同时输入进行计算的。对于一个查询向量Q键向量K值向量V注意力计算为 [ \text{Attention}(Q, K, V) \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V ] 其中 ( d_k ) 是键向量的维度缩放因子用于防止点积过大导致softmax梯度饱和。为什么Transformer如此适合语言模型极致并行训练速度比RNN快一个数量级以上使得在海量数据上训练超大模型成为可能。全局视野自注意力机制理论上可以捕捉序列中任意两个词之间的关系不受距离限制对理解长文档至关重要。强大表示多头注意力机制让模型可以从不同子空间例如语法、语义、指代关系同时关注信息学习更丰富的表示。正是Transformer架构直接催生了GPT、BERT等预训练语言模型并最终引向了大语言模型的时代。它不再仅仅是一个“语言模型”而成为一个通用的“序列信息处理器”。4. 预训练范式BERT与GPT的双子星时代在Transformer出现后研究者发现先在一个巨大的无标注文本语料库上训练一个模型让它完成某个“预训练任务”学习通用的语言表示然后再在下游任务如分类、问答上用少量标注数据微调能取得惊人的效果。这被称为“预训练-微调”范式。其中BERT和GPT代表了两种截然不同的预训练思路。4.1 BERT双向的编码器代表BERT的核心思想是掩码语言模型。在训练时随机遮盖输入句子中15%的token词或子词然后让模型根据上下文被遮盖位置左右两边的词来预测被遮盖的原始token。例如 输入”今天天气真[MASK]我们一起去公园吧。“ 目标预测[MASK]处是“好”。为了学习句子间关系BERT还使用了下一句预测任务给定两个句子A和B判断B是否是A的下一句。BERT的关键特性与影响双向编码由于MLM任务需要同时利用左右上下文BERT的Transformer编码器是双向的。这使其在需要理解整个输入上下文的任务如文本分类、命名实体识别、阅读理解上表现极其出色。微调即用对于下游任务只需在BERT输出的序列表示之上添加一个简单的任务特定层如一个线性分类器然后用下游数据微调整个模型即可避免了复杂的特征工程。局限性BERT的MLM训练方式使其不适合直接的文本生成任务。因为生成需要自回归地从左到右预测下一个词而BERT在训练时“看到”了所有词包括未来的词这会导致在生成时出现训练-应用的不匹配。4.2 GPT自回归的生成之王GPT系列模型走的是另一条路标准的自回归语言模型。它使用Transformer的解码器部分掩码自注意力即只能看前面的词不能看后面的词训练目标就是最经典的下一个词预测。给定前文 ( w_1, w_2, ..., w_{t-1} )预测当前词 ( w_t ) 的概率。GPT的关键特性与影响生成能力天然自回归的训练方式与文本生成的过程完全一致因此GPT在文本续写、对话、创作等生成任务上得天独厚。零样本/少样本学习研究者发现随着GPT模型规模和数据量的指数级增长它涌现出了惊人的情境学习能力。即你不需要微调只需在输入中给几个任务示例情境它就能模仿并完成新任务。例如输入“将英文翻译成中文apple - 苹果dog - 狗hello -”模型就能输出“你好”。这彻底改变了人机交互的模式。通向大语言模型GPT-3及之后的模型证明当自回归语言模型的参数规模突破千亿并在海量互联网文本上训练后其能力会产生质变不仅能生成流畅文本还能进行一定程度的推理、编程和知识问答。这直接定义了我们今天所说的“大语言模型”。深度思考BERT和GPT之争本质上是“理解”与“生成”、“双向”与“单向”的路线之争。在工程实践中选择哪个作为基底模型完全取决于你的任务。如果是文本分类、信息抽取等“理解型”任务BERT或其变体如RoBERTa, ALBERT通常是更好的起点。如果是对话、创作、代码生成等“生成型”任务GPT系列是不二之选。而如今一些新模型如T5, BART试图统一这两种范式通过“序列到序列”的框架将各类任务都转化为文本到文本的生成任务提供了另一种思路。5. 大语言模型涌现、能力与工程实践当语言模型的参数规模、训练数据量和计算量跨越某个临界点后我们就进入了“大语言模型”的时代。LLM不再是简单的“语言”模型而更像是一个基于文本接口的“通用任务处理器”。5.1 涌现能力与缩放定律“涌现”是指当模型规模达到一定程度时一些在小型模型上不存在或很弱的能力会突然出现或显著增强。例如情境学习如上所述通过提示词中的几个例子就能学习新任务。指令遵循能够理解并执行以自然语言形式给出的复杂指令。思维链当要求模型在给出最终答案前“一步一步思考”时其解决复杂推理问题的能力会大幅提升。代码生成与理解在代码数据上训练后模型能进行代码补全、调试、解释甚至在不同编程语言间转换。OpenAI等机构的研究总结出了缩放定律模型性能如损失函数值与模型参数数量、训练数据量、计算量之间存在着可预测的幂律关系。这为“大力出奇迹”提供了理论指导但也将LLM的开发推向了只有巨头才能参与的“军备竞赛”。5.2 核心工程挑战训练、对齐与部署构建和运用一个大语言模型远不止设计网络结构那么简单它是一项庞大的系统工程。1. 训练基础设施 训练一个千亿参数模型需要成千上万的GPU如A100/H100集群运行数月。这涉及到分布式训练必须使用数据并行、模型并行如张量并行、流水线并行等技术将模型和计算分布到海量GPU上。Megatron-LM、DeepSpeed等框架是其中的佼佼者。混合精度训练使用FP16/BF16浮点数格式来减少内存占用和加速计算同时用FP32维护一份主权重副本进行精度累积以保持训练稳定性。万亿词元语料库需要从互联网爬取、过滤、去重、清洗出海量高质量文本数据构建包含数万亿词元的训练语料。2. 对齐问题 一个能力强大但不受控制的模型是危险的。对齐研究的目标是让模型的输出符合人类的意图、价值观并且安全、无害、有用。指令微调使用人类标注的指令期望输出对数据集在预训练模型基础上进行有监督微调教会模型遵循指令的格式和意图。基于人类反馈的强化学习这是ChatGPT等模型实现高质量对话的关键。首先训练一个奖励模型让它学习人类对模型多个输出结果的偏好排序。然后用这个奖励模型作为信号通过强化学习如PPO算法去微调语言模型使其输出能获得更高的奖励即更符合人类偏好。3. 本地部署与优化 对于企业或开发者直接调用API存在成本、数据隐私和延迟问题。因此如何在本地或私有云上高效部署LLM成为一个热点。模型量化将模型权重从FP32/FP16转换为INT8/INT4甚至更低的精度可以大幅减少模型存储空间和内存占用加速推理。例如使用GPTQ、AWQ等后训练量化技术。模型剪枝移除网络中不重要的权重或神经元得到一个更小、更快的模型。高效推理框架使用像vLLM、TGIText Generation Inference、Llama.cpp这样的框架它们通过连续批处理、PagedAttention高效管理KV缓存等技术极大地提升了推理吞吐量降低了延迟。硬件适配利用苹果M系列芯片的统一内存、NVIDIA GPU的TensorRT加速库等进行深度优化。5.3 检索增强生成突破知识瓶颈的利器大语言模型有一个固有缺陷其知识固化于训练时的数据无法获取最新信息且容易产生“幻觉”编造看似合理但错误的事实。检索增强生成RAG是解决此问题的主流工程方案。RAG的工作流程如下索引将外部知识源如公司文档、产品手册、最新新闻切分成片段通过嵌入模型转换为向量存入向量数据库。检索当用户提问时将问题也转换为向量在向量数据库中检索出最相关的若干个知识片段。增强将检索到的知识片段和用户问题一起构造成一个增强的提示词提交给LLM。生成LLM基于提供的知识进行生成并通常被要求引用来源。RAG的优势知识实时更新只需更新向量数据库模型就能获取新知识。来源可追溯生成的答案有据可查增加了可信度。降低幻觉强制模型基于给定文本生成减少了信口开河。保护隐私敏感知识可以留在本地向量库无需上传给云端模型。工程实践要点构建一个高效的RAG系统难点往往不在LLM本身而在“检索”环节。如何对文档进行智能分块避免语义割裂如何选择或训练高质量的嵌入模型如何设计检索策略如混合检索、重排序以及如何构建包含检索上下文的提示词模板这些细节决定了最终效果的上限。一个常见的坑是检索到的片段可能包含答案但位置不突出导致LLM忽略。解决方法可以是在提示词中明确指令“请基于以下背景资料回答问题”并将最关键的信息放在上下文靠前的位置。6. 未来展望多模态与智能体语言模型的发展远未停止当前最前沿的探索主要集中在两个方向。多模态大模型让模型不仅能处理文本还能理解和生成图像、音频、视频。这不再是简单的“文本描述生成图片”而是让模型建立一个统一的多模态世界表示。例如GPT-4V、Gemini等模型可以接受图像和文本的混合输入回答关于图像的问题。其技术核心在于将不同模态的数据图像块、音频帧通过各自的编码器映射到同一个语义空间与文本词向量对齐然后用一个庞大的Transformer进行跨模态理解和生成。这朝着构建更通用人工智能迈出了一大步。智能体LLM作为“大脑”驱动一个能够感知环境、规划、执行工具调用并完成复杂任务的自主系统。例如AutoGPT、GPT Engineer等项目展示了LLM可以自行拆解目标、搜索网络、编写代码、执行程序来达成目的。这里的核心技术是函数调用让LLM能够理解工具如搜索引擎API、计算器、代码解释器的文档说明并在需要时生成结构化的调用请求。智能体技术有望将LLM从“聊天机器人”转变为真正的“数字员工”。从我个人的实践来看语言模型已经从NLP领域的一个子模块演变成了整个AI乃至数字世界的基座。它的边界正在变得模糊能力正在泛化。对于我们开发者而言理解其原理是基础但更重要的是掌握如何将它工程化地应用到实际场景中解决真实问题。无论是用RAG构建一个企业知识库问答系统还是用智能体自动化工作流亦或是微调一个垂直领域的专业模型这里面的挑战和乐趣才刚刚开始。
返回列表