torch.nn.Embedding()中的padding_idx参数解读

torch.nn.Embedding()

Word Embedding

词嵌入,就是把一个词典,随机初始化映射为一个向量矩阵。
列如:有一组词典,有两个词“hello”和“world”,对应的值为0和1.通过pytorch中的torch.nn.Embedding()建立一个2x10的向量矩阵,其中2表示词典中词的数量,10表示每个词对应的向量大小。

word_to_id = {'hello':0, 'world':1}
embeds = nn.Embedding(2, 10)
hello_idx = torch.LongTensor([word_to_id['hello']])
hello_embed = embeds(hello_idx)
print(hello_embed)

应用pytorch自带的nn.Enbedding构建词嵌入向量。

torch.nn.Embedding(num_embeddings: int, embedding_dim: int, padding_idx: Optional[int] = None, max_norm: Optional[float] = None, norm_type: float = 2.0, scale_grad_by_freq: bool = False, sparse: bool = False, _weight: Optional[torch.Tensor] = None)

num_embeddings:表示词典中词的数量
embedding_dim:表示每个词对应的向量维度

自然语言中使用批处理时候, 每个句子的长度并不一定是等长的, 这时候就需要对较短的句子进行padding, 填充的数据一般是0, 这个时候, 在进行词嵌入的时候就会进行相应的处理, nn.embedding会将填充位置的值映射为0。

padding_idx

padding_idx:表示用于填充的参数索引,比如用3填充,嵌入向量索引为3的向量设置为0

import torch
import torch.nn as nn
 
embed = nn.Embedding(10, 3, padding_idx=3) # padding_idx 默认是0
embed.weight

在这里插入图片描述
让我们再举个栗子,所有索引为3的都用0来填充,。

x = torch.tensor([[2, 2, 3, 3], [1, 2, 5, 4]])
embed(x)

在这里插入图片描述
也就是说,为了便于模型训练需统一句子长度,对那些句子长度不够的句子进行填充,比如用值3进行填充,当用nn.Embedding()进行词向量嵌入时,对应的索引为3的向量将变为全为0的向量。这样就减少了填充值对模型训练的影响。
把padding_idx设置为填充的值,如padding_idx=3,训练过程中索引为3的将始终设置为0,不进行参数更新.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值