Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

📖 ⏱️ ~25 min read 🎯 Methodology

Word2Vec 专题附录

📝 为何独立成篇: 2.2 向量召回 (I2I) 的 2.2.1 只讲清了 Skip-Gram 的直觉与它在推荐里的迁移。本附录补全被略去的部分——CBOW 架构、中心词/上下文双向量表的结构细节、负采样的精确数学形式、以及词向量运算(类比)性质——让你在使用 Item2Vec / EGES / Airbnb 之前,先吃透底层引擎。

Word2Vec 的目标很朴素:用 大量无标注文本 ,给每个词学一个 低维稠密向量 ,使得:

  • 语义相近的词,向量在空间中也相近;
  • 词与词之间的关系可以通过 向量运算 反映出来。

这套表示可以直接喂给文本分类、机器翻译、信息检索等下游任务——而在推荐里,它被「结构同构」地迁移成了 Item2Vec。


1. 动机:从 one-hot 到稠密向量

早期最直接的做法是用 one-hot 编码 表示词:词表大小为 ,第 个词就是一个第 位为 1、其余为 0 的 维向量。它直观,却有三个致命问题:

问题说明
维度灾难 常达百万级,向量又高又稀疏
无法表达语义任意两个不同词的 one-hot 内积都为 0,「猫」和「狗」被当成毫不相干
无法表达语法单复数、时态等关系完全丢失

我们需要一种 既低维、又能承载语义/语法信息 的表示——这正是 Word2Vec 要解决的。


2. 分布假说与上下文窗口

Word2Vec 的理论根基是语言学的 分布假说 (Firth, 1957):

「You shall know a word by the company it keeps.」 一个词的意义,由它常伴随出现的词决定。

上下文窗口示意:中心词 loves 与滑动窗口 m=2 内的共现词

模型遍历语料中的每个词,通过调整词向量,使「预测的上下文」尽量逼近「语料中真实的上下文」。具体来说,若中心词 在位置 ,其上下文为窗口 内的词


3. 两种架构:Skip-gram 与 CBOW

Word2Vec 包含两个镜像对称的模型。在 2.2.1 里我们只用了 Skip-Gram,这里把 CBOW 也补上。

Skip-gram 与 CBOW 架构对比

3.1 Skip-gram:用中心词预测上下文

给定一个中心词,模型预测其上下文词出现的概率。对窗口内上下文词 ,条件概率为

其中 是词 的向量表示, 是词表大小。遍历整个语料,似然函数为

3.2 CBOW:用上下文预测中心词

CBOW(Continuous Bag of Words)方向相反:把上下文词 平均 后,预测中心词。

💡 该用哪个? 推荐场景几乎都用 Skip-gram。原因有二:① 它对低频/长尾词更友好(每个上下文Pair都提供独立监督信号);② 它天然适配「用户行为序列」这种变长、稀疏的输入,可直接做序列建模。CBOW 因对上下文取平均,在推荐里会抹掉序列顺序信息。


4. 模型结构与双向量表

上面的条件概率公式里藏着一个 极易误解的细节 :中心词向量 与上下文词向量 并不在同一个向量空间里

模型结构:中心词向量表 W 与上下文向量表 Wᶜ 分属两个空间

以 Skip-gram 为例,设向量维度为 ,则存在 两张 向量表:

  • 中心词向量表
  • 上下文词向量表

前向计算流程:

  1. 输入中心词的 one-hot 表示
  2. 查表得到中心词向量
  3. 与上下文向量表第 行相乘,得到 Softmax 的输入;
  4. 经 Softmax 输出上下文词概率。

⚠️ Common Mistakes in Word2Vec(来自 )和 (来自 )当成同一空间里的向量直接比距离。它们来自两张不同的表,只有训练完成后通常把两张表相加/平均得到的「最终词向量」才可用于相似度计算。


5. 负采样:让 Softmax 变得可计算

直接算第 3/4 节的 Softmax 分母,需要遍历整个词表 (百万级),代价不可接受。Word2Vec 用 负采样(Negative Sampling) 把多分类问题拆成多个二分类问题。

以 Skip-gram 为例,原目标被替换为:

其中 是 sigmoid, 为负样本数量, 是负采样分布。原论文取

💡 直觉: 第一项希望「真实上下文词对」的相似度越来越高(抬高正样本);第二项希望「随机采样的负样本词对」的相似度越来越低(压低负样本)。由 sigmoid 单调性可知,这与最大化原始似然 的目标一致,却避免了对整个词表求和——复杂度从 降到

⚠️ Common Mistakes in Word2Vec 以为负采样只是「提速技巧」、不影响语义。事实上,负样本分布 次方刻意上抬低频词成为负样本的概率,让模型对罕见词也能学到区分性向量——这对推荐里的长尾物品尤为关键。


