函数介绍

函数描述:通过该函数,可以建立对应一个词向量层;

函数声明:

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

参数解释:

  1. num_embeddings:表示锁需要构建查询的词典的词数量;
  2. embedding_dim:表示构建的每个词的维数;
  3. padding_idx:表示填充的id,用于统一每个词的长度至最大词的长度,不足的使用该id数字进行填充;
  4. max_norm:最大范数,如果嵌入向量的范数超过了这个界限,就要进行再归一化;
  5. norm_type:指定利用什么范数计算,并用于对比max_norm,默认为2范数;
  6. scale_grad_by_freq:指定是否需要根据单词在mini-batch中出现的频率,对梯度进行放缩;
  7. sparse:若为True,则与权重矩阵相关的梯度转变为稀疏张量;

    使用示例

    创建一个用于查询的词向量层,传入数据,并进行查询: ```python import torch from torch import nn as nn

if name == “main“:

  1. # 创建一个具有5个单词的词向量层,每个词向量的维度为2
  2. embedding = nn.Embedding(num_embeddings=5, embedding_dim=3)
  3. # 创建测试数据,并转换成Tensor类型
  4. test_data = torch.LongTensor([[0, 2, 0, 1], [1, 3, 4, 4]])
  5. # 原始数据的状态即形状输出
  6. print("------------original data print: -------------")
  7. print(test_data.shape)
  8. print(test_data)
  9. # 通过词向量层,将测试数据的所有元素转换为对应的词向量
  10. test_data = embedding(test_data)
  11. # 转换后的数据输出
  12. print("--------------embedding data print: ------------")
  13. print(test_data.shape)
  14. print(test_data)
  1. 输出结果:
  2. ```python
  3. ------------original data print: -------------
  4. torch.Size([2, 4])
  5. tensor([[0, 2, 0, 1],
  6. [1, 3, 4, 4]])
  7. --------------embedding data print: ------------
  8. torch.Size([2, 4, 3])
  9. tensor([[[-1.9660, -0.1396, 1.3724],
  10. [-0.3890, 0.3294, 1.2782],
  11. [-1.9660, -0.1396, 1.3724],
  12. [-0.3466, -0.4287, 0.2658]],
  13. [[-0.3466, -0.4287, 0.2658],
  14. [ 0.5257, 1.4514, 0.3058],
  15. [ 1.4585, 0.5548, -0.5625],
  16. [ 1.4585, 0.5548, -0.5625]]], grad_fn=<EmbeddingBackward>)

注意事项

  1. 如果指定了padding_idx,需要注意这个值也是要在num_embeddings尺寸内的,比如符号总共有500个,同时指定了padding_idx,则num_embeddings值应该为501;
  2. 词向量中的查询向量必须为整数,否则就不能与查询向量成功匹配导致报错;
  3. 如果测试矩阵数据中的值不在查询矩阵中,也会报错;

    参考文章

    通俗讲解pytorch中nn.Embedding原理及使用
    Pytorch中nn.Embedding模块用法介绍