NLP进化史:一场「打补丁」的技术接力赛

每一项新技术的诞生,都是因为旧技术"满足不了当下人类的欲望"。

大家好,今天我们来聊聊**自然语言处理(NLP)**这个领域是怎么一步步走到今天ChatGPT时代的。

你可能觉得这是个很学术的话题,但我换个角度讲------

NLP的发展史,其实就是一部"发现问题→解决问题→发现新问题"的循环史。

每一项技术都像是在给上一代技术"打补丁",结果打着打着,补丁比原来的系统还大,于是就成了新系统。

好,我们正式开始。

01 最初的问题:计算机根本"看不懂"人话

😫 问题是什么?

在计算机眼里,文字就是一堆符号。

你说"我爱你",计算机看到的是三个毫无意义的字符编码。它不知道这是表达感情,更不知道"爱"和"喜欢"有什么关系。

核心矛盾:人类用语言思考,计算机用数字计算。两边语言不通。

🔧 怎么解决?

早期方案:人工编写规则

语言学家们想:既然计算机不懂,那我来教它!

于是他们手写了无数条规则:

复制代码
如果句子里有"不"+动词 → 这是否定句如果出现"吗"结尾 → 这是疑问句如果"名词+的+名词" → 这是所属关系

这套方法在一些简单场景下确实能用。

❌ 有什么局限性?

规则写不完,例外杀不尽。

语言这东西太灵活了:

"这部电影还行" ------ 是夸还是贬?

"我差点没摔倒" ------ 到底摔没摔?

"他背着老婆和情人约会" ------ 谁背着谁?

人类都可能理解错,何况死板的规则?

而且不同语言规则完全不同,换个语言就得重写一遍。

成本高、覆盖率低、扩展性差。此路不通。

02 新思路:让机器自己从数据里"学"规律

😫 问题是什么?

既然规则写不完,能不能让机器自己总结规律?

🔧 怎么解决?

统计语言模型(N-gram)登场

核心思想很朴素:统计词和词一起出现的概率。

比如,给机器看了100万句话后,它发现:

"我想"后面跟"吃"的概率是30%

"我想"后面跟"石头"的概率是0.001%

所以当机器要判断哪句话更通顺时:

复制代码
我想吃苹果" ✅ 概率高"我想吃马路" ❌ 概率低

数据驱动,自动学习,不用手写规则了!

❌ 有什么局限性?

只有短期记忆,看不远。

N-gram的N通常只能取到3-5,也就是说,它只能看前面3-5个词。

复制代码
"小明昨天在北京的那家我们上周一起去过的餐厅吃了一碗很好吃的___"

答案应该是"面条"或"米饭"这类食物,但N-gram只能看到"好吃的"这几个字,完全抓不到前面的信息。

而且,这种方法只是统计表面规律,根本不理解语义。

"我喜欢苹果"和"我喜欢香蕉",在它眼里毫无关系。

03 语义困境:词和词之间的"关系"怎么表示?

😫 问题是什么?

早期我们用One-hot编码表示词汇:

复制代码
表:[我, 爱, 你, 他, 中国]"我" = [1, 0, 0, 0, 0]"爱" = [0, 1, 0, 0, 0]"你" = [0, 0, 1, 0, 0]

问题来了:

维度爆炸:词表有10万个词,每个词就是10万维的向量

语义缺失:"开心"和"高兴"明明是近义词,但它们的向量完全正交,相似度为0

计算机依然不知道"开心≈高兴"。

🔧 怎么解决?

Word2Vec(2013)横空出世

谷歌的Mikolov提出了一个天才想法:

一个词的含义,由它周围的词决定。

经常出现在相似上下文里的词,意思应该相近。

复制代码
今天天气真___" → 好/不错/棒"这道菜真___" → 好吃/美味/香

于是Word2Vec通过预测上下文的任务,把每个词压缩成一个低维稠密向量(比如300维)。

神奇的事情发生了:

复制代码
ing - man + woman ≈ queen北京 - 中国 + 日本 ≈ 东京

词向量居然能做数学运算,还符合人类直觉!

❌ 有什么局限性?

一词一向量,搞不定多义词。

