函数介绍
函数描述:通过该函数,可以建立对应一个词向量层;
函数声明:
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:表示锁需要构建查询的词典的词数量;
- embedding_dim:表示构建的每个词的维数;
- padding_idx:表示填充的id,用于统一每个词的长度至最大词的长度,不足的使用该id数字进行填充;
- max_norm:最大范数,如果嵌入向量的范数超过了这个界限,就要进行再归一化;
- norm_type:指定利用什么范数计算,并用于对比max_norm,默认为2范数;
- scale_grad_by_freq:指定是否需要根据单词在mini-batch中出现的频率,对梯度进行放缩;
- sparse:若为True,则与权重矩阵相关的梯度转变为稀疏张量;
使用示例
创建一个用于查询的词向量层,传入数据,并进行查询: ```python import torch from torch import nn as nn
if name == “main“:
# 创建一个具有5个单词的词向量层,每个词向量的维度为2embedding = nn.Embedding(num_embeddings=5, embedding_dim=3)# 创建测试数据,并转换成Tensor类型test_data = torch.LongTensor([[0, 2, 0, 1], [1, 3, 4, 4]])# 原始数据的状态即形状输出print("------------original data print: -------------")print(test_data.shape)print(test_data)# 通过词向量层,将测试数据的所有元素转换为对应的词向量test_data = embedding(test_data)# 转换后的数据输出print("--------------embedding data print: ------------")print(test_data.shape)print(test_data)
输出结果:```python------------original data print: -------------torch.Size([2, 4])tensor([[0, 2, 0, 1],[1, 3, 4, 4]])--------------embedding data print: ------------torch.Size([2, 4, 3])tensor([[[-1.9660, -0.1396, 1.3724],[-0.3890, 0.3294, 1.2782],[-1.9660, -0.1396, 1.3724],[-0.3466, -0.4287, 0.2658]],[[-0.3466, -0.4287, 0.2658],[ 0.5257, 1.4514, 0.3058],[ 1.4585, 0.5548, -0.5625],[ 1.4585, 0.5548, -0.5625]]], grad_fn=<EmbeddingBackward>)
注意事项
- 如果指定了padding_idx,需要注意这个值也是要在num_embeddings尺寸内的,比如符号总共有500个,同时指定了padding_idx,则num_embeddings值应该为501;
- 词向量中的查询向量必须为整数,否则就不能与查询向量成功匹配导致报错;
- 如果测试矩阵数据中的值不在查询矩阵中,也会报错;
参考文章
通俗讲解pytorch中nn.Embedding原理及使用
Pytorch中nn.Embedding模块用法介绍