6. 词向量运算:类比性质

Word2Vec 最迷人的发现是:训练出的向量空间里, 语义关系可以用向量加减表达。最经典的例子:

这意味着「王 − 男 + 女 ≈ 后」这种类比关系被编码进了几何结构。在推荐里,类似性质表现为「物品 A 与物品 B 的差别,约等于物品 C 与某物品 D 的差别」——这正是后续语义 ID、向量检索能做「可计算类比」的理论底气。


7. 从 Word2Vec 到推荐:Item2Vec 的桥接

把 Word2Vec 迁移到推荐,只需做一次 结构同构替换 (详见 2.2.1):

文本世界推荐世界
词语物品
句子用户交互序列
词语共现物品被同一用户交互

替换后:

  • Skip-gram + 负采样 → 直接成为 Item2Vec 的训练原型;
  • 学到的物品向量 → 近邻检索即可实现 I2I 召回;
  • 第 4–5 节的双向量表、负采样分布等机制,原封不动地支撑起 EGES、Airbnb 等工业级变体。

💡 一句话收口: Word2Vec 的引擎(Skip-gram + 双向量表 + 负采样)是 I2I 向量召回的方法论基石;推荐领域的所有改进,都只是在「如何构造序列」和「如何定义正负样本」上做文章。


本章小结

  • Word2Vec 用 分布假说 把「共现」学成「稠密语义向量」,解决了 one-hot 高维、稀疏、无语义的三大缺陷。
  • 两大架构 Skip-gram (中心→上下文)与 CBOW (上下文→中心),推荐中几乎总用 Skip-gram。
  • 结构上有 两张向量表 (中心)与 (上下文),分属不同空间,最终向量需合并后使用。
  • 负采样 个二分类近似全词表 Softmax,并通过 上抬低频词,是工业可行性的关键。
  • 词向量具备 类比运算 性质,为语义 ID 与向量检索提供理论支撑。
  • 通过「词→物品、句子→行为序列」的同构替换,Word2Vec 直接成为 Item2Vec 与后续 I2I 方法的引擎。

🔗 前后关联

  • 前置: 2.2 向量召回 (I2I) 的 2.2.1 把本附录作为「序列建模理论基础」简要引用;读完本附录再回看,会更清楚 Item2Vec / EGES / Airbnb 为何那样设计。
  • 后继: 2.3 双塔模型 (U2I) 用「用户塔 + 物品塔」的稠密向量做召回,与这里的「物品稠密向量」思路一脉相承;6.4 Codebook 量化与语义 ID 则是把「离散词 → 连续向量」反过来做成「连续向量 → 离散语义 ID」,可对照理解。

Practice Problems

Problem A.1 — 双向量表误区 🟢 Easy

有人说:「Word2Vec 里中心词 和上下文词 的向量都在同一个 维空间,直接算余弦相似度就行。」这句话哪里错了?

Approach: 回看第 4 节—— 来自 来自

答: 错在认为两者同空间。实际上中心词向量表 与上下文向量表 是两张独立参数表,对应的向量分属不同空间;直接比距离是无效的。训练后通常把两表相加/平均得到最终词向量,才能用于相似度计算。

Problem A.2 — 负采样缩放 🟡 Medium

负采样分布用 而非直接用词频。若某词出现 16 次、另一词出现 81 次,分别计算它们在 次方后的相对权重比(即 ),并说明这个设计对低频词的影响。

Approach:

答: 相对权重比 。注意词频比是 ,经过 次方后差距被 压缩 (5.06→3.375),等于 上抬了低频词 成为负样本的概率——让模型对罕见词也学到区分性向量,缓解长尾问题。

Problem A.3 — 同构迁移 🔴 Hard

把 Word2Vec 迁移到推荐做 Item2Vec 时,为什么「用户交互序列 = 句子」这个映射是结构同构、而非简单类比?请从训练目标(Skip-gram + 负采样)的角度说明,并指出一个原书 2.2.1 提到的、Item2Vec 相对原版 Word2Vec 的 关键简化

Approach: 同构指「输入单元 + 共现结构 + 训练目标」三者一一对应;关键简化在 Item2Vec 把用户历史当 无序集合 而非序列。

答: 同构体现在:词→物品、句子→用户行为序列、词共现→同用户交互,且 Skip-gram 的 + 负采样目标函数 形式完全不变 ,只是把文本语料换成行为序列语料。关键简化:原书指出 Item2Vec 默认把每个用户的交互历史当成 无序集合 (忽略时间顺序),而原版 Word2Vec 严格依赖滑动窗口内的有序上下文——这是它和文本版最核心的差异。