目录
nn.Embedding
是 PyTorch 中的一个模块,用于将离散的词汇或索引映射到连续的向量空间。这种嵌入层通常用于处理诸如单词、字符或其他类型的离散数据,它们在自然语言处理(NLP)和计算机视觉任务中非常有用。
主要特点:
- 高维映射:将高维度的词表示转换为低维度的词表示。
- 参数共享:每个索引只对应一个嵌入向量,所有输入共享相同的嵌入矩阵。
- 可训练性:嵌入向量是可学习的参数,可以在训练过程中进行优化。
使用场景:
- 自然语言处理:将单词或字符索引转换为密集的词向量。
- 序列模型:用于RNN、LSTM或GRU等序列处理模型的输入层。
- 推荐系统:将用户和商品ID映射为嵌入向量,以捕捉复杂的用户和商品特征。
基本参数:
num_embeddings
:词汇表的大小,即索引的总数。embedding_dim
:每个嵌入向量的维度。
工作流程:
- 初始化:创建一个
nn.Embedding
实例,指定词汇表大小和嵌入维度。 - 前向传播:将离散索引作为输入,输出对应的嵌入向量。
- 训练:在训练过程中,根据损失函数反向传播,更新嵌入向量。
代码示例:
class CBOW(nn.Module) :#神经网络
def __init__(self, vocab_size, embedding_dim):
# vocab_size:词汇表的大小,即词嵌入的one-hot编码大小
# embedding_dim:压缩后的词嵌入大小
super(CBOW, self).__init__()
self.embeddings = nn.Embedding(vocab_size, embedding_dim)
# 创建一个词嵌入层,用于将词汇表中的每个词映射到一个embedding_dim维的向量空间
self.proj = nn.Linear(embedding_dim, 128)
# 定义一个线性变换层,词向量的维度从embedding_dim映射到128维
self.output = nn.Linear(128, vocab_size)
# 定义输出层,将128维的向量映射回vocab_size维,用于预测词汇表中每个词的概率
def forward(self, inputs): # inputs是输入的词索引
embeds = sum(self.embeddings(inputs)).view(1, -1)
# 使用nn.Embedding层获取输入词的词向量,并将这些词向量求和,然后使用view方法展开
out = F.relu(self.proj(embeds))
out = self.output(out)
nll_prob = F.log_softmax(out, dim=-1)
# 使用 log_softmax 函数对输出层的原始预测值进行归一化处理,得到每个词的对数概率
return nll_prob