pytorch nn.Embedding

本文深入探讨了PyTorch中nn.Embedding类的详细参数和使用方法,包括如何加载预训练模型,从GloVe向量转换到Word2Vec,并使用gensim库进行导入,最终实现词嵌入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pytorch nn.Embedding
class 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 (int) - 嵌入字典的大小

embedding_dim (int) - 每个嵌入向量的大小

padding_idx (int, optional) - 如果提供的话,输出遇到此下标时用零填充

max_norm (float, optional) - 如果提供的话,会重新归一化词嵌入,使它们的范数小于提供的值

norm_type (float, optional) - 对于max_norm选项计算p范数时的p

scale_grad_by_freq (boolean, optional) - 如果提供的话,会根据字典中单词频率缩放梯度

weight weight (Tensor) -形状为(num_embeddings, embedding_dim)的模块中可学习的权值

输入: LongTensor (N, W), N = mini-batch, W = 每个mini-batch中提取的下标数
输出: (N, W, embedding_dim)

加载预训练模型
self.embed = nn.Embedding(vocab_size, embedding_dim)
self.embed.weight.data.copy_(torch.from_numpy(pretrained_embeddings))


1
2
3
4
embed = nn.Embedding.from_pretrained(feat)
1
加载glove
先将glove向量转换成Word2vec向量。然后使用gensim库导入。

'''转换向量过程'''
from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
# 已有的glove词向量
glove_file = datapath('test_glove.txt')
# 指定转化为word2vec格式后文件的位置
tmp_file = get_tmpfile("test_word2vec.txt")
from gensim.scripts.glove2word2vec import glove2word2vec
glove2word2vec(glove_file, tmp_file)

‘’‘’导入向量‘’‘’
# 加载转化后的文件
wvmodel = KeyedVectors.load_word2vec_format(tmp_file)
# 使用gensim载入word2vec词向量

vocab_size = len(vocab) + 1
embed_size = 100
weight = torch.zeros(vocab_size+1, embed_size)

for i in range(len(wvmodel.index2word)):
try:
index = word_to_idx[wvmodel.index2word[i]]
except:
continue
weight[index, :] = torch.from_numpy(wvmodel.get_vector(
idx_to_word[word_to_idx[wvmodel.index2word[i]]]))

 

#embed
embedding = nn.Embedding.from_pretrained(weight)

 

 

---------------------
作者:昕晴
来源:优快云
原文:https://blog.youkuaiyun.com/qq_40210472/article/details/88995433
版权声明:本文为博主原创文章,转载请附上博文链接!

### PyTorch `nn.Embedding` 的用法 在自然语言处理 (NLP) 和其他领域中,嵌入层 (`Embedding Layer`) 是非常重要的组件之一。PyTorch 提供了 `torch.nn.Embedding` 类来创建和管理这些嵌入。 #### 创建 Embedding 层 可以通过指定词汇表大小(即词典中的单词数量)以及每个词的维度来初始化一个 embedding 层: ```python import torch from torch import nn embedding = nn.Embedding(num_embeddings=10, embedding_dim=3) ``` 这里 `num_embeddings` 表示词汇量大小,而 `embedding_dim` 则表示每个词语对应的向量长度[^1]。 #### 输入与输出形状 对于输入张量而言,其最后一个维度应当代表 batch 中样本的数量;其余所有前置维度都将被视作单一样本的一部分。因此,在大多数情况下,输入会是一个二维张量 `(batch_size, seq_len)` 或者一维张量 `(seq_len,)` 当批次大小为 1 时。该函数将会返回具有相同前导尺寸的新张量,但在最后增加了一个新的特征轴用于存储 embeddings 结果,形成三维张量 `(batch_size, seq_len, embedding_dim)` 或两维张量 `(seq_len, embedding_dim)` 如果批次大小为 1。 #### 使用预训练权重 如果希望利用已经预先训练好的 word vectors 初始化 embedding 层,则可以这样做: ```python pretrained_weights = ... # 加载预训练权重矩阵 vocab_size, embed_size = pretrained_weights.shape embedding_layer = nn.Embedding(vocab_size, embed_size).from_pretrained(pretrained_weights) ``` 注意这里的 `.from_pretrained()` 方法可以直接接受 numpy 数组或其他形式的数据作为参数,并据此设置初始权重值。 #### 实际应用案例 考虑如下场景:给定一批句子 ID 序列,想要获取它们各自的 embedding 向量以便后续处理。假设我们有一个简单的例子,其中包含三个句子,每句话有两个 token IDs 组成的小序列: ```python input_tensor = torch.LongTensor([[1, 2], [4, 5], [7, 8]]) output_embedding = embedding(input_tensor) print(output_embedding.size()) # 输出应形如: torch.Size([3, 2, 3]) ``` 这段代码片段展示了如何将整数型 tensor 转换成相应的浮点型 embedding vector 形式的操作过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值