关于torch.nn.Embedding需要注意的几点
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:词字典的数量(最大索引值)
embedding_dim:词向量的维度
padding_idx:强制指定某索引值的词向量值
关于Embedding的简单理解:
说白了,Embedding的作用就是将你所有的词放入到一个字典里(词去重),该字典的键是词的索引,值是该词,然后Embedding会将这些字典中的"索引"转成指定维度的向量,比如:
word_dict = {0:'我',1:'喜欢',2:'吃',4:'西瓜'}
eb = torch.nn.Emebdding(4,6) #最大词索引为4,词向量长度为6
eb0 =eb(0) #将0转成词向量
eb1 =eb(1) #将1转成词向量
...
注意一:Embedding输入的参数是索引值
上述eb0,eb1中输入的值为你字典的key,也就是自定义字典中的词索引。
注意二:num_embedding是最大词索引值,并不是所有词索引的总和。
import torch
eb = torch.nn.Embedding(4,6)
t = torch.tensor(5)
r = eb(t)
print(r)
上述eb就会报错IndexError: index out of range in self
传入的t值必须是小于4的,等于4都不行!
注意三:padding_idx指定索引值转成词向量后,该词向量的元素全为0
padding_idx的作用是将你字典中指定的词索引在进行Emedding时,全部转成的词向量的各元素值全为0
比如:如果指定索引为2的词向量结果
eb = torch.nn.Embedding(4,6,padding_idx=2)
t = torch.tensor(2)
r = eb(t)
print(r)
#结果为:
tensor([0., 0., 0., 0., 0., 0.], grad_fn=<EmbeddingBackward>)
本文详细介绍了PyTorch中的nn.Embedding模块,包括主要参数含义、基本使用方法以及注意事项。例如,num_embeddings参数表示最大词索引,而非词典总数量,padding_idx用于指定特定索引的词向量全为0。通过实例展示了如何通过Embedding将索引转换为词向量,并强调了输入索引值的限制。
1579





