随机初始化词向量,词向量值在正态分布N(0,1)中随机取值。
参数:
num_embeddings:词典的大小尺寸,index从0开始
embedding_dim: 嵌入向量的维度
padding_idx=None:填充id,比如,输入长度为100,但是每次的句子长度并不一样,后面就需要用统一的数字填充,而这里就是指定这个数字,这样,网络在遇到填充id时,就不会计算其与其它符号的相关性。(初始化为0)
max_norm=None: 最大范数,如果嵌入向量的范数超过了这个界限,就要进行再归一化。
norm_type=2.0:指定利用什么范数计算,并用于对比max_norm,默认为2范数。
scale_grad_by_freq=False, 根据单词在mini-batch中出现的频率,对梯度进行放缩。默认为False.
sparse=False, – 若为True,则与权重矩阵相关的梯度转变为稀疏张量。
_weight=None)
输入维数:
[batch_size,规整后的句子长度]
输出维数:
[batch_size,规整后的句子长度,词向量维度]
# 对原始句子规整为同一长度:
# 规整包括:句子中的符号算作词,句子结尾加的EOS也算作一个词,对于长度不足的句子,填充pad
import torch
import torch.nn as nn
x = torch.LongTensor([[1, 2, 4], [4, 3, 2]]) # 2个句子,每个句子3个词
embeddings = nn.Embedding(5, 6, padding_idx=4) # 一共5个词,每个词的词向量维度设置为6维,pad取值为序号4
print(embeddings(x))
print(embeddings(x).size())
'''
tensor([[[-1.7022, 0.2484, -0.6298, 0.4387, 2.0156, -1.7733],
[ 0.3547, 0.5276, 1.1849, 0.2856, -0.1430, 0.6353],
[ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]],
[[ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
[-0.0493, -0.9472, -1.2716, 0.1427, -1.8054, -0.7027],
[ 0.3547, 0.5276, 1.1849, 0.2856, -0.1430, 0.6353]]],
grad_fn=<EmbeddingBackward>)
torch.Size([2, 3, 6])
'''