ELMo 模型介绍
1 课程概览
本课介绍 ELMo 模型。ELMo 是 2018 年 3 月由华盛顿大学提出的预训练模型,是第一个支持动态词向量的模型。传统的 Word2Vec 是静态词向量,与上下文无关。ELMo 使用双向 LSTM 模拟双向,底层使用 CNN 对字符集进行编码,能表达一词多义。
2 核心概念与定义
- ELMo:Embeddings from Language Models,基于语言模型的词嵌入。
- 动态词向量:根据上下文变化的词向量。
- 静态词向量:与上下文无关的词向量(如 Word2Vec)。
- 一词多义:同一个词在不同语境下有不同含义。
- 双向 LSTM:用于模拟双向上下文。
3 模型与算法详解
ELMo 简介
2018 年 3 月由华盛顿大学提出。
- 全称:Embeddings from Language Models
- 提出时间:2018 年 3 月
- 提出者:华盛顿大学
- 特点:第一个支持动态词向量的模型
ELMo 的动机
传统的 Word2Vec 是静态词向量,与上下文无关。
- 好的预训练模型应该包含丰富的句意和语义
- 能对多义词进行建模
- 支持一词多义
- 支持动态词向量
静态词向量 vs 动态词向量
| 类型 | 代表 | 特点 |
|---|---|---|
| 静态词向量 | Word2Vec | 与上下文无关 |
| 动态词向量 | ELMo | 根据上下文变化 |
示例:apple
同一个词在不同语境下有不同含义。
- "I eat an apple":苹果(水果)
- "Apple is a company":苹果(公司)
- 静态词向量无法区分
- 动态词向量可以根据上下文区分
ELMo 架构
三层结构。
| 层 | 说明 |
|---|---|
| 底层 | CNN 对字符集进行编码(静态词向量) |
| 中间 | 双向 LSTM(前向 + 反向) |
| 顶层 | 词向量表征模块(微调) |
双向 LSTM
ELMo 是双向模型,但不是深度的。
- 前向 LSTM:看前面的词
- 反向 LSTM:看后面的词
- 组合成双向
词向量生成
以"我"为例,产生 5 个词向量。
- 底层:1 个静态词向量
- 前向 LSTM:2 个词向量
- 反向 LSTM:2 个词向量
- 总共:5 个词向量
4 数学原理与推导
ELMo 词向量
$$\text{ELMo}(x) = \gamma \sum_{j=0}^{L} s_j h_j^{LM}$$
其中:
- $x$ 是输入词
- $L$ 是层数
- $h_j^{LM}$ 是第 $j$ 层的隐藏状态
- $s_j$ 是 softmax 归一化权重
- $\gamma$ 是缩放因子
双向 LSTM
$$\overrightarrow{h_t} = \text{LSTM}{\text{forward}}(x_t, \overrightarrow{h{t-1}})$$
$$\overleftarrow{h_t} = \text{LSTM}{\text{backward}}(x_t, \overleftarrow{h{t+1}})$$
$$h_t = [\overrightarrow{h_t}, \overleftarrow{h_t}]$$
5 代码示例
# === ELMo 模型架构示例 ===
print("=== ELMo 模型架构 ===")
print("1. 底层:CNN 对字符集进行编码(静态词向量)")
print("2. 中间:双向 LSTM(前向 + 反向)")
print("3. 顶层:词向量表征模块(微调)")
# === 静态词向量 vs 动态词向量 ===
print("\n=== 静态词向量 vs 动态词向量 ===")
print("静态词向量(Word2Vec):")
print(" - 与上下文无关")
print(" - apple 永远是同一个向量")
print()
print("动态词向量(ELMo):")
print(" - 根据上下文变化")
print(" - apple 在不同语境下有不同向量")
# === 示例:apple 的一词多义 ===
print("\n=== apple 的一词多义 ===")
print("句子1: 'I eat an apple'")
print(" → apple 表示水果")
print("句子2: 'Apple is a company'")
print(" → apple 表示公司")
print()
print("静态词向量:无法区分")
print("动态词向量:可以根据上下文区分")
6 重难点与易错提醒
- ❗重点:ELMo 是第一个支持动态词向量的模型。
- ❗重点:ELMo 使用双向 LSTM 模拟双向。
- ❗重点:ELMo 能表达一词多义。
- ❗重点:传统的 Word2Vec 是静态词向量,与上下文无关。
- ⚠️易错:ELMo 是双向模型,但不是深度的。
7 课堂问答精选
Q1:ELMo 是什么?
A:ELMo(Embeddings from Language Models)是 2018 年 3 月由华盛顿大学提出的预训练模型,是第一个支持动态词向量的模型。
Q2:ELMo 的动机是什么?
A:传统的 Word2Vec 是静态词向量,与上下文无关。ELMo 的动机是支持一词多义和动态词向量,根据上下文变化词向量。
Q3:ELMo 的架构是怎样的?
A:ELMo 有三层结构:①底层使用 CNN 对字符集进行编码(静态词向量);②中间使用双向 LSTM(前向 + 反向);③顶层是词向量表征模块(微调)。
Q4:静态词向量和动态词向量有什么区别?
A:静态词向量(Word2Vec)与上下文无关,同一个词永远是同一个向量。动态词向量(ELMo)根据上下文变化,同一个词在不同语境下有不同向量。
8 本课小结
- ELMo 是 2018 年 3 月由华盛顿大学提出的预训练模型。
- 是第一个支持动态词向量的模型。
- 使用双向 LSTM 模拟双向。
- 能表达一词多义,根据上下文变化词向量。
9 延伸思考
- GPT 模型是什么?
- BERT、ELMo、GPT 三大模型的区别是什么?