nn.Embedding() —— 深度学习里的“词汇翻译器”

alt

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 矩阵是参与反向传播并更新的!

🔁 背后机制:

  1. 输入 ID → 取出对应的嵌入向量(就是 weight[i]

  2. 嵌入向量参与前向传播

  3. 计算 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.Embeddingweight 默认是训练的*,你可以把它看作一个可以自我进化的“查词本”——随着训练不断修正它对每个词的理解
大模型小白拆解站 文章被收录于专栏

想和大模型零障碍对话?这里是你的入门急救站! 从大模型到底是啥到训练时都在干啥,用大白话拆解技术原理;从参数是个啥到微调怎么玩,用生活案例讲透核心概念。拒绝枯燥公式,只有能听懂的干货和冷到爆的梗;帮你从大模型小白变身入门小能手,轻松get前沿AI知识!

全部评论

相关推荐

06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 18:03
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务