复制代码
我去银行取钱" → bank = 金融机构"我在河岸边钓鱼" → bank = 河岸

但在Word2Vec里,"bank"只有一个向量。它根本分不清这是哪个意思。

每个词被"焊死"成固定表示,无法根据上下文变化。

04 序列困境:怎么处理有先后顺序的句子?

😫 问题是什么?

语言是有顺序的。

复制代码
"狗咬人" ≠ "人咬狗"

但之前的词袋模型(Bag of Words)直接把词序扔掉了,两句话表示完全一样。

我们需要一种能"按顺序阅读"的模型。

🔧 怎么解决?

RNN(循环神经网络)登场

RNN的思想很像人类阅读:一个词一个词地读,同时记住前面读过的内容。

复制代码
读"我" → 记住"我"读"爱" → 结合"我"的记忆,更新理解读"你" → 结合"我爱"的记忆,输出理解

它有一个"隐藏状态"(Hidden State),像一个小本本,边读边记。

终于能处理序列了!而且输入多长都行。

❌ 有什么局限性?

记忆太短,长句子记不住前面的内容。

这就是著名的梯度消失问题。

RNN像一个传话游戏:信息从第1个词传到第100个词,经过100次传递后,早就面目全非了。

复制代码
"小明昨天说他下周要去北京参加一个会议,会议结束后他会去找___"

读到最后,RNN可能已经忘了主语是"小明"了。

05 记忆难题:怎么让模型"该记的记住,该忘的忘掉"?

😫 问题是什么?

RNN的问题是记忆没有选择性------所有信息都混在一起,旧的容易被新的覆盖。

🔧 怎么解决?

LSTM(长短期记忆网络)

LSTM加入了三道"门":

复制代码
🚪 遗忘门:决定丢掉哪些旧信息🚪 输入门:决定记住哪些新信息  🚪 输出门:决定输出哪些信息

还有一条"细胞状态",像信息高速公路,让重要信息可以一路畅通地传递。

打个比方:

普通RNN像一个只能口头传话的人,传几句就忘。

LSTM像一个带小本本、还知道什么该记什么不该记的人。

❌ 有什么局限性?

还是串行处理,慢!

LSTM必须一个词一个词地读,不能并行。

复制代码
一句话100个词 → 要计算100步一批1000句话 → 每句都要100步

GPU明明有强大的并行能力,却只能干等着。

另外,超长文本(比如几千字的文章)依然处理不好。

06 瓶颈问题:翻译时所有信息都挤在一个向量里?

😫 问题是什么?

Seq2Seq模型做机器翻译时,分两步:

Encoder:把源语言句子压缩成一个固定向量

Decoder:从这个向量解码出目标语言

问题来了:不管输入句子多长,都得压成一个固定长度的向量。

复制代码
一句话5个词 → 压成512维向量一句话50个词 → 还是压成512维向量

信息严重损失!长句翻译效果断崖式下跌。

🔧 怎么解决?

注意力机制(Attention)

核心思想:翻译每个词的时候,回头"看"一眼所有源语言的词,看看哪些最相关。

复制代码
翻译 "I love you" → "我爱你"
生成"爱"时:  看"I" → 相关度20%  看"love" → 相关度70% ← 主要看这里!  看"you" → 相关度10%

不用把所有信息挤进一个向量了,解码时可以随时"回看"。

翻译质量大幅提升,还顺带解决了可解释性问题(能看到模型在"看"哪里)。

❌ 有什么局限性?

这时候的Attention还是配合RNN/LSTM使用的。

底层还是串行处理,还是慢。

能不能把RNN扔掉,全部用Attention?

07 效率革命:能不能完全并行处理?

😫 问题是什么?

RNN/LSTM的串行处理是根本瓶颈。

而且长距离依赖虽然比以前好了,但信息传递路径还是太长------从第1个词到第100个词,还是要经过99步。

🔧 怎么解决?

Transformer(2017)------"Attention Is All You Need"

谷歌团队直接把RNN扔了,全部用Attention。

核心创新是自注意力(Self-Attention):

复制代码
句子中每个位置都可以直接关注其他所有位置
"我爱北京天安门"
"门"可以直接看到"北京",不用经过"天""安"

