ELMo 简介
ELMo(Embeddings from Language Models)是 2018 年 3 月由华盛顿大学提出的一种预训练语言模型,其核心论文为《Deep Contextualized Word Representations》。传统的词向量如 Word2Vec 和 GloVe 都是上下文无关的静态向量,无法区分多义词。例如'apple'在不同语境下分别指代水果或公司,但固定向量难以捕捉这种差异。ELMo 通过构建上下文相关的预训练模型,在 6 个 NLP 任务上均取得了性能提升。
ELMo 的架构
宏观来看,ELMo 主要由三个核心模块构成:最底层的 Embedding 模块、中间层的双向双层 LSTM 模块,以及最上层的词向量表征模块。
总体架构

Embedding 模块
最底层采用 CNN 对字符级进行编码,生成静态的词嵌入向量作为网络输入。这一步本质上是获取一个基础的词表示。
两部分的双层 LSTM 模块
这是 ELMo 的核心。架构分为左侧的前向 LSTM 和右侧的反向 LSTM。与传统做法不同,ELMo 只预训练一个语言模型,而 word embedding 是根据输入句子实时生成的。这意味着单词的嵌入向量天然包含了上下文信息。
对于左半部分,给定 N 个 tokens (t1, t2, ..., tN),语言模型利用前 k-1 个位置的 token 序列计算第 k 个 token 出现的概率,构成前向双层 LSTM。

同理,右半部分利用后 N-k 个位置的 token 序列计算第 k 个 token 的概率,构成后向双层 LSTM。

训练目标函数即最大化上述序列的概率。

词向量表征模块
由于 ELMo 是语言模型,每个 token 通过 L 层双向 LSTM 网络可计算出 2L+1 个表示向量:包括最底层的 CNN 编码结果、前向 LSTM 的 L 层输出、以及后向 LSTM 的 L 层输出。

虽然得到了 2L+1 个向量,但我们需要每个 token 对应一个向量。最简单的方法是取最上层输出,但更通用的做法是引入参数融合所有层信息:

该公式意为给 2L+1 个向量分别加上权重稀疏系数,融合成一个向量后再乘以系数得到最终词向量。原始论文指出,这个前置系数在不同任务中取值差异较大,例如在 SQuAD 任务中设为 0.01 优于 1。维度方面,初始嵌入为 512 维,双向 LSTM 每层输出 1024 维,融合后最终向量维度为 1024。
ELMo 的预训练任务
本质思想
ELMo 的本质是利用语言模型学习单词的 word embedding。虽然初始状态无法区分多义词,但在实际使用时,根据当前上下文动态调整 embedding 表示,使其能准确表达单词在当前语境下的真实含义。
两阶段过程
第一阶段:语言模型预训练
回到总体架构,网络采用双层双向 LSTM。任务目标是预测单词 Wi,Wi 之前的序列称为上文,之后的称为下文。左侧前向编码器处理上文,右侧反向编码器处理下文,深度均为 L=2。
当输入新句子时,每个单词可获得 3 个 embedding 向量:
- 最底层单词的 word embedding。
- 第一层双向 LSTM 中的 embedding,侧重句法信息。
- 第二层双向 LSTM 中的 embedding,侧重语义信息。
这一阶段不仅学会了 word embedding,还训练好了一个双层双向 LSTM 网络,两者均为后续使用的基础。
第二阶段:下游任务调整
以 QA 任务为例,将问句 X 输入预训练好的 ELMo 网络,获得每个单词的 3 个向量。赋予各自权重 a(可学习或平均),加权求和后整合成词向量,作为新特征补充进下游任务网络。回答 Y 同样处理。这类方法被称为"Feature-based Pre-Training"。
ELMo 模型的效果
ELMo 有效解决了多义词问题。对比 GloVe 训练的静态 embedding,对于多义词 play,GloVe 找出的近义集合几乎全在体育领域,受训练数据分布影响明显。而 ELMo 经过上下文动态调整后,不仅能找到对应'演出'含义的句子,还能保证词性一致,效果超出预期。
原始论文显示,ELMo 在 6 个主流 NLP 任务(如句子语义关系判断、分类、阅读理解等)中均有提升,最高达 25%。
ELMo 的待改进点
尽管相比 Word2Vec 和 GloVe 有显著提升,ELMo 仍存在局限:
- 特征提取器选择:ELMo 使用双向双层 LSTM,而非后来的 Transformer。在特征提取能力上,LSTM 弱于 Transformer。若当时选用 Transformer,后续 BERT 的影响力或许会有所不同。
- 特征融合方式:ELMo 采用双向拼接融合,不如 BERT 的一体化双向提取特征高效。
小结
- 定义:ELMo 是 2018 年华盛顿大学提出的预训练语言模型,在 6 种 NLP 任务中表现优异。
- 结构:采用双向双层 LSTM,包含 Embedding 层、LSTM 层及特征融合层。
- 预训练:分两阶段,先预训练语言模型获取基础向量和网络,再在下游任务中提取上下文相关特征。
- 效果:相比静态词向量,ELMo 能更好表达真实语义,解决多义词问题。
- 局限:未采用 Transformer 架构,特征提取能力弱于后续模型。




