logo

从词向量到Word2Vec:NLP中的分布式表示与矩阵分解

作者:Nicky2025.09.26 18:40浏览量:2

简介:本文围绕NLP中词向量的核心概念展开,系统讲解词向量的意义、SVD分解在词向量降维中的应用,以及Word2Vec模型的原理与实现,帮助读者深入理解分布式词表示技术。

引言

自然语言处理(NLP)作为人工智能的重要分支,其核心任务之一是将人类语言转化为计算机可理解的数值表示。传统的“one-hot”编码方法由于高维稀疏、无法捕捉语义关系的缺陷,逐渐被词向量(Word Embedding)所取代。词向量通过低维稠密向量捕捉词语的语义和语法信息,成为现代NLP任务的基石。本文将围绕词向量的核心概念,系统讲解SVD分解在词向量降维中的应用,以及Word2Vec模型的原理与实现,帮助读者构建从理论到实践的完整知识体系。

一、词向量的意义与挑战

1.1 从One-Hot到分布式表示

One-Hot编码是传统的词表示方法,其原理是为词典中的每个词分配一个独热向量。例如,对于词典["king", "queen", "man", "woman"],“king”的One-Hot向量为[1, 0, 0, 0]。这种方法存在两个致命缺陷:

  • 维度灾难:词典规模为N时,向量维度为N,导致存储和计算效率低下。
  • 语义缺失:任意两个词的向量正交(余弦相似度为0),无法捕捉“king”与“queen”的性别关联或“king”与“man”的类属关系。

分布式词表示(Distributed Representation)通过低维稠密向量解决上述问题。例如,“king”的词向量可能是[0.8, -0.2, 0.5, ...],其中每个维度隐式编码语义特征(如“皇权”“性别”等)。

1.2 词向量的评价标准

优秀的词向量需满足以下特性:

  • 语义相似性:相似词语的向量距离近(如“car”与“automobile”)。
  • 语法关系:词向量运算应反映语法规则(如“king - man + woman ≈ queen”)。
  • 维度效率:在较低维度下保留足够信息(通常50-300维)。

二、SVD分解与词向量降维

2.1 共现矩阵与SVD分解

SVD(奇异值分解)是一种矩阵分解技术,可将高维稀疏矩阵分解为三个低秩矩阵的乘积。在NLP中,SVD常用于对词-文档共现矩阵词-词共现矩阵进行降维,生成稠密词向量。

步骤1:构建共现矩阵

假设语料库包含以下句子:

  1. "I like natural language processing."
  2. "I enjoy machine learning."

构建词-词共现矩阵(窗口大小为1):
| | I | like | enjoy | natural | language | processing | machine | learning |
|———-|—-|———|———-|————-|—————|——————|————-|—————|
| I | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| like | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| enjoy | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| … | | | | | | | | |

步骤2:应用SVD分解

对共现矩阵(X \in \mathbb{R}^{n \times m})进行SVD分解:
[
X = U \Sigma V^T
]
其中:

  • (U):词向量矩阵(行向量对应词的分布式表示)。
  • (\Sigma):奇异值矩阵(按降序排列)。
  • (V^T):上下文向量矩阵。

通过截取前(k)个奇异值((k \ll \min(n, m))),得到低维词向量:
[
X_k = U_k \Sigma_k^{1/2}
]

2.2 SVD词向量的优缺点

优点

  • 理论严谨,可解释性强。
  • 适用于小规模语料。

缺点

  • 计算复杂度高((O(n^3)))。
  • 共现矩阵稀疏性导致数值不稳定。
  • 无法处理新词(Out-of-Vocabulary, OOV)。

三、Word2Vec:预测式词向量模型

3.1 Word2Vec的核心思想

Word2Vec(2013年由Mikolov等人提出)通过预测上下文词语生成词向量,分为两种架构:

  • Skip-Gram:给定中心词,预测上下文词。
  • CBOW(Continuous Bag-of-Words):给定上下文词,预测中心词。

3.2 Skip-Gram模型详解

目标函数:最大化对数似然
[
\mathcal{L} = \frac{1}{T} \sum{t=1}^T \sum{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} | w_t)
]
其中:

  • (T):语料长度。
  • (c):窗口大小。
  • (p(w{t+j} | w_t)):通过Softmax计算:
    [
    p(w_o | w_i) = \frac{\exp(v
    {wo}^T v{wi})}{\sum{w \in V} \exp(vw^T v{w_i})}
    ]
  • (v_{w_i}):输入词向量。
  • (v_{w_o}):输出词向量。

优化技巧

  • 负采样(Negative Sampling):用二元分类替代Softmax,仅更新正样本和少量负样本的梯度。
  • 层次Softmax:通过霍夫曼树加速概率计算。

3.3 Word2Vec的实现示例(Python)

  1. import gensim
  2. from gensim.models import Word2Vec
  3. # 示例语料
  4. sentences = [
  5. ["natural", "language", "processing"],
  6. ["machine", "learning", "algorithm"],
  7. ["deep", "learning", "model"]
  8. ]
  9. # 训练Skip-Gram模型
  10. model = Word2Vec(
  11. sentences=sentences,
  12. vector_size=100, # 词向量维度
  13. window=2, # 上下文窗口
  14. min_count=1, # 最小词频
  15. sg=1, # 1=Skip-Gram, 0=CBOW
  16. workers=4 # 并行线程数
  17. )
  18. # 获取词向量
  19. vector = model.wv["learning"]
  20. print(vector.shape) # 输出: (100,)
  21. # 计算词语相似度
  22. similarity = model.wv.similarity("learning", "model")
  23. print(f"Similarity: {similarity:.2f}")

3.4 Word2Vec的优势与局限

优势

  • 计算效率高(适合大规模语料)。
  • 能捕捉细微的语义关系(如“Paris - France + Germany ≈ Berlin”)。
  • 支持在线学习(增量更新)。

局限

  • 无法直接处理词序(需结合RNN/Transformer)。
  • 对超参数敏感(如窗口大小、维度)。

四、实践建议与进阶方向

4.1 参数调优经验

  • 维度选择:通常50-300维,简单任务用低维,复杂任务用高维。
  • 窗口大小:小窗口(2-5)捕捉局部语法,大窗口(5-10)捕捉全局语义。
  • 负采样数:Skip-Gram推荐5-20,CBOW推荐2-5。

4.2 词向量的后处理

  • 均值中心化:对词向量矩阵的每一维减去均值,提升聚类效果。
  • 去噪:过滤低频词或使用TF-IDF加权共现矩阵。

4.3 进阶模型

  • GloVe:结合全局共现统计与局部预测的混合模型。
  • FastText:引入子词(subword)信息,解决OOV问题。
  • BERT:基于Transformer的上下文相关词表示。

五、总结

本文从词向量的基本概念出发,系统讲解了SVD分解在词向量降维中的应用,以及Word2Vec模型的原理与实现。SVD通过矩阵分解生成静态词向量,适合理论分析;而Word2Vec通过预测任务学习动态词向量,更适合大规模数据。理解这两种方法的核心差异,能帮助读者在实际任务中选择合适的工具。未来,随着预训练语言模型(如BERT、GPT)的普及,词向量技术将进一步向上下文化、动态化的方向发展。

相关文章推荐

发表评论

活动