nn.Embedding() —— 深度学习里的“词汇翻译器”
1. 开场:
想象你正在做一个翻译机器人,句子里的词都是整数编号,比如:
"我 爱 吃 炸鸡" → [2, 9, 14, 88]
可问题是:神经网络不认识“炸鸡”,只认识浮点数向量。
于是——你就需要 nn.Embedding()
这个“词汇转码器”!
简单一句话:
nn.Embedding(num_embeddings, embedding_dim)
就是一个把“整数编号”转换成“稠密向量”的字典,而且这个字典是可以训练的!
2. 它是怎么工作的?
假设你这样创建一个嵌入层:
embedding = nn.Embedding(num_embeddings=100, embedding_dim=16)
意思是:
参数 | 含义 |
---|---|
100 |
你最多会有 100 个不同的“编号”词汇(从 0 到 99) |
16 |
每个词会被编码成一个 16 维的向量 |
你输入的就是一个编号索引(比如 5、9、88),输出的就是一串向量。
举个栗子:
import torch
from torch import nn
embed = nn.Embedding(10, 4) # 有10个词,每个变成4维向量
x = torch.tensor([1, 2, 4, 5]) # 输入是“词的编号”
embed(x)
结果你会得到一个形状为 (4, 4)
的张量,每一行是一个“词向量”!
3. 内部发生了什么?
背后其实就是一个可学习的“查表过程”:
Embedding
维护了一个叫weight
的矩阵,大小是(num_embeddings, embedding_dim)
。- 每个编号
i
对应weight[i]
这一行。 - 所以
embedding(x)
的效果就是:把x
中的每个编号,变成对应的那一行向量。
📌 就像你手里拿着一张小抄卡,别人一报数,你立刻翻到那页念出他的“词向量”。
4. 那它能用在哪些场景?
适用场景 | 示例 |
---|---|
NLP任务(最常见) | 文本分类、情感分析、翻译 |
分类特征的嵌入 | 推荐系统中的用户ID、商品ID |
图神经网络(GNN) | 用 ID 代表节点,然后嵌入 |
5. 那和 one-hot 有啥区别?
项目 | one-hot | nn.Embedding |
---|---|---|
向量维度 | 词典大小 | 自定义的低维度 |
是否稠密 | ❌ 稀疏 | ✅ 稠密 |
是否可学习 | ❌ 不会变 | ✅ 学习得到的 |
计算效率 | ⛔ 慢、占空间 | ✅ 快、轻量 |
6. 训练过程中,Embedding 层的 weight
矩阵是否可以参与反向传播并更新?
训练过程中,Embedding 层的
weight
矩阵是参与反向传播并更新的!
🔁 背后机制:
-
输入 ID → 取出对应的嵌入向量(就是
weight[i]
) -
嵌入向量参与前向传播
-
计算 loss 后反向传播时:
- 会根据这些嵌入向量参与的误差,计算梯度
- 然后对那一部分的
weight
进行更新
说白了:你的模型一边用它,一边改它,一边教它怎么变得更“有语义”。
举个例子:
embedding = nn.Embedding(1000, 64)
optimizer = torch.optim.Adam(embedding.parameters(), lr=0.01)
input_ids = torch.tensor([4, 999, 1, 23]) # 假设是句子的词ID
vectors = embedding(input_ids) # (4, 64) 词向量
# 你可能接上 LSTM、Linear 之类做预测,然后:
loss = some_loss_fn(...)
loss.backward()
optimizer.step() # ✅ 这里 embedding.weight 被更新了
如果你不想训练它呢?
有时候你会加载一个预训练的词向量(比如 word2vec 或 GloVe),然后你不希望它被更新。这时你可以:
embedding.weight.requires_grad = False
这样 PyTorch 在反向传播的时候就不会动它了。
7. 总结一下:
nn.Embedding()
就是:
- 给编号赋予意义的翻译官;
- 把“傻傻的数字”变成“有内涵的向量”;
- 是深度学习中处理分类ID(尤其是词汇)的神操作之一!
nn.Embedding
的weight
默认是训练的*,你可以把它看作一个可以自我进化的“查词本”——随着训练不断修正它对每个词的理解
大模型小白拆解站 文章被收录于专栏
想和大模型零障碍对话?这里是你的入门急救站! 从大模型到底是啥到训练时都在干啥,用大白话拆解技术原理;从参数是个啥到微调怎么玩,用生活案例讲透核心概念。拒绝枯燥公式,只有能听懂的干货和冷到爆的梗;帮你从大模型小白变身入门小能手,轻松get前沿AI知识!