1. nn.Embedding 基础解析
在自然语言处理(NLP)任务中,词嵌入(Word Embedding)是最基础也是最重要的技术之一。PyTorch 提供的 nn.Embedding 模块,本质上是一个可训练的查找表(Lookup Table),它将离散的整数索引映射为连续的向量表示。这种映射关系在训练过程中会不断优化,使得语义相似的词在向量空间中距离更近。
1.1 核心参数详解
让我们深入解析 nn.Embedding 的每个参数及其实际意义:
python复制class torch.nn.Embedding(
num_embeddings,
embedding_dim,
padding_idx=None,
max_norm=None,
norm_type=2.0,
scale_grad_by_freq=False,
sparse=False,
_weight=None
)
num_embeddings 决定了词表的大小。例如,如果你的词汇表包含10,000个唯一单词,那么这个参数就应该设置为10,000。这里有一个经验法则:通常我们会将词表大小设置为实际词汇量+1(为未知词预留位置)。
embedding_dim 指定了每个词向量的维度。这个参数的选择需要权衡:
- 较小的维度(如50-100)适合小型数据集或简单的分类任务
- 中等维度(200-300)是常见选择,平衡了表达能力和计算效率
- 大维度(500+)适合复杂任务,但需要更多数据和计算资源
实际应用中,300维的嵌入在大多数NLP任务中表现良好。可以从这个值开始,然后根据模型表现调整。
1.2 初始化与权重管理
默认情况下,nn.Embedding 的权重从标准正态分布 N(0,1) 初始化。但我们可以通过几种方式控制初始化:
- 手动初始化:
python复制embedding = nn.Embedding(1000, 300)
# 使用均匀分布重新初始化
nn.init.uniform_(embedding.weight, -1.0, 1.0)
- 从预训练权重加载:
python复制pretrained_weights = torch.FloatTensor([[0.1, 0.2], [0.3, 0.4]])
embedding = nn.Embedding.from_pretrained(pretrained_weights)
- 冻结嵌入层(在迁移学习中常用):
python复制embedding.weight.requires_grad = False
# 或者使用from_pretrained时设置freeze=True
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
