1.torch.nn.Embedding理解
class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)
参数解释:
num_embeddings (int) - 嵌入字典的大小
embedding_dim (int) - 每个嵌入向量的大小
padding_idx (int, optional) - 如果提供的话,输出遇到此下标时用零填充
max_norm (float, optional) - 如果提供的话,会重新归一化词嵌入,使它们的范数小于提供的值
norm_type (float, optional) - 对于max_norm选项计算p范数时的p
scale_grad_by_freq (boolean, optional) - 如果提供的话,会根据字典中单词频率缩放梯度
weight weight (Tensor) -形状为(num_embeddings, embedding_dim)的模块中可学习的权值
输入: LongTensor (N, W), N = mini-batch, W = 每个mini-batch中提取的下标数
输出: (N, W, embedding_dim)
这个语句是创建一个词嵌入模型,num_embeddings代表一共有多少个词,embedding_dim代表你想要为每个词创建一个多少维的向量来表示它
案例解释:
import torch from torch import nn embedding = nn.Embedding(5, 4) # 假定字典中只有5个词,词向量维度为4 word = [[1, 2, 3], [2, 3, 4]] # 每个数字代表一个词,例如 {'!':0,'how':1, 'are':2, 'you':3, 'ok':4} #而且这些数字的范围只能在0~4之间,因为上面定义了只有5个词 embed = embedding(torch.LongTensor(word)) print(embed) print(embed.size())
输出:
tensor([[[-0.4093, -1.0110, 0.6731, 0.0790], [-0.6557, -0.9846, -0.1647, 2.2633], [-0.5706, -1.1936, -0.2704, 0.0708]], [[-0.6557, -0.9846, -0.1647, 2.2633], [-0.5706, -1.1936, -0.2704, 0.0708], [ 0.2242, -0.5989, 0.4237, 2.2405]]], grad_fn=<EmbeddingBackward>) torch.Size([2, 3, 4])
embed输出的维度是[2, 3, 4],这就代表对于输入的[2,3]维的词,每一个词都被映射成了一个4维的向量。