Embedding层详解:如何用低维向量提升NLP模型效果
在自然语言处理(NLP)领域,如何高效地表示单词一直是核心挑战之一。传统方法如one-hot编码虽然简单直接,但随着词汇量增长,其高维稀疏特性成为模型训练的瓶颈。Embedding层的出现,就像为NLP模型装上了"语义压缩器",不仅能将单词映射到低维稠密空间,还能捕捉词语间的微妙关联。这种技术早已超越简单的降维工具,成为BERT、GPT等前沿模型的基石。本文将带您深入Embedding层的实现细节与实战技巧,揭示其如何让模型真正"理解"语言。
1. 从One-Hot到Embedding:NLP表示学习的进化
早期的文本处理依赖one-hot编码,每个单词被表示为词汇表长度的向量,只有对应位置为1其余全0。这种方法在小型系统中尚可运行,但当面对百万级词汇时,一个简单句子就可能消耗GB级内存。更关键的是,one-hot编码完全无法表达"猫和狗都是宠物"这样的语义关系。
One-Hot编码的典型问题:
- 内存占用:100万词汇需要100万维向量
- 缺乏语义:所有向量相互正交,无法表达相似性
- 冷启动问题:新词必须扩展整个编码空间
Embedding层通过可学习的低维稠密向量(通常50-300维)彻底改变了这一局面。在PyTorch中,一个基础的Embedding层可以这样实现:
import torch.nn as nn
# 定义包含10000个词汇,每个词用200维向量表示
embedding_layer = nn.Embedding(num_embeddings=10000, embedding_dim=200)
# 输入形状为(batch_size, seq_length)的索引张量
input_indices = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
embedded_output = embedding_layer(input_indices) # 输出形状(batch


3万+

被折叠的 条评论
为什么被折叠?



