尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

如何构建embeding 的就是pytorch 中

如何构建embeding 的就是pytorch 中
📅 发布时间:2026/6/20 4:24:28

如何构建embeding 的就是pytorch 中

嵌入层(Embedding)说明


一个简单的查找表,用于存储固定字典和固定大小的嵌入向量。

该模块通常用于存储词嵌入,并通过索引检索对应的词嵌入。模块的输入是一组索引,输出则是对应的词嵌入向量。

参数(Args)


  • num_embeddings (int):嵌入字典的大小(即离散特征的总类别数,如词汇表大小)。
  • embedding_dim (int):每个嵌入向量的维度。
  • padding_idx (int, 可选):若指定该参数,则索引为padding_idx的嵌入向量不会对梯度产生贡献;因此,训练过程中该索引对应的嵌入向量不会被更新,即始终保持为固定的 “填充向量”。对于新创建的 Embedding 层,padding_idx对应的嵌入向量默认全为 0,但也可修改为其他值作为填充向量。
  • max_norm (float, 可选):若指定该参数,则所有范数(norm)大于max_norm的嵌入向量,都会被重新归一化,使其范数等于max_norm。
  • norm_type (float, 可选):用于计算max_norm的 p 范数(p-norm)中的 “p 值”,默认值为2(即 L2 范数)。
  • scale_grad_by_freq (bool, 可选):若指定该参数为True,则梯度会按小批量(mini-batch)中单词频率的倒数进行缩放。默认值为False。
  • sparse (bool, 可选):若为True,则相对于weight矩阵的梯度会是一个稀疏张量(sparse tensor)。关于稀疏梯度的更多细节,可参考下方的 “注意事项(Note)”。

属性(Attributes)


  • weight (Tensor):模块的可学习权重,形状为(num_embeddings, embedding_dim),初始值服从标准正态分布(N(0,1))。

形状(Shape)


  • 输入(Input):形状为(*)的整数张量(IntTensor)或长整数张量(LongTensor),其中*表示任意形状,张量内元素为待检索的索引。
  • 输出(Output):形状为(*, H)的张量,其中*与输入形状保持一致,H等于embedding_dim(即嵌入向量维度)。

注意事项(.. note::)


  1. 需注意,目前仅有少数优化器支持稀疏梯度(sparse gradients),具体包括:

    • optim.SGD(支持 CPU 和 CUDA 设备)
    • optim.SparseAdam(支持 CPU 和 CUDA 设备)
    • optim.Adagrad(仅支持 CPU 设备)

  2. 当max_norm不为None时,Embedding 层的前向传播(forward)方法会原地(in-place)修改weight张量。由于用于梯度计算的张量不能被原地修改,因此当max_norm不为None时,若要在调用 Embedding 层的前向方法前,对Embedding.weight执行可微操作(differentiable operation),需先对Embedding.weight进行克隆(clone)。示例如下:

n, d, m = 3, 5, 7
embedding = nn.Embedding(n, d, max_norm=True)
W = torch.randn((m, d), requires_grad=True)
idx = torch.tensor([1, 2])
a = embedding.weight.clone() @ W.t() # 需克隆weight,否则该操作无法计算梯度
b = embedding(idx) @ W.t() # 原地修改weight
out = (a.unsqueeze(0) + b.unsqueeze(1))
loss = out.sigmoid().prod()
loss.backward()

示例(Examples::)

>>> # 一个包含10个3维嵌入向量的Embedding模块
>>> embedding = nn.Embedding(10, 3)
>>> # 一个批量(batch):2个样本,每个样本包含4个索引
>>> input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
>>> # xdoctest: +IGNORE_WANT("non-deterministic")(注:用于忽略非确定性输出的测试检查)
>>> embedding(input)
tensor([[[-0.0251, -1.6902, 0.7172],
[-0.6431, 0.0748, 0.6969],
[ 1.4970, 1.3448, -0.9685],
[-0.3677, -2.7265, -0.1685]],
[[ 1.4970, 1.3448, -0.9685],
[ 0.4362, -0.4004, 0.9400],
[-0.6431, 0.0748, 0.6969],
[ 0.9124, -2.3616, 1.1151]]])
>>> # 带有padding_idx的示例
>>> embedding = nn.Embedding(10, 3, padding_idx=0)
>>> input = torch.LongTensor([[0, 2, 0, 5]])
>>> embedding(input)
tensor([[[ 0.0000, 0.0000, 0.0000], # padding_idx=0对应的向量全为0
[ 0.1535, -2.0309, 0.9315],
[ 0.0000, 0.0000, 0.0000], # 再次出现padding_idx=0,向量仍为0
[-0.1655, 0.9897, 0.0635]]])
>>> # 修改“填充向量(pad vector)”的示例
>>> padding_idx = 0
>>> embedding = nn.Embedding(3, 3, padding_idx=padding_idx)
>>> embedding.weight # 初始时,padding_idx=0对应的向量全为0
Parameter containing:
tensor([[ 0.0000, 0.0000, 0.0000],
[-0.7895, -0.7089, -0.0364],
[ 0.6778, 0.5803, 0.2678]], requires_grad=True)
>>> with torch.no_grad(): # 禁用梯度计算,避免修改操作影响训练
... embedding.weight[padding_idx] = torch.ones(3) # 将填充向量改为全1
>>> embedding.weight # 修改后,padding_idx=0对应的向量变为全1
Parameter containing:
tensor([[ 1.0000, 1.0000, 1.0000],
[-0.7895, -0.7089, -0.0364],
[ 0.6778, 0.5803, 0.2678]], requires_grad=True)

总之 某个词的 embeding 向量 ,就是 embeding 矩阵的某一层,矩阵随机生成的,并且是可学习的

相关新闻

  • C# 第 17天 028 029接口,依赖反转,单元测试
  • 群晖安装套件,套件版本与群晖版本不兼容;
  • 中间件专题:Redis

最新新闻

  • 2026年靠谱的上海特种电缆/上海PU电缆优质厂家推荐榜 - 品牌宣传支持者
  • 2026年靠谱的pvc给水管/安徽pvc管/pvc排水管可靠供应商推荐 - 行业平台推荐
  • 2026年口碑好的激光切管/济宁激光切管/激光切管代工/济宁激光切管代工精选厂家推荐 - 品牌宣传支持者
  • 青岛即墨区靠谱的空调清洗公司咨询电话(2026最新) - 品牌排行榜
  • 2026年质量好的医药合规卷筒不干胶/食品包装卷筒不干胶/定制卷筒不干胶厂家哪家好 - 行业平台推荐
  • 2026年可靠的青岛办公工学椅/青岛人体工学椅/工学椅/商务久坐工学椅公司哪家好 - 行业平台推荐

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号