1. 从词袋到词向量:NLP表示方法的演进之路
记得刚接触自然语言处理时,我对着计算机屏幕上那一串串0和1组成的one-hot向量百思不得其解——为什么"国王"减去"男人"加上"女人"不能等于"女王"?这个看似简单的问题,却揭示了传统词表示方法的根本缺陷。在NLP的发展历程中,词表示方法经历了从离散到连续、从稀疏到稠密、从静态到动态的革命性转变。
1.1 传统方法的困境
早期的词表示方法主要有两种:one-hot编码和词频统计。假设我们有一个包含5个词的词典["苹果","香蕉","国王","女王","梨子"],那么:
- one-hot编码中"苹果"=[1,0,0,0,0]
- "香蕉"=[0,1,0,0,0]
- 词频统计可能得到"苹果出现在3个文档"这样的统计量
这两种方法都存在致命缺陷:
- 维度灾难:词典每增加一个词,向量维度就增加一维
- 语义缺失:无法表示"水果"这样的上位概念
- 关系缺失:无法捕捉"国王-女王"这样的语义关系
实践建议:在小规模文本分类任务中,TF-IDF(词频-逆文档频率)仍是baseline首选,但需要配合特征选择降维
1.2 分布式表示的突破
分布式假说(Distributional Hypothesis)指出:"词的语义由其上下文决定"。基于此,出现了两类革命性方法:
| 方法类型 | 代表模型 | 核心思想 | 优缺点 |
|---|---|---|---|
| 基于矩阵分解 | LSA/LDA | 全局共现统计 | 能捕捉主题但丢失局部信息 |
| 基于预测 | Word2Vec | 局部上下文预测 | 保留局部关系但忽略全局统计 |
我在实际项目中发现,当处理短文本(如微博)时,Word2Vec效果更好;而处理长文档(如科研论文)时,LDA能提取更稳定的主题特征。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Word2Vec深度解析与实战
2.1 模型架构精要
Word2Vec包含两种经典结构:
python复制# Skip-gram模型伪代码
class SkipGram(nn.Module):
def __init__(self, vocab_size, embedding_dim):
s
