nn.Embedding()函数详解

nn.Embedding()函数详解

nn.Embedding()函数:随机初始化词向量,词向量在正态分布N(0,1)中随机取值

输入:

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None)

num_embeddings:词典的大小尺寸,比如该词典共有5000词,则num_embeddings=5000,此时index的取值范围为0-4999

embedding_dim:词嵌入向量的维度,即用多少维度表示一个符号/词

padding_idx=None:填充id,比如,输入的句子的长度为100,但是每次的句子长度并不一定是相同的,后面就需要统一用数字填充,这里就是相当于指定填充的数字。这样,网络在遇到填充id时,就不会计算其与其他符号的相关性。(初始化为0) 或者另一种说法,padding_idx是不更新梯度的“单词”的index,可以在字典中指定一个不被训练的embedding

max_norm=None:最大范数,暂不考虑

norm_type=2.0:指定利用什么范数计算,暂不考虑

scale_grad_by_freq=False:根据单词在mini-batch中出现的频率,对梯度进行放缩。默认为False

输出:

[length_seq, batch_size, embedding_dim]

length_seq:词向量长度

batch_size:批次数量

embedding_dim:嵌入词向量维度

举例如下:

import torch

# 创建page索引
a = torch.LongTensor([[1,3], [3, 8]])

# 创建一个词典,词典包含词的数量为10,每个词的维度为5
emb = torch.nn.Embedding(10, 5)
print(emb.weight, emb.weight.shape)

# 通过索引查询emb内容
y = emb(a)
print(y, y.shape)
# 


关于padding_idx,看下面的例子:

import torch

a = torch.LongTensor([[1, 3], [3, 5]])

emb = torch.nn.Embedding(10, 5, padding_idx=0)
print(emb.weight, emb.weight.shape)
y = emb(a)
print(y, y.shape)


其中,emb不仅仅是一个矩阵,其属性有以下:

简单来说,nn.Embedding()就是随机初始化了一个[num_embeddings, embedding_dim]的二维表格,每一行代表着对应索引的词向量的表示。我们要想得到一句话的初始化词向量,需要将句子进行分词,即得到每个词的索引,将索引送入nn.embedding()函数中,会自动在已经建立的二维表中找到索引对应的初始化词向量

参考链接:

关于nn.Embedding的解释,以及它是如何将一句话变成vector的

torch.nn.Embedding函数用法图解

通俗讲解PyTorch中nn.Embedding原理及使用

posted @ 2025-03-16 21:45  讯号  阅读(352)  评论(0)    收藏  举报