Embedding(嵌入)是将离散符号(如单词)映射到连续向量空间的核心技术,其本质是语义的数学化表示。以下是其核心原理详解:
一、基础概念图解
graph LR
A[单词`猫`] --> B[索引5] --> C[向量[0.2, -1.3, 0.7...]]
D[单词`狗`] --> E[索引8] --> F[向量[0.3, -1.1, 0.6...]]
二、工作原理分步解析
1. 建立词汇表映射
- 为每个单词分配唯一ID(如:"猫"→5,"狗"→8)
- 词汇表示例:
vocab = {"<PAD>":0, "<UNK>":1, "猫":2, "狗":3, ...}
2. 创建嵌入矩阵
- 矩阵维度:
(词汇表大小, 嵌入维度)
# 假设 vocab_size=10000, embedding_dim=300 embedding_matrix = np.random.randn(10000, 300)
3. 向量查找过程
- 输入:单词索引
[2, 3]
→ 输出:对应行向量输入索引2 → 获取第2行向量:[0.2, -0.5, ..., 1.1] 输入索引3 → 获取第3行向量:[0.3, -0.4, ..., 0.9]
三、关键特性解析
1. 语义捕捉能力
- 通过向量空间中的距离反映语义相似性
# 相似词向量距离近 cosine_sim(猫, 狗) = 0.92 cosine_sim(猫, 汽车) = 0.15
2. 可学习性
- 嵌入矩阵作为神经网络参数,通过反向传播自动优化
- 训练过程示例:
四、与传统方法的对比
方法 | 维度 | 语义表达 | 计算效率 | 示例 |
---|---|---|---|---|
One-Hot | 高维 | 无 | 低 | [0,0,1,0] |
Embedding | 低维 | 有 | 高 | [0.2, -1.3] |
五、实际应用场景
- 文本分类:将词序列转换为向量序列输入RNN/CNN
- 推荐系统:用户ID/物品ID的嵌入表示
- 知识图谱:实体关系的向量化表示
- 预训练模型:BERT/GPT的输入基础层
六、PyTorch实现细节
在您看到的代码中:
self.embedding = nn.Embedding(vocab_size, embedding_dim)
vocab_size
:词汇表总词量(如:50000)embedding_dim
:词向量维度(如:300)- 前向传播时:
# 输入形状:(batch_size, seq_len) input_ids = torch.LongTensor([[1, 23, 45], [9, 2, 0]]) # 输出形状:(batch_size, seq_len, embedding_dim) embedded = self.embedding(input_ids)
七、可视化理解
通过t-SNE降维可视化示例: