BERT、GPT 和 ELMo 是自然语言处理(NLP)中三个具有代表性的预训练语言模型,它们各自提出了不同的架构和预训练方法,在模型设计、上下文建模方式、训练目标等方面存在明显区别。以下是它们的核心对比:
一、基本信息对比
特性 | BERT | GPT | ELMo |
---|---|---|---|
发布时间 | 2018年(Google) | 2018年(OpenAI) | 2018年(AllenNLP) |
架构类型 | Transformer Encoder | Transformer Decoder | 双向 LSTM(BiLSTM) |
上下文建模 | 双向(Masked) | 单向(自回归) | 双向(层叠式) |
预训练目标 | MLM + NSP | 自回归语言模型(CLM) | 词级语言模型(LM) |
表示粒度 | 句子级、Token级 | 句子级、Token级 | 词级 + 子词级(可调) |
是否可调任务头 | 是 | 是 | 否(固定词向量提取器) |
代表任务 | 分类、问答、NER | 生成、对话、续写 | 情感分析、序列标注 |
二、核心区别详解
1. 模型结构
BERT:只用 Transformer 的 Encoder,使用 Masked Attention,可以双向同时看左/右上下文。
GPT:只用 Transformer 的 Decoder,自回归结构,生成时只看左侧上下文。
ELMo:基于 BiLSTM,两层单向 LSTM 分别从左到右、右到左建模,然后拼接。
2. 上下文建模方式
模型 | 上下文处理 | 示例 |
---|---|---|
BERT | 同时利用左右文信息(掩码) | “我去过 [MASK] 国家。” → 利用“我去过”和“国家”共同预测 |
GPT | 只能利用前文信息 | “我去过中国的…” → 只能基于“我去过中国的”生成后续 |
ELMo | 左右分别建模(拼接) | 用两个单向 LSTM 独立建模,再组合成表示 |
3. 预训练任务
BERT:
MLM(Masked Language Modeling):随机遮盖句子中的部分词,预测这些词。
NSP(Next Sentence Prediction):判断两个句子是否是连续的。
GPT:
Causal Language Modeling(CLM):逐词预测下一个词,自回归式生成。
ELMo:
传统的词级语言模型,两个方向分别训练语言模型。
4. 输入输出方式
模型 | 输入结构 | 输出表示 |
---|---|---|
BERT | [CLS] A [SEP] B(多句) | 每个 Token 表示 + 句子表示(CLS) |
GPT | 单句或拼接句子 | 每个 Token 表示 + 自回归生成 |
ELMo | 单词序列 | 每个 Token 的向量表示 |
5. 应用场景比较
场景 | BERT | GPT | ELMo |
---|---|---|---|
文本理解 | ★★★★☆ | ★★☆☆☆ | ★★★☆☆ |
文本生成 | ★★☆☆☆ | ★★★★★ | ★☆☆☆☆ |
对话系统 | ★★★☆☆(需微调) | ★★★★★ | ★☆☆☆☆ |
序列标注 | ★★★★☆ | ★★☆☆☆ | ★★★☆☆ |
可扩展性 | ★★★★★(多任务支持) | ★★★★★ | ★★☆☆☆ |
三、总结对比图
项目 | BERT | GPT | ELMo |
---|---|---|---|
架构 | Transformer Encoder | Transformer Decoder | BiLSTM |
上下文建模 | 双向 Masked Attention | 单向 自回归 | 双向 LSTM(拼接) |
输入方式 | Mask 句子 | 原始句子(顺序输入) | 原始词序列 |
输出 | 所有 Token 的上下文表示 | 下一个词概率 | 上下文词向量 |
代表用途 | 文本分类、问答、NER | 生成文本、对话系统 | 情感分析、NER、词义消歧等 |
缺点 | 无法自然生成文本 | 上下文理解能力较弱 | 不支持任务微调,表示静态 |
四、简明推荐
需求 | 推荐模型 | 原因 |
---|---|---|
文本生成、聊天机器人 | GPT | 生成质量高,支持上下文续写 |
句子级理解、问答、NER | BERT | 双向建模,理解能力强 |
快速词向量迁移使用 | ELMo | 无需深度微调即可提取表示 |