路径长度从O(n)变成O(1),任意两个位置一步直达!

而且自注意力的计算可以完全并行,GPU利用率拉满。

同时通过位置编码告诉模型词的顺序,弥补没有RNN的缺陷。

❌ 有什么局限性?

计算复杂度是O(n²)。

序列长度为n时,每个位置都要和n个位置计算注意力。

512个token → 计算26万次

4096个token → 计算1677万次

长文本处理成本极高。这也是为什么早期大模型上下文窗口只有2048、4096的原因。

(后来有各种魔改方案优化这个问题,但那是后话了)

08 预训练革命:能不能先学通用知识,再适配具体任务?

😫 问题是什么?

在BERT之前,NLP任务的训练模式是这样的:

复制代码
情感分析 → 收集情感标注数据 → 从零训练一个模型机器翻译 → 收集平行语料 → 从零训练一个模型问答系统 → 收集问答数据 → 从零训练一个模型

每个任务都要大量标注数据,成本极高!

而且人类不是这样学习的------我们先学语言的通用知识(语法、常识、逻辑),再学具体技能。

🔧 怎么解决?

ELMo(2018)+ BERT(2018)开启预训练时代

ELMo首先证明:

在大规模文本上训练语言模型,学到的词向量可以迁移到下游任务。

而且ELMo的词向量是动态的------同一个词在不同上下文里表示不同:

复制代码
"苹果很好吃" → 苹果 = 水果向量"苹果发布会" → 苹果 = 公司向量

一词多义问题终于解决了!

BERT更进一步:

创造了**MLM(掩码语言模型)**训练方式:

复制代码
输入:"我喜欢吃[MASK]果"任务:预测被遮住的词是"苹"

关键是:预测时可以同时看左边和右边,实现真正的双向理解。

新范式形成:

复制代码
阶段1:在海量无标注文本上预训练(学通用知识)阶段2:在少量标注数据上微调(适配具体任务)

❌ 有什么局限性?

BERT擅长"理解",不擅长"生成"。

因为BERT的训练方式是填空,不是写作。让它续写文章、进行对话,表现一般。

另外,模型还是相对较小(1-3亿参数),能力有上限。

09 生成之王:怎么让AI学会"写"?

😫 问题是什么?

BERT能理解,但不能生成。

我们需要一个能流畅写作、对话、续写的模型。

🔧 怎么解决?

GPT系列------用自回归方式训练

GPT的训练任务很简单:给前面的词,预测下一个词。

复制代码
"今天天气" → 预测"很""今天天气很" → 预测"好"

就像人类写作:边写边想下一个字该写什么。

OpenAI的策略是:疯狂加大规模。

复制代码
GPT-1(2018):1.17亿参数GPT-2(2019):15亿参数GPT-3(2020):1750亿参数

到GPT-3时,神奇的事情发生了------

模型涌现出**In-Context Learning(上下文学习)**能力:

复制代码
给几个例子:情感:这电影太棒了 → 正面情感:真难吃 → 负面情感:还可以 → ?
模型自动输出:中性

不用微调!给几个例子就能做新任务!

❌ 有什么局限性?

模型学的是"预测概率最高的下一个词",而不是"人类想要的答案"。

它可能:

一本正经地胡说八道(幻觉)

输出有害内容

回答啰嗦废话多

不理解人类真正的意图

能力很强,但不够"听话"。

10 对齐问题:怎么让AI说人话、办人事?

😫 问题是什么?

GPT-3很强,但总有些"毛病":

问它不知道的事,它瞎编,还编得特别自信

有时候回答绕来绕去不直接

可能输出不当内容

模型的目标(预测下一个词)和人类的目标(有用、真实、安全)并不一致。

🔧 怎么解决?

RLHF(人类反馈强化学习)

这是ChatGPT能聊得这么"舒服"的核心秘密。

三步走:

复制代码
第一步:监督微调(SFT)收集高质量对话数据,让模型学习什么是"好回答"
第二步:训练奖励模型(RM)让人类给多个回答排序:"回答A比B好,B比C好"训练一个打分模型
第三步:强化学习优化(PPO)让语言模型生成回答 → 奖励模型打分 → 优化语言模型

