文本转向量的基本流程
原始语料

准备工作
1 构建词表
-
没有重复的词
-
假定语料中总共有 20 个不同的词,因此词表大小为 20
| ID | Token |
|---|---|
| 0 | <PAD> |
| 1 | <UNK> 解决的是 未登录词(oov) 问题 |
| 2 | 我 |
| 3 | 你 |
| 4 | 他 |
| 5 | 我们 |
| 6 | 爱 |
| 7 | 喜欢 |
| 8 | 学习 |
| 9 | 北京 |
| 10 | 上海 |
| 11 | 南京 |
| 12 | 中国 |
| 13 | 今天 |
| 14 | 天气 |
| 15 | 很好 |
| 16 | 吃 |
| 17 | 苹果 |
| 18 | 。 |
| 19 | , |
2 训练词向量矩阵
- 因为词表大小为 20,假定词向量维度 dim=5,所以词向量矩阵的 shape 为 (20, 5)
- 词向量维度 dim=5,表示用 1 个 5 维的向量,来表示 1 个词
| ID | Token | Embedding(5维) |
|---|---|---|
| 0 | <PAD> |
[0.00, 0.00, 0.00, 0.00, 0.00] |
| 1 | <UNK> |
[-0.18, 0.47, 0.35, -0.12, 0.26] |
| 2 | 我 | [0.12, -0.35, 0.81, 0.42, -0.56] |
| 3 | 你 | [-0.64, 0.25, 0.38, -0.15, 0.71] |
| 4 | 他 | [0.48, -0.71, 0.09, 0.31, -0.22] |
| 5 | 我们 | [0.26, 0.54, -0.62, 0.18, 0.43] |
| 6 | 爱 | [-0.73, 0.58, 0.16, -0.21, 0.37] |
| 7 | 喜欢 | [0.51, 0.12, -0.44, 0.73, -0.18] |
| 8 | 学习 | [-0.38, 0.67, 0.52, -0.49, 0.29] |
| 9 | 北京 | [0.89, -0.14, 0.36, 0.08, -0.63] |
| 10 | 上海 | [-0.55, 0.79, -0.27, 0.41, 0.12] |
| 11 | 南京 | [0.94, 0.11, -0.48, 0.67, -0.39] |
| 12 | 中国 | [0.37, -0.22, 0.91, -0.36, 0.54] |
| 13 | 今天 | [-0.11, 0.63, 0.18, 0.55, -0.41] |
| 14 | 天气 | [0.45, -0.39, 0.27, 0.84, 0.06] |
| 15 | 很好 | [-0.52, 0.08, 0.74, -0.16, 0.33] |
| 16 | 吃 | [0.21, -0.83, 0.33, 0.57, -0.28] |
| 17 | 苹果 | [-0.69, 0.44, -0.12, 0.29, 0.65] |
| 18 | 。 | [-0.20, -0.52, 0.37, 0.15, -0.09] |
| 19 | , | [0.17, 0.06, -0.41, -0.68, 0.58] |
正式流程
1 原始句子
- 我 爱 南京 。
2 分词
- 【我,爱,南京,“。”】
- (1, 4):1 句话,4 个词
3 分词结果 转换为 ID,即 Word2ID
- 查词表得到:
源文档图片缺失:image-20260710151911965
- [2, 6, 11, 18]
4 Embedding 查表
- 根据ID取出对应的5维向量:
我(ID=2)
[ 0.12, -0.35, 0.81, 0.42, -0.56]
爱(ID=6)
[-0.73, 0.58, 0.16, -0.21, 0.37]
南京(ID=11)
[ 0.94, 0.11, -0.48, 0.67, -0.39]
。(ID=18)
[-0.20, -0.52, 0.37, 0.15, -0.09]
5 最终Embedding输出
- 对于一句话来说,Batch Size = 1,因此最终输出是一个三维张量:
Shape = (1, 4, 5)
- 其中:
- 1:1句话(Batch Size)
- 4:4个Token
-
5:每个Token对应5维词向量
-
具体表示如下:
Embedding Output
[
[ ← 第1句话(Batch)
[ 0.12, -0.35, 0.81, 0.42, -0.56], ← 我
[-0.73, 0.58, 0.16, -0.21, 0.37], ← 爱
[ 0.94, 0.11, -0.48, 0.67, -0.39], ← 南京
[-0.20, -0.52, 0.37, 0.15, -0.09] ← 。
]
]
6 流程总结
词表(Vocabulary)
┌──────────────────────────────────────┐
│ 我 → 2 爱 → 6 南京 → 11 。 → 18 │
└──────────────────────────────────────┘
│
▼
输入句子
我 爱 南京 。
│ │ │ │
▼ ▼ ▼ ▼
2 6 11 18
│
▼
nn.Embedding(20, 5)
│
▼
Shape = (1, 4, 5)
[
[
[ 0.12, -0.35, 0.81, 0.42, -0.56], ← 我
[-0.73, 0.58, 0.16, -0.21, 0.37], ← 爱
[ 0.94, 0.11, -0.48, 0.67, -0.39], ← 南京
[-0.20, -0.52, 0.37, 0.15, -0.09] ← 。
]
]
(Batch Size, Seq Length, Embedding Dim)
(1, 4, 5)