You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可保留点积相似度的高维单位向量降维方法

保留点积相似度的高维单位向量降维方案

问题背景

我手头有一批高维向量,维度n在1000~3000之间,这些向量满足:均值为0,标准差为1/√n,且L2范数为1。现在需要对它们做降维处理,核心要求是降维并重新归一化后,任意两个向量的点积要和原向量的点积尽可能接近。

已验证可行的方法:随机维度采样

我测试了随机选取部分维度的方法,结果显示点积相似度保留得不错。这里先说明:%是自定义操作符,作用是对操作数先归一化再计算点积。

测试代码如下:

# 原向量归一化后点积
In [34]: ab % bc
Out[34]: 0.445

# 隔1个维度采样(降维至原维度的1/2)
In [35]: ab[::2] % bc[::2]
Out[35]: 0.424

# 隔2个维度采样(降维至原维度的1/3)
In [36]: ab[::3] % bc[::3]
Out[36]: 0.440

# 随机选取300个维度采样
In [39]: rnd = np.random.randint(0,1000,300)
In [40]: ab[rnd] % bc[rnd]
Out[40]: 0.450

从结果能看到,不管是间隔采样还是随机采样,降维后的点积和原结果都很接近,满足需求。

其他可选的同类方法

除了直接随机选维度,还有约翰逊-林德斯特劳斯(JL)变换,它是更严谨的随机降维方法,核心思路是用一个随机生成的低维矩阵和原向量做乘法实现降维。针对你的单位向量场景,简化版JL变换可以直接用元素服从均值0、标准差1/√k(k为目标维度)的随机投影矩阵,降维后再做归一化,同样能很好保留点积相似度。

需要注意的是,不管是随机采样还是JL变换,目标维度k不能太小,一般建议k至少取几十到上百(比如测试里的300维就效果很好),否则点积误差会明显增大。

内容的提问来源于stack exchange,提问作者sten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:27:28