Word2Vec中的Skip-gram模型原理与优化
字数 1534 2025-11-06 12:41:12
Word2Vec中的Skip-gram模型原理与优化
题目描述
Skip-gram是Word2Vec的一种核心模型,用于学习词向量(Word Embeddings)。其目标是通过中心词预测上下文词,从而在向量空间中捕捉词汇的语义和语法关系。例如,给定中心词“人工智能”,模型应能预测出“技术”、“深度学习”等上下文词。Skip-gram需解决的关键问题包括:如何定义预测任务、设计损失函数,以及通过负采样(Negative Sampling)等优化方法降低计算复杂度。
逐步讲解
-
模型基本思想
- 输入与输出:Skip-gram以中心词(如“猫”)的one-hot编码作为输入,通过神经网络预测其上下文窗口内(如前后2个词)的所有词。
- 核心假设:语义相似的词会出现在相似的上下文环境中。模型通过训练使相似词的向量在空间中的距离更近。
- 示例:句子“猫趴在沙发上睡觉”,窗口大小为2时,中心词“趴在”的上下文为{猫, 沙发上, 睡觉}。
-
模型结构分解
- 输入层:一个维度为V的one-hot向量(V是词表大小)。例如,词表为[“猫”, “趴”, “在”, “沙发”, “睡觉”]时,“在”的one-hot向量为[0,0,1,0,0]。
- 隐藏层:无激活函数的全连接层,权重矩阵W₁(维度V×d,d是词向量维度)。输入词与W₁相乘后直接得到其d维词向量。
- 输出层:另一个权重矩阵W₂(维度d×V),将隐藏层输出转换为V维分数,再通过Softmax计算每个词作为上下文词的概率。
- 数学表达:
- 中心词c的向量:v_c = W₁^T · one_hot(c)
- 上下文词o的分数:score_o = v_c^T · W₂[:, o]
- 概率:P(o|c) = exp(score_o) / ∑_{w=1}^V exp(score_w)
-
损失函数与训练挑战
- 损失函数:使用负对数似然损失。对于中心词c和上下文词o,损失为:
J = -log P(o|c) - 计算瓶颈:Softmax的分母需遍历整个词表(∑exp(score_w)),当V很大时(如百万级),计算成本极高。
- 损失函数:使用负对数似然损失。对于中心词c和上下文词o,损失为:
-
优化方法:负采样(Negative Sampling)
- 思想:将多分类问题转化为二分类。对于每个真实上下文词(正样本),随机采样K个非上下文词(负样本),训练模型区分正负样本。
- 新损失函数:
J = -log σ(v_o^T v_c) - ∑{k=1}^K log σ(-v{n_k}^T v_c)
其中σ是Sigmoid函数,v_o是正样本词向量,v_{n_k}是负样本词向量。 - 负样本采样策略:根据词频的3/4次方采样,避免高频词主导训练。例如,“的”被采样的概率高于“人工智能”。
- 优势:将计算复杂度从O(V)降至O(K+1),K通常取5-20。
-
训练流程示例
- 输入中心词“趴在”,真实上下文词为“猫”。
- 正样本:(“趴在”, “猫”) → 标签1。
- 负样本:随机采样K=2个词(如“吃饭”、“运行”)→ 标签0。
- 模型分别计算三个样本的Sigmoid概率,通过梯度下降更新v_c、v_o和负样本词的向量。
-
关键技巧与扩展
- 高频词下采样:对“的”、“是”等高频词,以一定概率丢弃,平衡常见词和罕见词的训练次数。
- 向量结果:训练完成后,W₁的每一行即为对应词的词向量,语义相似的词(如“猫”和“狗”)向量余弦相似度较高。
总结
Skip-gram通过局部上下文预测任务学习词向量,负采样等技术解决了大规模词表下的计算效率问题,成为词嵌入领域的经典方法。其核心在于用简单二分类近似复杂Softmax,同时保留词汇的分布式语义信息。