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 对应一个向量。最简单的方法是取最上层输出,但更通用的做法是引入参数融合所有层信息:





