函数介绍
函数描述:通过该函数,可以建立对应一个词向量层;
函数声明:
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个单词的词向量层,每个词向量的维度为2
embedding = 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模块用法介绍