您的位置:首页 > 文旅 > 旅游 > 「Pytorch」解析 nn.Embedding 词嵌入 及反推输入

「Pytorch」解析 nn.Embedding 词嵌入 及反推输入

2024/10/7 2:25:17 来源:https://blog.csdn.net/ViatorSun/article/details/141191888  浏览:    关键词:「Pytorch」解析 nn.Embedding 词嵌入 及反推输入

在这里插入图片描述

在Pytorch里面有三种编码方式,Embedding 就是其中之一,不同于 one_hot 需要用同长度的张量存 Embedding将单词映射为稠密向量,并且指定 embedding_dim维度。通过 Embedding层 转换的数据并不是经过词典映射的,而是原始数据。Embedding的输出可以作为神经网络的输入,进一步进行训练和处理。在深度学习中,Embedding是将离散的输入映射为连续的向量表示的一种技术。它在自然语言处理和推荐系统等任务中广泛使用。

在这里插入图片描述

One-hot 的缺点:

  • one-hot 没有任何的语义信息
  • one-hot 编码的 维度等于字典的长度,转换张量为一个低稠密度向量

其实一般就是前用两个参数

  1. num_embeddings 就是生成 num_embeddings 个嵌入向量,
  2. embedding_dim 就是嵌入向量的维度,即使用一个 [1, embedding_dim] 向量表示一个
import torch
from torch import nnk = 49408
embedding = nn.Embedding(k, embedding_dim=16)emb = embedding(torch.tensor([1, 4, 5, 7])).detach()  		# 输入数据大小不能超过 阈值k,detach是去除梯度信息
print('emb',emb.data)# 输出是一个 [4,16] 维的张量,
tensor([[-2.0561, -1.0517,  1.1487,  1.2165, -0.7428,  0.0255, -2.3840, -0.6686,-0.1522, -0.6380,  0.8078,  2.3382, -0.3678, -0.5860, -0.1160,  0.4851],[-0.0821,  0.6428, -0.7851, -0.6309, -0.1035, -0.0277,  0.4757,  0.0314,0.2354,  0.0902,  0.6876, -0.6741, -0.7009,  0.6107, -0.5739, -0.7009],[ 0.2205, -0.5750, -0.4575,  0.2809,  0.1322, -0.4874,  0.0903, -0.9487,0.4847,  0.5165,  0.0463,  0.2832,  0.1155, -1.0731, -0.4711, -0.4850],[-1.3978,  0.8461,  0.4533,  0.6129,  0.4035,  0.1373, -1.1821,  1.2093,-0.0140,  1.4716,  0.2694,  1.7981,  0.4558,  0.6396,  0.4042, -1.9535]])

注意:nn.Embedding()是可以训练的,参考 torch.nn.Embedding是否有梯度,是否会被训练

Embedding 反推输入

Embedding 在创建的时候会创建一个 [ k , H ] [k, H] [k,H] 维度的张量,可以通过 embedding.weigh 获取

embedding = nn.Embedding(k, embedding_dim=H)

原本还想证明 embedding 是可以反推输入的,但是直到下面这几行输出,我发现了什么 (ΩДΩ) (ΩДΩ) (ΩДΩ)

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com