核心要点
ELMo(Embeddings from Language Models)用双向 LSTM 语言模型,词向量是根据整句上下文动态生成的(contextualized)。
同一个词在不同句子里得到不同向量,因此天然能表达一词多义,这是相比 Word2Vec/GloVe 静态向量的最大优势。
ELMo 输出是各层 LSTM 表示的加权和,下游任务可学习权重,浅层偏句法、深层偏语义。
缺点:所谓双向其实是两个独立单向 LSTM 的拼接(非真正同时双向);LSTM 序列计算难并行、训练慢;特征抽取能力弱于后来的 Transformer / BERT。
标准回答
ELMo 是什么ELMo 全称 Embeddings from Language Models,核心是先用大语料训练一个 双向 LSTM 语言模型,然后用它为每个词生成依赖整句上下文的动态向量。与 Word2Vec、GloVe 给每个词一个固定向量不同,ELMo 的词表示是把同一句子前向、后向 LSTM 各层的隐状态按可学习权重加权求和得到的,所以输入句子变了,词向量就变。能否做到一词多义:能这正是 ELMo 的最大卖点。以 bank 为例,在「河岸」和「银行」两个句子里,前后向 LSTM 编码进了不同的上下文信息,输出的 bank 向量自然不同。静态词向量做不到这一点——它把一个词所有义项压成一个向量。ELMo 的上下文相关(contextualized) 特性,让多义词在不同语境下得到可区分的表示,这是从静态到动态词向量的关键跨越。优点小结 按上下文动态生成、能区分多义;多层表示分工明确,浅层更偏句法、深层更偏语义,下游可按任务学习层间权重;作为特征接入各类任务普遍带来提升。缺点 第一,它的「双向」是 两个独立的单向 LSTM 499(一个从左到右、一个从右到左)各自建模后再拼接,并非真正同时利用双向上下文,信息融合较浅,这也是 BERT 用掩码语言模型实现真双向来改进的点。第二, LSTM 按时间步串行,难以并行,训练和推理都慢。第三, 特征抽取能力弱于 Transformer623,长距离依赖建模和表达力都不如后来的自注意力结构,因此很快被 BERT 等取代。
常见误区
⚠️ 常见踩坑
别把 ELMo 的「双向」理解成像 BERT 那样的真双向——它只是前向和后向两个单向语言模型的拼接,每个方向预测时只看自己这一侧的历史;也别忽略它是 feature-based(产出向量喂给下游模型),用法上与 BERT 的 fine-tuning 范式不同。
追问
追问 1:ELMo 的双向和 BERT 的双向具体差在哪里?
ELMo 用两个独立的单向 LSTM:一个只看左侧历史做正向语言模型,一个只看右侧做反向,最后把两个方向的表示拼接起来,每个方向内部预测某词时都只用到单侧上下文,融合发生在最后一层之外,是「浅层双向」。BERT 用掩码语言模型,随机遮住部分词,让 Transformer 在预测被遮词时同时看到左右两侧全部上下文,是同一网络内部的「深层真双向」,因此上下文建模更充分。
追问 2:ELMo 为什么很快被 BERT 取代?
主要三点。一是 BERT 的真双向 + 掩码语言模型对上下文的利用比 ELMo 的双向拼接更充分;二是 BERT 基于 Transformer 自注意力,能并行计算、长距离依赖建模更强,而 ELMo 的 LSTM 串行且特征抽取能力弱;三是范式上 BERT 支持端到端 fine-tuning,整模型随下游任务一起微调,通常比 ELMo 那种把向量当固定特征喂给下游模型的 feature-based 方式效果更好、更省工程。
追问 3:既然 ELMo 已过时,理解它对今天还有什么意义?
它是从静态词向量走向上下文动态表示的关键里程碑,第一次系统性地展示了「同一个词应随上下文得到不同向量」,并验证了大规模语言模型预训练 + 下游迁移这条路线的价值,直接启发了后续的 GPT、BERT。理解 ELMo 有助于把握「为什么需要上下文表示」「真双向相对浅层双向强在哪」「为什么 Transformer 取代 LSTM」这几条主线,是理解现代预训练模型演进逻辑的重要一环。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习