自然语言处理 (NLP) 核心学习大纲
第一阶段:传统 NLP 与统计语言模型 (经典文本处理)
在深度学习接管一切之前,我们是如何处理文本的?这一阶段帮助你理解语言的“解构”过程。
-
文本预处理: 分词 (Tokenization)、词形还原 (Lemmatization)、停用词过滤、正则表达式。
-
特征提取: 词袋模型 (Bag of Words)、TF-IDF、N-gram 模型。
-
经典算法应用:
- 基于朴素贝叶斯 (Naive Bayes) 的文本分类(如情感分析、垃圾邮件拦截)。
- 隐马尔可夫模型 (HMM) 和 条件随机场 (CRF) 用于序列标注(如命名实体识别 NER、词性标注)。
第二阶段:深度学习与语义表示 (进入神经网络时代)
让计算机抛弃生硬的规则,真正开始理解词语背后的语义联系。
-
神经网络基础: 多层感知机 (MLP)、反向传播算法、常见激活函数与损失函数。
-
词向量表示 (Word Embeddings): Word2Vec, GloVe, FastText。理解如何将词汇映射为稠密向量,计算“词语的数学距离”。
-
时序与序列模型:
- 循环神经网络 (RNN) 及其演进版:长短期记忆网络 (LSTM) 和 门控循环单元 (GRU)。
- Seq2Seq 模型与基础的编码器-解码器 (Encoder-Decoder) 架构(常用于早期的机器翻译)。
第三阶段:Transformer 与大模型时代 (当前工业界核心)
这是目前 NLP 最前沿、也是含金量最高的部分。
-
注意力机制: 彻底搞懂 Attention 机制的原理(尤其是自注意力 Self-Attention)。
-
Transformer 架构: 拆解 Transformer 的内部结构(核心神作论文 Attention Is All You Need)。
-
预训练语言模型 (PLM):
- 自编码模型: BERT 及其变体(RoBERTa),擅长阅读理解、填空和分类。
- 自回归模型: GPT 系列模型,擅长文本生成。
-
大语言模型 (LLM) 进阶与落地:
- 微调技术: 指令微调 (Instruction Tuning)、参数高效微调 (PEFT,如 LoRA 技术)。
- 提示词工程: Prompt Engineering、思维链 (Chain of Thought, CoT)。
- 应用架构: 检索增强生成 (RAG)、Agent 智能体工作流(结合 LangChain / LlamaIndex 等框架)。
第四阶段:核心实战工具链
理论结合实践,熟练使用工业界常用的武器库。
- 基础库: NLTK, SpaCy, Jieba(中文处理)。
- 深度学习框架: PyTorch (当前 NLP 领域的绝对主流)。
- 大模型生态: 熟练使用 Hugging Face (Transformers 库) 调用、训练和部署开源模型。
第一阶段:传统 NLP 与统计语言模型 (经典文本处理)
一、 文本预处理 (Text Preprocessing)
计算机无法直接阅读文本,预处理的目的是将非结构化的自然语言转化为干净、标准化的数据格式。这也是传统 NLP 中最耗时、最考验工程能力的一环。
-
分词 (Tokenization):
- 英文相对简单,主要以空格切分。
- 中文分词是一大难点(没有空格)。需要学习基于词典的最大匹配法,以及基于统计的算法(如隐马尔可夫模型)。了解
Jieba分词的底层逻辑是必修课。
-
词形还原 (Lemmatization) 与词干提取 (Stemming):
- 主要针对英语等屈折语。将“running”、“ran”统一还原为“run”,将“apples”还原为“apple”,以降低词汇表的维度。
-
停用词过滤 (Stop Words Removal):
- 剔除对表达核心语义帮助不大、但出现频率极高的词(如“的”、“了”、“is”、“the”),减少计算资源的浪费。
-
正则表达式 (Regular Expressions):
- NLP 工程师的必备“瑞士军刀”。用于清洗文本中的无用信息,如提取邮箱、去除 HTML 标签、过滤特殊标点符号等。
二、 文本的数学表示与特征提取
清洗完文本后,需要将其转化为计算机能计算的数字矩阵。传统 NLP 认为,一篇文章的含义是由它包含的词汇决定的。
-
词袋模型 (Bag of Words, BoW):
- 最基础的表示方法。把文本看作一个装满词汇的“袋子”,忽略语法和语序,只记录每个词出现的次数(词频)。缺点是会导致极其稀疏的矩阵,且完全丢失了上下文信息。
-
TF-IDF (词频-逆文档频率):
- 词袋模型的进阶版。它的核心逻辑是:如果一个词在一篇文章中出现频率高(TF 大),但在所有文章中出现频率低(IDF大),那么这个词具有很强的区分度。
- 计算公式为:。它常用于提取文章关键词或进行简单的文本检索。
-
N-gram 模型 (N元语法模型):
- 为了弥补词袋模型丢失语序的缺点,N-gram 不再孤立地看单个词,而是看连续的 N 个词。
- 例如,“我 爱 学习”,2-gram(Bigram)会提取出 [“我爱”, “爱学习”]。这能捕捉到局部的搭配和短语信息。
三、 统计语言模型与经典算法
将文本变成特征向量后,就可以使用传统的机器学习算法来完成具体的 NLP 任务了。这一阶段的核心是概率论。
1. 文本分类:朴素贝叶斯 (Naive Bayes)
- 原理: 基于贝叶斯定理。假设特征(词汇)之间相互独立,通过计算已知文档库中各个词在不同类别下的概率,来推断新文档属于某个类别的概率。
- 公式:
- 典型应用: 垃圾邮件拦截、新闻分类、基础的情感分析(好评/差评)。它计算速度极快,在小数据量下表现优异。
2. 序列标注:隐马尔可夫模型 (HMM) 与 条件随机场 (CRF)
如果任务不是对整篇文章分类,而是要对句子中的每一个词打标签(比如:找出句子中的人名和地名,或者标注名词/动词),就需要用到序列模型。
-
隐马尔可夫模型 (HMM):
- 它包含两条线:一条是看得见的“观测序列”(输入的词汇),一条是看不见的“隐藏状态序列”(词性或实体标签)。HMM 通过统计状态之间的“转移概率”和从状态生成词汇的“发射概率”来解码最可能的标签序列。
-
条件随机场 (CRF):
- HMM 的升级版。HMM 只考虑局部的概率,而 CRF 能够考虑全局的上下文特征约束。在深度学习普及之前,CRF 是命名实体识别 (NER) 和中文分词的绝对霸主。
传统 NLP 为什么会向深度学习演进?
在学习完这一阶段后,你会发现传统方法的局限性:
- “维度灾难”与稀疏性: 词汇库稍微变大,特征矩阵就会变得极其庞大且充满 0,计算效率低下。
- 语义鸿沟: 计算机依然不知道“苹果”和“橘子”是相似的水果,在它眼里,“苹果”和“橘子”的数学距离,与“苹果”和“挖掘机”的距离是一样的。
正是为了解决这两个致命问题,NLP 才迎来了词向量 (Word2Vec) 的诞生,正式推开了深度学习的大门。
第三阶段:深度学习与语义表示 (进入神经网络时代)
词向量 (Word2Vec)——传统 NLP 与深度学习 NLP 时代的分水岭
1. 痛点:传统 NLP 为什么“不懂”语言?
在上一阶段(传统 NLP),如果我们要把词语交给计算机,最基本的方法是独热编码 (One-Hot Encoding) 。
假设我们的词表里只有 4 个词:[苹果, 橘子, 汽车, 挖掘机]。
- 苹果 =
[1, 0, 0, 0] - 橘子 =
[0, 1, 0, 0] - 汽车 =
[0, 0, 1, 0]
这带来了两个致命问题:
- 维度灾难: 如果汉语有 10 万个词,每个词就是一个 10 万维的向量,里面全是 0,只有一个 1。极其浪费计算资源。
- 语义鸿沟(无语义相关性): 在数学上,计算“苹果”和“橘子”的距离,与计算“苹果”和“汽车”的距离是完全一样的。计算机根本不知道苹果和橘子都是水果。
2. Word2Vec 的核心思想:分布式表示 (Distributed Representation)
2013 年,Google 团队的 Tomas Mikolov 提出了大名鼎鼎的 Word2Vec。它的核心哲学源于语言学大师 J.R. Firth 的一句话:
"You shall know a word by the company it keeps." (词以群分/观其伴而知其义)
它通过对大规模语料的学习,为每个词生成一个具有语义意义的稠密向量表示。这些向量能够在连续空间中表达词与词之间的关系,使得“意思相近”的词在空间中距离更近。为了实现这一目标Word2Vec 抛弃了由 0 和 1 组成的稀疏长向量,转而训练神经网络,为每个词生成一个短而稠密的实数向量(通常是 50 到 300 维)。例如:
- 苹果 =
[0.21, -0.45, 0.88, ...] - 橘子 =
[0.19, -0.42, 0.85, ...] - 汽车 =
[-0.80, 0.12, -0.33, ...]
奇迹出现了: 因为苹果和橘子经常在类似的上下文中出现(比如“我吃了一个__”),神经网络会把它们的向量更新得非常接近。此时,词语之间有了数学上的空间距离!
3. 最震撼的发现:词向量是可以做加减法的!
Word2Vec 惊艳整个学术界的地方在于,它不仅学到了相似度,还学到了复杂的逻辑类比关系。
在稠密的高维空间中,向量之间存在着奇妙的平移关系。最著名的等式就是:
这意味着,“国王”中去掉“男性”特征,加上“女性”特征,在数学空间里落下的那个点,距离它最近的词汇正好是“女王”。
为了让你亲自体验这种“将语义转化为几何空间”的魔法,我为你构建了一个二维语义空间模拟器。你可以点击图表中的词汇查看它们的向量坐标,甚至可以自己组合一个“向量加减法”来寻找答案。
4. Word2Vec 的两种训练模型
为了得到上面这些神奇的向量,Word2Vec 提出了两种非常精妙但结构简单的神经网络:
- CBOW (Continuous Bag-of-Words) / 连续词袋模型: 用周围的词汇(上下文)来预测中间的词。
- 就像做完形填空: “我 每天 乘坐 地铁 [ __ ]上班。”(预测中间是地铁/公交车)。
- Skip-gram / 跳字模型: 用中间的词来预测周围的词(上下文)。
- 就像造句发散: 给定词语“地铁”,预测它周围可能出现哪些词(比如“乘坐”、“上班”)。
在不断的预测和反向传播修正中,神经网络虽然没有真正“读懂”文本,但它把共现概率的秘密全部压缩到了那些几百维的浮点数向量中。
时序与序列模型
跨过 Word2Vec 这座桥,我们手里已经有了能让计算机理解的“词向量”(一个个稠密的浮点数数组)。但语言不仅仅是孤立词汇的堆砌,语言是时间序列上的数据流。一句话里,后面的词往往依赖前面的词,甚至依赖很久之前出现的词。
传统的神经网络(比如多层感知机 MLP)在处理文本时遇到了一个致命的瓶颈:它们是“无状态”(Stateless)的。 就像一个没有任何缓存的普通 API 接口,你输入“我”,它输出一个结果;你再输入“爱”,它处理“爱”的时候,已经完全不记得前面输入过“我”了。
为了让神经网络拥有“记忆”,循环神经网络(Recurrent Neural Network, RNN)应运而生。
1. RNN 的核心逻辑:引入“隐藏状态”(Hidden State)
RNN(循环神经网络)的核心结构是一个具有循环连接的隐藏层,它以时间步(time step)为单位,依次处理输入序列中的每个 token。在每个时间步,RNN 接收当前 token 的向量和上一个时间步的隐藏状态(即隐藏层的输出),计算并生成新的隐藏状态,并将其传递到下一时间步。
如果用编程的思维来理解,标准的神经网络是一个纯函数 y = f(x),而 RNN 则是在处理一个可迭代的数据流,并在内部维护了一个不断更新的上下文状态 state。它的伪代码逻辑非常直观,就像一个 for 循环:
state = 0 # 初始记忆为空
for word in sentence:
# 新的状态 = 当前输入的词 + 过去的记忆
state = update_function(word, state)
# 基于当前状态产生输出
output = predict(state)
在这个过程中,RNN 将每一时刻 t 的输入词向量$X_t$,与上一时刻传过来的隐藏状态 结合起来,共同计算出当前的隐藏状态 。
这就像你在阅读一篇文章,当你读到当前这个字的时候,你的大脑里已经积累了前面所有句子的语义信息。RNN 就是通过将网络“按时间步展开”(Unroll through time),实现了这种信息的向后传递。
例如:输入“我爱你”
底层是这样一步步执行的: • 初始状态(): 模型的记忆是空白的(隐藏状态 )。 • 第一时刻(): 眼睛看到“我”。模型把“我”存入脑海,形成记忆 。 • 第二时刻(): 眼睛看到“爱”。模型把刚才的记忆 (包含“我”)和新词“爱”融合,更新大脑,形成新记忆 (包含“我爱”的语义)。 • 第三时刻(): 眼睛看到“你”。模型把记忆 和新词“你”融合,形成最终记忆 (包含了完整的“我爱你”)。
2. RNN 网络本身的内部拓扑结构
- 基础结构 (Vanilla/Single-layer RNN)
这就是我们刚才一直在讨论的最基础的形态。
- 结构: 只有一层隐藏层。
- 信息流向: 单向、从左到右。它按照时间步 的顺序,依次读取词汇。
- 局限性: 它的特征提取能力有限(不够“深”),而且最致命的是——它只能看到“过去”,看不到“未来” 。在人类语言中,很多词的意思必须靠后面的词才能确定。比如:“我想去银行(Bank) ”,和“我坐在河边的河岸(Bank)上”。如果只从左往右读,读到 Bank 时,基础 RNN 是无法分辨它的意思的。
- 双向结构 (Bidirectional RNN / Bi-RNN)
为了解决“看不到未来”的问题,双向 RNN 诞生了。这也是自然语言处理中最常用、最强大的底层结构之一。
-
结构: 包含两层独立的隐藏层,但它们处于同一个网络深度。一层叫前向层 (Forward) ,一层叫后向层 (Backward) 。
-
信息流向:
- 前向层:从左到右读取句子(获取上文记忆)。
- 后向层:从右到左反向读取句子(获取下文记忆)。
- 最后,在每一个时间步,把前向和后向的记忆拼接(Concatenate)在一起,作为当前词的最终输出。
-
优势: 完美解决了上下文依赖问题。在看中间那个词时,模型既拥有了左边的记忆,也拥有了右边的记忆。
- 多层结构 (Deep / Stacked RNN)
为了让模型捕捉更复杂的语言特征,可以将多个 RNN 层按层次堆叠起来,使不同层学习不同层次的语义信息。这种设计的核心假设是:底层网络更容易捕捉局部模式(如词组、短语),而高层网络则能学习更抽象的语义信息(如句子主题或语境)。多层RNN结构中,每一层的输出序列会作为下一层的输入序列,最底层RNN接收原始输入序列,顶层 RNN的输出作为最终结果用于后续任务。
- 结构: 将多个单向的 RNN 层纵向堆叠起来。第一层 RNN 的输出,不再直接作为最终结果,而是作为第二层 RNN 的输入。
- 信息流向: 既有时间上的横向流动,也有层级上的纵向流动。
- 优势: 越底层的 RNN 提取越基础的特征(比如词法),越顶层的 RNN 就能提取越高级的抽象语义(比如句法和情感)。
- 多层 + 双向结构 (Deep Bidirectional RNN)
终极究极体,把“双向”和“多层”的优势结合在一起。
- 结构: 纵向堆叠了多个 RNN 层,并且每一层都是双向的。第一层的“前向+后向”拼接结果,作为第二层“前向”和“后向”的输入。
- 历史地位: 在 Transformer 架构称霸江湖之前,这种结构(特别是双向多层 LSTM)几乎统治了所有高难度的 NLP 任务(如机器翻译、高阶阅读理解)。著名的 ELMo 模型就是基于这个架构构建的。
3. RNN 的四大应用架构
- 一对多 (One-to-Many)
-
结构特点: 输入只有一个单一的数据(不是序列),但输出是一个时间序列。
-
工作流: 模型只在第一个时间步接收输入 ,后续的时间步不再接收外部输入,而是依靠隐藏状态 不断向下传递并生成输出序列 。
-
经典应用场景:
- 看图说话 (Image Captioning): 输入一张静态图片(经过 CNN 提取成一个向量),RNN 将这个向量作为初始状态,逐步输出一句描述图片内容的句子(比如:“一只”、“小狗”、“在”、“草地”、“上”、“跑”)。
- 音乐生成: 输入一个基础音符或流派标签,RNN 生成一段连续的旋律序列。
- 多对一 (Many-to-One)
-
结构特点: 输入是一个完整的时间序列,但输出只有一个单一的结果。
-
工作流: 模型会依次读取序列中的每一个词,不断更新内部的隐藏状态。在读取过程中不产生最终输出,直到最后一个时间步,将最终的隐藏状态(包含了整个序列的记忆)送入分类器得出结果。
-
经典应用场景:
- 情感分析 / 文本分类: 输入句子“这家餐厅的牛排太难吃了”(序列输入),在最后一个时间步输出结果“差评”(单一输出)。
- 多对多 - 同步 (Many-to-Many: Synced)
-
结构特点: 输入和输出都是序列,并且长度严格相等 ()。
-
工作流: 模型每吃进去一个词(输入 ),在融合了历史记忆后,立刻在当前时间步吐出一个对应的结果(输出 )。输入和输出是完全同步发生的。
-
经典应用场景:
- 词性标注 (POS Tagging): 输入“我 爱 苹果”,同步输出对应的标签“代词 动词 名词”。
- 命名实体识别 (NER): 找出句子中的人名、地名、机构名。
- 视频帧分类: 输入一段视频(由连续的图像帧组成),对每一帧画面立刻进行动作分类。
- 多对多 - 异步 / 编码器-解码器 (Many-to-Many: Seq2Seq)
-
结构特点: 输入和输出都是序列,但长度不相等 ()。这是目前大模型时代最核心的架构雏形。
-
工作流: 这种架构被强行拆分成了两块:
- 编码器 (Encoder): 先用一个“多对一”的 RNN,把输入序列(如一句长长的中文)从头读到尾,将所有语义压缩成最后一个隐藏状态(语义上下文向量)。
- 解码器 (Decoder): 拿着这个压缩好的语义向量,作为初始记忆,启动另一个“一对多”的 RNN,一步步生成输出序列(如英文),直到输出特定的“停止符”为止。
-
经典应用场景:
- 机器翻译: 输入 5 个字的中文“我爱你中国”,输出 4 个单词的英文 "I love China"。
- 智能对话 / Chatbot: 输入用户的提问,输出长度完全不确定的回答。
4. 标准 RNN 的致命缺陷:短期记忆与“梯度消失”
虽然 RNN 的设计极其优雅,但在真实的工程实践中,它遇到了一个巨大的阻碍:它只能记住短期的事,稍微长一点的句子它就“健忘”了。
当你给它一句很长的话:“我从小在法国长大,虽然现在搬到了澳大利亚,但我依然能说一口流利的 [ __ ]”。
当网络推理到最后需要填空时,它必须依靠句子最开头的“法国”。但在标准的 RNN 内部,信息每传递一步,就要进行一次矩阵乘法运算。在反向传播更新参数时,由于链式法则的连乘效应,早期的误差梯度会呈指数级缩小,最终变成 0。
这在算法上被称为梯度消失 (Vanishing Gradient) 。这就好比你在一个嵌套了上百层的循环中传递一个变量,每次都乘以一个 0.9,传到最后,最初的那个信息已经完全损耗殆尽了。
5. 进化:LSTM 与 GRU 的诞生
为了解决“记忆衰减”的漏洞,学者们对 RNN 内部的神经元结构进行了“微操改造”,提出了两种极其伟大的变体,它们统治了 Transformer 诞生前的整个 NLP 黄金时代:
-
LSTM(长短期记忆网络,Long Short-Term Memory): 它在标准的隐藏状态之外,引入了一个叫“细胞状态”(Cell State)的主干道。并且极其巧妙地设计了三个“门”(门控机制机制类似硬件中的逻辑开关):
- 遗忘门 (Forget Gate): 决定丢弃哪些没用的旧历史信息。
- 输入门 (Input Gate): 决定将当前的新词汇中的哪些信息写入主干道。
- 输出门 (Output Gate): 决定把主干道里的哪些信息提取出来作为当前输出。
-
GRU(门控循环单元,Gated Recurrent Unit): 这是 LSTM 的精简版。它把三个门合并成了两个(重置门和更新门),在保持几乎相同性能的情况下,大大降低了计算量和参数量,提升了训练速度。
Seq2Seq 模型
模型结构详解
Seq2Seq 模型由一个编码器(Encoder)和一个解码器(Decoder)构成。编码器负责提取输入序列的语义信息,并将其压缩为一个固定长度的上下文向量(Context Vector);解码器则基于该向量,逐步生成目标序列。
编码器
编码器主要由一个循环神经网络(RNN/LSTM/GRU)构成,其任务是将输入序列的语义信息提取并压缩为一个上下文向量。
在模型处理输入序列时,循环神经网络会依次接收每个token的输入,并在每个时间步步更新隐藏状态。每个隐藏状态都携带了截止到当前位置为止的信息。随着序列推进,信息不断累积,最终会在最后一个时间步形成一个包含整句信息的隐藏状态。
这个最后的隐藏状态就会作为上下文向量(context vector),传递给解码器,用于指导后续的序列生成。
为增强编码器的理解能力,循环网络也可以采用双向结构(结合前文与后文信息)或多层结构(提取更深的语义特征)。
解码器
解码器主要也由一个循环神经网络(RNN / LSTM / GRU)构成,其任务是基于编码器传递的上下文向量,逐步生成目标序列。
图的最左边,Encoder 把上一步千辛万苦压缩好的、包含了“我喜欢你。”所有语义的 Context Vector(上下文向量 ) ,作为初始化数据,交给了 Decoder 的第一个 RNN 单元。这相当于告诉 Decoder:“好,全句的意思都在这里了,开始翻译吧!”
2. 起跑信号:
看最下方的输入层。Decoder 的第一步(最左边的纵列),它的输入是一个特殊的标记: (Start of Sentence,句子开始符) 。
这就好比发令枪响,结合 Encoder 传过来的 ,RNN 开始运转,生成了第一个隐藏状态 (黄色的圈),并通过最上方的 Linear(线性映射层),输出了第一个英文单词:I。
3. 图中的灵魂虚线:自回归 (Auto-regressive)
接下来是最关键的一步!请看第一列输出的 I,有一根虚线箭头拐了个弯,指向了第二列的底部输入端。
这就是文本生成的核心逻辑:把上一步生成的输出,作为下一步的输入。
- 第 2 步: Decoder 把刚才生成的
I吃进去,结合前一步的记忆,输出了like。 - 第 3 步: 把刚才的
like吃进去,输出了you。 - 这种“自己吃自己吐出来的东西”的生成方式,在学术上被称为自回归(Auto-regressive Generation) 。目前大火的 GPT(Generative Pre-trained Transformer),它的文本生成也是基于这个原理!
4. 刹车信号:
在最后一步,Decoder 输出了句号 .,然后又把它作为输入吃进去,最终预测出了一个特殊标记: (End of Sentence,句子结束符) 。一旦模型输出了 ,生成过程就会立刻强制停止。翻译任务圆满结束。
传统架构的终极瓶颈
在这个完美的流水线里,无论 Encoder 读了多长的中文(哪怕是一篇 1 万字的文章),它都必须把所有的信息死死地压缩进最后那唯一的一个 向量中,然后交给 Decoder 去翻译。
这就好比我让你读完一本《三国演义》,然后只允许你用一张名片大小的纸把核心内容写下来交给我,我再拿着这张名片去翻译成全本英文。这显然是不可能的!信息在压缩的过程中会严重丢失,这就是著名的“信息瓶颈(Information Bottleneck)”问题。
第三阶段:Transformer 与大模型时代 (当前工业界核心)
面对 RNN 把一整篇长文压缩成一个单一向量()所导致的“信息瓶颈”与“遗忘问题”,2014 年的大神们给出的破局方案叫做——注意力机制 (Attention Mechanism) 。这不仅仅是一个补丁,它最终演变成了一场彻底推翻 RNN 的革命。我们分三步来跨入这个新时代:
第一步:破局者——注意力机制 (Attention)
在传统的 Seq2Seq 中,解码器(Decoder)翻译每一个词时,只能死死盯着那个被极度压缩的 。
注意力机制的思想极其符合人类直觉:为什么我们要死记硬背全句?我们应该在翻译当前词的时候,回头去“翻阅”原文,把注意力集中在相关的词上!
比如翻译“我爱你”到 "I love you":
-
当 Decoder 生成 "I" 时,它不只看 ,它回头去看 Encoder 每一步的状态()。它发现 (对应“我”)的权重最高,于是重点参考 。
-
当生成 "love" 时,它的注意力自动转移到了 (对应“爱”)。
通过这种方式,不管句子有多长,模型都能动态地“寻找”当前最需要的上下文,彻底打破了信息压缩瓶颈。
第二步:革命者——自注意力 (Self-Attention)
注意力机制本来是给 RNN 打辅助的,但 Google 的研究员在 2017 年提出一个疯狂的想法:既然注意力机制这么好用,能精准找到词与词之间的关系,那我们为什么还要用慢吞吞、必须串行计算的 RNN 呢?
于是,自注意力机制 (Self-Attention) 诞生了。
它的核心逻辑是:句子中的每一个词,都主动去和句子里的其他所有词进行一次“眼神交流”,计算它们之间的相关性权重。
- RNN 是时间轴上的串行接力,计算效率极低。
- Self-Attention 是空间上的矩阵相乘。所有词同时看向所有词,天生支持 GPU 并行计算,这为后来使用海量数据训练大模型奠定了硬件基础。
第三步:登峰造极——Transformer 与大模型
2017 年,Google 发表了那篇震古烁今的论文 《Attention Is All You Need》 (注意力机制就是你需要的一切)。
他们彻底抛弃了 RNN 和 CNN,用纯粹的 Self-Attention 组件加上前馈神经网络,搭建出了 Transformer 架构。
Transformer 依然保留了 Encoder-Decoder 结构,但它极其强大:
- 无限的上下文: 只要内存够,它可以一眼看全几千上万个词,完全没有 RNN 的遗忘问题。
- 暴力的算力利用: 完美契合 GPU 的矩阵计算。
这直接催生了后来的两条工业界主线(也就是现在的大语言模型 LLM):
- 左派 (Encoder 阵营): 以 Google 的 BERT 为代表。它只用 Transformer 的编码器,擅长做阅读理解、文本分类、填空。
- 右派 (Decoder 阵营): 以 OpenAI 的 GPT 为代表。它只用 Transformer 的解码器,坚守“自回归”路线,擅长文本生成、聊天对话。最终,GPT 路线大获全胜,统治了今天的 AI 时代。