本质是:让模型学会"什么样的回答让人类满意"。

❌ 有什么局限性?

人类反馈有偏见:标注员的偏好可能不代表所有人

可能过度讨好:模型可能为了高分变得"圆滑"

成本高:需要大量人工标注

而且RLHF解决的是"态度问题",不解决"能力问题"------不会的东西还是不会。

11 推理困境:为什么大模型做数学题老错?

😫 问题是什么?

你可能发现,ChatGPT写文章很溜,但做数学题经常出错:

复制代码
问:一个农场有5只鸡,买进3只,卖掉2只,还剩几只?答:6只 ❌(正确答案也是6,但复杂点的就经常错)

因为语言模型是"条件反射式"输出,不是真正在推理。

🔧 怎么解决?

Chain-of-Thought(思维链)

核心思想:让模型显式输出推理过程,而不是直接给答案。

复制代码
普通方式:问:5+3-2=?答:6
思维链方式:问:5+3-2=?答:让我一步步计算。   首先,5+3=8   然后,8-2=6   所以答案是6

拆解问题 → 逐步推导 → 验证结果

效果惊人:加上一句"Let's think step by step",数学推理准确率能翻倍。

❌ 有什么局限性?

增加了输出长度:推理过程要额外生成,成本更高

不是万能的:有些问题拆解了也做不对

可能"编造"推理过程:模型可能输出看起来合理但实际错误的步骤

12 知识困境:训练完就"定格"了,新知识怎么办?

😫 问题是什么?

大模型的知识截止到训练时间。

复制代码
"2024年奥运会在哪举办?"→ 如果模型2023年训练完,它可能不知道最新消息→ 或者它瞎编一个

而且专业领域知识(法律、医学、公司内部文档)很难全部塞进模型。

🔧 怎么解决?

RAG(检索增强生成)

思路很简单:让模型在回答之前,先去查资料。

复制代码
用户提问:"特斯拉2024年Q1销量如何?"    ↓检索系统:从数据库/网络找到相关文档    ↓大模型:根据找到的文档生成回答    ↓输出:"根据特斯拉官方报告,2024年Q1..."

模型变成了"开卷考试"。

❌ 有什么局限性?

检索质量是瓶颈:找不到或找错文档,回答就废了

增加延迟:先检索再生成,响应变慢

可能检索和问题不匹配:语义理解不到位

总结:一场永不停歇的"打补丁"游戏

回顾整个发展历程,你会发现一个有趣的规律:

阶段 核心问题 解决方案 新问题
规则时代 机器不懂人话 手写规则 规则写不完
统计时代 规则写不完 数据统计 没有语义理解
词向量时代 稀疏表示、无语义 Word2Vec 一词多义、无序列
RNN时代 无法处理序列 RNN/LSTM 长依赖、慢
Attention时代 信息瓶颈 注意力机制 还是依赖RNN
Transformer时代 串行处理慢 自注意力 预训练不足
预训练时代 标注数据不足 BERT/GPT 能力有限、不对齐
大模型时代 不够聪明 扩大规模 幻觉、推理差
对齐时代 不听话 RLHF 知识过时、推理弱
增强时代 知识和推理 RAG/CoT 未完待续...

每个"解决方案"都会带来新的"问题",然后催生下一个技术。

这不是缺陷,而是科学进步的常态。

写在最后

如果你看到这里,会发现NLP的发展就像盖房子:

词向量是砖头,RNN是梁柱,Attention是钢筋,Transformer是框架,预训练是装修,RLHF是精装修,RAG和CoT是家具电器。

每一样都不可或缺,缺了任何一环都到不了今天。

而这个故事还在继续------

多模态、更长上下文、更强的推理能力、更好的对齐方法......

下一个"补丁"会是什么?

让我们拭目以待。

相关推荐
NAGNIP6 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab7 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab7 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP11 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年11 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼11 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS11 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
warm3snow12 小时前
Claude Code 黑客马拉松:5 个获奖项目,没有一个是"纯码农"做的
ai·大模型·llm·agent·skill·mcp
天翼云开发者社区13 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈13 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能