高斯随机投影:一种低调的向量降维技术

在做广告关键词匹配时,遇到一个经典问题:query 和广告词的匹配空间维度极高(几十万维的 bag-of-words),直接算余弦相似度太慢。

当时研究了一阵 Johnsson-Lindenstrauss 引理及其工程实现,写下了这篇。


JL 引理说了什么?

一句话:高维空间中的 N 个点,可以投影到 O(log N) 维空间,同时几乎不改变任意两点之间的欧氏距离。

具体来说:

对于任意 ε ∈ (0,1) 和任意 N 个点,存在一个映射 f: Rᵈ → Rᵏ,其中 k = O(log N / ε²),使得对所有点对 (u,v): (1-ε)||u-v||² ≤ ||f(u)-f(v)||² ≤ (1+ε)||u-v||²

这就是“维数灾难”的一个乐观面:维度可以被大幅压缩而不损失信息。


高斯随机投影

最简单的实现:生成一个随机矩阵 R ∈ Rᵏˣᵈ,每个元素 ~ N(0, 1/k),然后:

投影向量 = R × 原始向量

为什么用高斯分布?因为高斯随机向量在任意方向上的投影方差是一致的(旋转不变性),保证了点对距离的期望不变。

一个直观理解:高维空间中,随机两个向量几乎总是正交的。随机投影本质上是在做一个“随机旋转”,然后只保留前 k 个坐标。


在广告匹配中的应用

原始空间:几十万维的 term 频率向量,稀疏度 > 99.9%

  1. 用高斯随机矩阵投影到 100-500 维
  2. 在低维空间做向量检索(L2 或 cosine)
  3. 找回 Top-K 候选,再在原空间做精确打分

关键优化:

  • 稀疏向量 × 稠密矩阵 → 只需遍历非零元素
  • 矩阵不需要真的存储,用哈希种子在线生成

局限

  • 投影矩阵本身不学习数据分布(相比 PCA 或 SVD)
  • 对 cosine 距离的保距性不如 L2(需要先 L2 归一化)
  • 现代 Embedding 方法(DNN 训练)通常效果更好

但在 2016 年的广告系统里,这是一个不需要训练、计算量可控的实用方案。

这也是我在百度获得的第一个专利方向。