从词向量到双向上下文,从特征提取到微调,一篇文章理清现代 NLP 的基石
前言
如果你刚接触自然语言处理(NLP),一定会在 ELMo、BERT、GPT 这三个名字前感到困惑:它们都是预训练模型,为什么 BERT 在阅读理解上封神,GPT 成了写作利器,而 ELMo 却渐渐淡出大众视野?它们的训练方式、底层架构、适用场景到底差在哪里?
更现实的是,今天工业界几乎不再从头训练 这些大模型,而是直接调用 HuggingFace 的 transformers 库。新手往往被 Pipeline、AutoModel、原生模型 三种调用方式搞晕------到底该选哪种?
本文将从发展史 → 核心架构 → 预训练任务 → 横向对比 → 评测基准 → 工具实战,完整梳理所有知识点。全程避开晦涩的数学公式,用通俗逻辑讲透,零基础也能看懂。最后还会补充模型后续演进,让你一次学个明白。
一、NLP 预训练模型发展时间线(先建立全局观)
在深入三个模型之前,先来快速回顾一下 NLP 的技术演进脉络。这不是枯燥的历史,而是理解"为什么会有这些模型"的关键。
-
2001 年:初代神经语言模型诞生,结构简单,无法处理长文本。
-
2013 年 :Word2Vec 和 GloVe 出现,静态词向量 成为主流。但"苹果"这个词,无论出现在"吃苹果"还是"苹果公司",向量都一模一样------无法解决多义词。
-
2014 年:Seq2Seq 编码器-解码器框架兴起,为机器翻译打下基础。
-
2015 年:注意力机制(Attention)被引入,初步解决长文本信息丢失问题。
-
2017 年 :Google 发表《Attention is All You Need》,提出 Transformer 架构 。它抛弃了 RNN/LSTM,全靠自注意力 和并行计算,彻底改变了 NLP 的玩法。
-
2018 年初 :ELMo 问世,首次实现上下文感知的动态词向量,让一词多义有了解决方案。
-
2018 年 6 月 :OpenAI 发布 GPT-1,基于 Transformer 解码器,主打文本生成。
-
2018 年 10 月 :Google 发布 BERT,基于 Transformer 编码器,双向深度理解,横扫 11 项 NLP 任务。
此后,RoBERTa、XLNet、GPT-2/3/4 等全部基于 Transformer 改良而来。
核心分水岭:
-
从 静态词向量 → 动态上下文词向量
-
从 LSTM 串行 → Transformer 全局并行
二、ELMo:第一个让词向量"读懂上下文"的模型
2.1 为什么要提出 ELMo?
Word2Vec 这类静态词向量有一个致命伤:同一个词在不同句子里永远获得相同的向量。例如:
-
"我买了一个风扇降温" → 电器
-
"我是球星的狂热风扇" → 粉丝(网络用语)
在静态模型里,这两个"风扇"的向量完全一样,模型根本区分不了。
ELMo 的出现就是为了解决这个痛点。它的核心思路很简单:一个词的向量不应该是固定的,而应该由它周围的词(上下文)来决定 。于是,同一个"风扇"在"买+降温"的邻居环境下,向量被推向了"电器"方向;在"球星+狂热"的邻居环境下,向量被推向了"粉丝"方向------通过"看邻居"动态生成向量,从而实现一词多义的区分。
ELMo 全称 Embeddings from Language Models,由华盛顿大学于 2018 年初提出。它在当时 6 类经典 NLP 任务上都取得了显著提升,是工业界第一个真正意义上的上下文感知词向量模型。
2.2 三层核心架构(从下往上)
ELMo 的架构不算复杂,宏观上分为三层:
底层:字符级 CNN 编码层
它不直接使用词表,而是把单词拆成字符(如 "cat" → c, a, t),用 CNN 提取字符特征。这样做的好处是能处理**未登录词(OOV)**和生僻词,比如专业术语、新造词------即使 ELMo 从未见过这个词,也能根据字母组合给出一个基础向量,再结合上下文进行调整。
中间层:双向 LSTM(核心特征提取)
这里并行训练了两个独立的 LSTM:
-
前向 LSTM:从左到右读取句子,捕捉"上文"对当前词的影响。
-
反向 LSTM:从右到左读取句子,捕捉"下文"的影响。
但是,这两个 LSTM 是独立训练、互不通气的 ,最后只是把两个方向的隐状态简单拼接在一起。打个比方:两个侦探分别从左右两侧搜集线索,各写一份报告,最后把两份报告钉在一起上交------虽然报告里既有左边信息也有右边信息,但两个侦探从来没有坐下来商量过。这是 ELMo 与 BERT 最本质的差别------它的"双向"是浅层的拼接,而非深度融合。
另外,ELMo 堆叠了两层 LSTM,分别捕捉浅层语法 (如词性)和深层句法(如语义角色)。
顶层:融合层
模型给每个位置产出 5 组向量(底层字符向量 + 第一层 LSTM 的正反向隐状态 + 第二层 LSTM 的正反向隐状态),并为每一组学一个权重,最后加权求和,得到最终的动态词向量。
2.3 ELMo 的"理解"困境:感知到了,但没真正理解
ELMo 让词向量随着语境动态变化,这确实是巨大进步。但必须正视一个问题:它真的"理解"语义了吗?
答案是否定的。因为前向 LSTM 和后向 LSTM 各自独立,没有交叉推理,ELMo 实际上是**"感知"**到了左右两侧的语境,并把两股独立的信息强行压缩进了同一个向量里。它只知道"左边有 A、右边有 B",却不明白"A 和 B 放在一起意味着什么"。
所以 ELMo 的定位很清晰:它解决了"有无"问题 ------从静态固定到动态生成,让多义词在数值层面能被区分;但没有解决好坏的"深度"问题------左右信息缺乏深层交互,拼凑不等于理解。当句子变长、歧义需要左右互文才能消解时,这种拼凑式表征就会力不从心。
2.4 ELMo 的使用方式:特征提取
ELMo 采用 特征提取(Feature-based) 策略:预训练好的模型权重固定不动,只把它的输出向量作为下游任务(比如分类器、CRF 层)的输入特征。这种方式在小数据集上非常省心,因为不需要微调整个大模型。但也正因为它的表征能力有上限(浅层双向),后来者 BERT 选择了完全不同的道路------微调整个网络,用深度双向注意力替代 LSTM 拼接,才真正迈出了从"感知"到"理解"的关键一步。
2.5 优缺点
优点:
-
首个动态上下文词向量,从根源上区分了多义词。
-
基于字符级 CNN,对生僻词、新词友好。
-
特征提取式使用,小数据场景成本低。
缺点(也是被淘汰的原因):
-
底层是 LSTM,长距离依赖捕捉能力弱,处理长文本时效果打折。
-
双向只是拼接而非融合,左右信息没有深层交互,语义表征上限不高。
-
LSTM 必须串行读取文本,训练和推理速度远慢于 Transformer。
-
只提供词向量,不提供完整的句子表示,对句子级任务(如相似度、问答)支持较弱。
三、BERT:统治语言理解领域的里程碑
3.1 BERT 是什么?
BERT 全称 Bidirectional Encoder Representation from Transformers ,Google 于 2018 年 10 月发布。它只用 Transformer 的 编码器(Encoder) 堆叠,配合两个新颖的预训练任务,直接刷新了 11 项 NLP 数据集纪录,甚至在 SQuAD 阅读理解任务上超越人类基准。
BERT 的定位非常明确:擅长自然语言理解(NLU) ,比如文本分类、问答、命名实体识别(NER)、语义相似度等,但不擅长文本生成(因为它看不到未来词,没法像 GPT 那样逐字续写)。
3.2 BERT 的架构拆解
BERT 自下而上也是三层:
输入嵌入层(Embedding)
输入文本会生成三个 768 维的向量,然后逐元素相加,作为模型的初始输入:
-
Token Embedding :每个词的词向量。特殊标记
[CLS]放在句首,它的最终隐状态用于整句分类;[SEP]用来分隔两个句子。 -
Segment Embedding:区分句子 A 和句子 B(用于问答、句对任务)。
-
Position Embedding :位置编码,但与 Transformer 原版的固定三角函数不同,BERT 用的是可学习的位置编码,让模型自己从数据中学会位置信息。
【工程实战:海量句子的并行输入(Batch、Padding 与 Mask)】
(注:以上逻辑侧重于"单条句子"如何生成 E 向量。但在真实训练或推理时,我们面对的是成千上万条长短不一的句子。由于 GPU 显存有限且要求矩阵运算必须"规整",底层输入层还需做如下工程化处理):
-
分批次(Batch) :程序不会一次性塞入所有句子,而是将其切分成固定大小的小包(例如 Batch Size = 32)。此时,送入模型的输入张量维度从单条的
[序列长度, 768]变成了[32, 序列长度, 768]。 -
统一对齐(Padding) :一个小包里的 32 条句子长短不一(如"我爱猫"仅 3 个字,"那只聪明的橘猫爱吃鱼"有 10 个字)。为了让它们形成矩形矩阵,程序会取该包内最长句子的长度 (如 10)作为标准,将短句的末尾强行补上无意义的占位符
[PAD],直到长度达到 10。 -
注意力掩码(Attention Mask) :补上的
[PAD]只是占位符,绝不能参与语义计算。因此,BERT 会生成一张对应的掩码表:真实文字位置标为 1,[PAD]位置标为 0。在计算自注意力时,所有标为 0 的位置会被强行加上负无穷(-inf) ,经过 Softmax 后直接归零。注意:同一个 Batch 里的不同句子之间也是互相隔离的,模型计算"我爱猫"时,绝不允许偷看同包里"今天下雨"的内容,确保每条句子独立并行计算。
中间层:多层 Transformer Encoder(核心)
BERT 舍弃了解码器,只堆叠编码器。每一层编码器都包含多头自注意力和前馈网络。关键在于它的自注意力是无掩码(unmasked) 的,也就是说,每个词在计算注意力时可以同时看到左边和右边的所有词,实现真正的全局双向深度融合。
对比 ELMo 的"拼接式双向",BERT 是每一层都在融合上下文,语义理解能力碾压。
【关于"双向注意力"导致无法做生成任务的架构定论】
正因为它"无掩码"的双向特性,我们必须在设计之初就清醒认识到:BERT 的架构天生排斥"文本生成"任务(如续写、对话)。因为生成任务的核心逻辑是"自回归(Autoregression)",即根据已经生成的左边文字,逐字往右预测,未来的词在生成时尚未出现。而 BERT 在计算条件概率时依赖全局上下文(包括右边的词),这与生成任务的数学定义根本冲突。因此,BERT 专攻"理解",而"生成"的重任交给了 GPT 系列。
顶层:任务适配输出层
BERT 的主干网络通用,针对不同下游任务只需要更换输出层(即"微调"),无需改动主体参数:
-
单句分类(情感分析) :取
[CLS]的输出,接一个分类层。 -
句对分类(相似度、蕴含) :同样用
[CLS]编码两句关系。 -
阅读理解:预测答案在原文中的起始和结束位置。
-
序列标注(NER):为每个 token 输出一个标签。
3.3 BERT 的两大预训练任务(为什么它这么强?)
预训练阶段,BERT 在海量无标注文本(如 Wikipedia)上同时学习两个任务,从而掌握通用的语言知识。
任务 1:MLM(掩码语言模型)
这类似于英语的完形填空。随机选 15% 的 token,然后按以下规则处理:
-
80% 替换为
[MASK]特殊标记 → 模型必须根据左右上下文预测原词。 -
10% 替换为一个随机词 → 训练模型纠错能力。
-
10% 保持不变 → 防止模型过度依赖
[MASK]标记。
通过这个任务,BERT 被迫学会利用双向上下文,因此对词义消歧、句法理解掌握得非常好。
【进阶探讨:静态掩码(Static Masking)的缺陷与动态掩码(Dynamic Masking)的改进】
原版 BERT 在处理 MLM 任务时,采用的是"静态掩码":在数据预处理阶段就一次性随机选好 15% 的词打上 [MASK],并将这份带有固定掩码位置的文本直接写入磁盘。这意味着在整个模型训练过程中(几十个 Epoch),模型反复看到的都是同一批被遮住的词。
这种做法的弊端在于:模型极易对固定的 [MASK] 位置产生过拟合,它可能只是在死记硬背"第 3 个位置缺什么",而并没有学会根据任意上下文进行泛化推理。
后续的 RoBERTa 模型对此做出了极简却高效的改进------动态掩码(Dynamic Masking):不再预处理掩码位置,而是在每一轮训练(每个 Epoch)开始时,临时随机选取 15% 的词进行掩盖。这使得同一个句子在不同轮次中被遮住的词完全不同,模型被迫根据各种不同的剩余信息进行推断,极大地增强了鲁棒性,且相当于无限扩充了训练数据。
任务 2:NSP(下一句预测)
这是一个二分类任务。给定句子 A 和句子 B,判断 B 是否是原文中紧跟在 A 后面的真实下一句。
-
正样本 :连续的两句话,标签为
IsNext。 -
负样本 :从不同文档随机抽两句配对,标签为
NotNext。
NSP 旨在让模型学会句子间的关系,但后来(如 RoBERTa)发现这个任务收益不大,甚至可能干扰长文本学习,所以后续很多模型都去掉了 NSP。
【深入剖析:NSP 任务被"诟病"的三大根源】
虽然 NSP 的初衷很好,但后续研究(特别是 RoBERTa 的消融实验)证明它存在严重的设计缺陷:
-
任务过于简单,模型走了"捷径":负样本(NotNext)大多来自不同文档,模型根本不需要理解上下文的逻辑承接关系,只需要发现两句话的"主题"完全不同(比如一句讲苹果,一句讲地球),就能轻松判断。模型并未真正学会因果推理。
-
干扰了长文本建模:NSP 强制将两句话拼接,挤占了宝贵的 512 个 token 长度限制,导致单句的上下文被截断,破坏了长文档的语义连贯性。
-
实验证明"去掉更好":RoBERTa 直接舍弃 NSP,只保留 MLM 进行训练,在 GLUE 和 SQuAD 等基准测试上全面超越了原版 BERT。这从实验层面证实了 NSP 是一个"鸡肋"任务。
3.4 BERT 的优缺点
优点:
-
双向 Transformer 编码,上下文表征能力在当时达到巅峰。
-
MLM + NSP 双任务联合训练,同时掌握词汇和句子级语义。
-
微调(Fine-tuning) 范式:所有下游任务共用同一个主干,只需加一个输出层,非常通用。
-
开源多语言版本,包括
bert-base-chinese,中文 NLP 开箱即用。
缺点:
-
架构天然缺陷 :因为双向注意力机制依赖"未来信息",与"自回归(从左到右)"的生成逻辑冲突,导致 BERT 完全无法做续写、对话等生成任务(该赛道由 GPT 主导)。
-
预训练策略的过时 :原始的 NSP(下一句预测) 任务被证明不仅收益甚微,甚至因引入过多跨文档噪声而干扰了模型训练;同时,静态掩码 策略也易导致模型对
[MASK]位置过拟合。 -
模型体积大,训练和推理成本高。
-
原生支持最长 512 个 token,超长文本需要截断或分段。
四、GPT:单向自回归的生成之王
4.1 GPT 的定位
GPT 全称 Generative Pre-trained Transformer,由 OpenAI 在 2018 年 6 月发布(比 BERT 早几个月)。它的设计思路与 BERT 完全相反:
-
采用 Transformer 的解码器(Decoder) ,带因果掩码(causal masking) ,保证每个词只能看到它之前的词。
-
预训练任务为自回归语言模型:根据前文预测下一个词。
-
定位:自然语言生成(NLG),在文本续写、对话、代码生成等领域有天然优势。
GPT-1 规模不大,但 GPT-2/3/4 不断增大参数量和数据量,展现出令人惊叹的生成能力和推理能力。
4.2 GPT 的架构与生成逻辑
因果掩码注意力 :
在解码器的自注意力中,第 N 个 token 只能关注到 1~N-1 的位置,看不到 N 及之后的信息。这模拟了人类从左到右的写作方式,但也意味着它无法利用后文来理解当前词,所以在语言理解任务上不如 BERT。
自回归生成流程(以续写为例):
-
输入初始文本(如"今天天气"),转为 token ID,加上位置编码。
-
经过多层 Decoder,每一层都只缓存前文信息。
-
最后一层输出一个向量,与词嵌入矩阵做乘法,得到整个词表的概率分布。
-
选择一个概率最高的词(或者用采样策略,如 top-k)作为下一个词,拼到输入末尾。
-
重复步骤 2~4,直到生成
[EOS](结束符)或达到最大长度。
4.3 GPT 的优缺点
优点:
-
单向设计天然适合生成任务,流畅度和连贯性优秀。
-
推理时只需增量计算,效率相对可控。
-
迭代路线成熟,从 GPT-1 到 GPT-4,规模扩大后涌现出意想不到的推理、编程等能力。
缺点:
-
只能利用上文,无法看到下文,导致理解类任务(如情感分类、问答)弱于 BERT。
-
预训练只有自回归任务,缺乏句子级和句间关系的学习。
-
微调做理解任务时,效果通常不如同等规模的 BERT。
五、三大模型全方位对比(一张表看懂)
| 对比维度 | ELMo | BERT | GPT |
|---|---|---|---|
| 底层架构 | 双层双向 LSTM(独立训练) | Transformer Encoder(多层堆叠) | Transformer Decoder(带因果掩码) |
| 上下文方向 | 浅层拼接双向 | 深度全局双向 | 单向(仅上文) |
| 预训练任务 | 前向 + 反向语言模型(两个任务独立) | MLM(掩码预测)+ NSP(下一句预测) | 自回归(预测下一个词) |
| 使用方式 | 特征提取(冻结主干) | 微调(全参数更新) | 微调(全参数更新) |
| 擅长任务 | 简易特征提取、传统模型增强 | 分类、问答、NER、相似度等理解任务 | 文本生成、对话、代码、摘要 |
| 并行效率 | 低(LSTM 串行) | 高(Transformer 并行) | 中等(生成时需串行迭代) |
| 多义词支持 | 支持动态向量 | 深度双向动态,效果最好 | 仅根据前文,效果一般 |
选型
-
做情感分析、实体识别、阅读理解、文本相似度 → 无脑选 BERT 或它的变体(RoBERTa、ALBERT)。
-
做AI 写作、聊天机器人、代码补全、故事生成 → 选 GPT 系列(或 GPT-2/3/4)。
-
小数据、老旧系统、仅需词向量特征 → 可考虑 ELMo(但现在极少用了,完全可以用轻量 BERT 替代)。
六、如何公平比较模型能力?GLUE 和 CLUE 评测基准
单看一个任务上的成绩不能说明问题,工业界和学术界常用标准化评测基准来统一衡量模型的语言理解能力,相当于 NLP 界的"高考"。
6.1 GLUE(通用语言理解评估基准)
-
由纽约大学等机构于 2018 年推出,包含 9 项英文任务,涵盖情感分析、语法判断、语义相似度、自然语言推断、问答匹配等。
-
所有英文预训练模型(BERT、RoBERTa、T5 等)都会在 GLUE 上跑分,得分越高代表通用语言理解能力越强。
-
后续还有 SuperGLUE,难度更高,挑战模型的推理能力。
6.2 CLUE(中文语言理解评估基准)
-
因为中文和英文在语法、分词、语义上有巨大差异,直接套用 GLUE 不合理,所以国内团队推出了 CLUE。
-
包含中文短文本分类、科技论文关键词识别、指代消解、阅读理解、小样本学习(FewCLUE)等任务。
-
国内所有中文预训练模型(如 ERNIE、MacBERT、Chinese-BERT-wwm)都使用 CLUE 榜单来证明自己的实力。
这两个基准是衡量模型"通用理解能力"的标尺,对新手来说,只要记住:模型发布时都会报告在这些基准上的分数,分数越高越好。
七、HuggingFace Transformers 库:工业界标配工具(三层 API 实战指南)
现在,几乎没有人从零开始训练 BERT 或 GPT,大家都直接使用 HuggingFace 开源的 transformers 库。它封装了海量预训练权重,支持 PyTorch 和 TensorFlow,并且提供三层不同抽象程度的 API,满足从新手到专家的各种需求。
7.1 三层 API 金字塔(由简到繁)
┌─────────────┐
│ Pipeline │ ← 极简,一行代码完成推理
├─────────────┤
│ AutoModel │ ← 通用,自动匹配架构,企业首选
├─────────────┤
│SpecificModel│ ← 底层,完全自定义,研究者专用
└─────────────┘
第一层:Pipeline(新手友好,快速验证)
Pipeline 是最高度封装的接口,一行代码就能完成整个 NLP 任务,内部自动处理分词、模型加载、推理、结果解码。
python
from transformers import pipeline
# 情感分析
classifier = pipeline("sentiment-analysis")
result = classifier("I love this movie!")
print(result) # [{'label': 'POSITIVE', 'score': 0.999}]
# 文本生成(GPT-2)
generator = pipeline("text-generation", model="gpt2")
print(generator("Once upon a time", max_length=30))
适用场景 :快速测试模型效果、Demo 演示、非算法人员使用。
缺点:无法修改模型内部,不能微调。
第二层:AutoModel(通用工程首选)
AutoModel 系列会根据你指定的模型名称自动加载对应的架构 ,配合 AutoTokenizer 自动匹配分词器。这是最常用的方式,兼顾了灵活性和便捷性。
python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
inputs = tokenizer("Hello world!", return_tensors="pt")
outputs = model(**inputs)
常用的 Auto 类:
-
AutoModel:基础,只输出隐向量,适合自定义下游。 -
AutoModelForSequenceClassification:文本分类。 -
AutoModelForCausalLM:GPT 类生成。 -
AutoModelForQuestionAnswering:阅读理解。
优势:更换模型(如从 bert 换到 roberta)只需改模型名称,代码不用变。绝大多数企业微调和推理都用这一层。
第三层:SpecificModel(底层研究者专用)
直接调用具体的类,如 BertModel、GPT2Model、ElmoModel,没有任何自动封装。你可以完全控制网络的每一层、修改注意力机制、自定义损失函数。
python
from transformers import BertModel, BertTokenizer
model = BertModel.from_pretrained("bert-base-uncased")
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 手动处理 tokenization、张量维度、设备迁移...
适用人群 :算法研究员、论文复现、模型结构改造。
缺点:代码量大,需要手动处理很多细节。
7.2 选型建议
-
快速测试、Demo → Pipeline
-
通用业务微调、推理上线、多模型切换 → AutoModel
-
研究、底层创新 → SpecificModel
7.3 实用小贴士
-
安装 :
pip install transformers,建议在虚拟环境中操作。 -
模型下载:首次使用时自动从 HuggingFace Hub 下载,也可手动下载离线使用。
-
Tokenizer 的作用 :把自然语言文本转成模型可读的数字 ID,同时自动添加
[CLS]、[SEP],并进行 padding(补长)和 truncation(截断)。 -
推理加速 :预测时务必使用
model.eval()关闭 Dropout,并用with torch.no_grad():关闭梯度计算,这样能大幅提升速度并节省显存。
八、全文知识点总结
-
ELMo:动态词向量开山之作,双向 LSTM 拼接,特征提取式使用,长文本能力弱。
-
BERT:Transformer Encoder,MLM + NSP 预训练,专注语言理解(分类、问答、NER)。
-
GPT:Transformer Decoder 带因果掩码,自回归预训练,专注语言生成(续写、对话)。
-
核心差异:特征提取器(LSTM / Encoder / Decoder)、上下文可见范围(浅层双向 / 深层双向 / 单向)。
-
评测基准:GLUE(英文)、CLUE(中文),标准化衡量理解能力。
-
HuggingFace 三层 API:Pipeline(极简)、AutoModel(通用)、SpecificModel(自定义)。
九、拓展延伸:后 BERT/GPT 时代都发展了啥?
BERT 的优化派系:
-
RoBERTa:移除 NSP,改用动态掩码,用更大数据训练,性能超越 BERT。
-
ALBERT:参数共享,大幅减少参数量,同时保持性能。
-
ELECTRA:用替换检测任务代替 MLM,训练更高效。
-
DistilBERT:知识蒸馏,模型缩小 40%,速度提升 60%,适合轻量部署。
GPT 的进化:
-
GPT-2:数据更大,参数量 15 亿,生成文本已相当流畅。
-
GPT-3:参数达到 1750 亿,展现强大的少样本学习能力。
-
GPT-4:多模态融合,支持图文理解。
统一架构:
-
T5 和 BART 融合了 Encoder + Decoder,既能做理解也能做生成,成为通用基线。
-
XLNet 采用置换语言建模,兼顾双向上下文和自回归生成,但计算成本高。
轻量化趋势:
- 蒸馏、量化、剪枝等技术让大模型能在手机端运行,推动落地。
结语
从 ELMo 到 BERT 再到 GPT,我们看到了 NLP 模型如何从"静态词向量"走向"动态上下文",从"单向"走向"双向"再到"生成主导"。理解这三个里程碑模型,就抓住了现代 NLP 的骨架。
而 HuggingFace 的 transformers 库则把复杂模型变成了简单几行代码的工具,让每个人都能快速上手。希望这篇全指南能帮你扫清迷雾,无论是学习还是工作,都能心中有谱。