向量数据库的Hashing Function

在向量数据库(如 FAISS、Milvus、Qdrant)中,Hashing Function(哈希函数 / 散列函数) 并不是用来做传统数据库那样的"精确查找"(比如把字符串变成一个唯一固定的 MD5 或 SHA 散列值),而是用来做近似最近邻搜索(ANN)中的空间压缩与快速降维

在向量检索领域,这套技术有一个专属的名字:局部敏感哈希 (LSH, Locality-Sensitive Hashing)

它的核心灵魂在于:让原本在多维空间中就很接近的两个向量,经过哈希函数计算后,高概率掉进同一个"哈希桶(Bucket)"里;而距离很远的向量,则掉进不同的桶里。

1. 核心碰撞逻辑:传统 Hash vs 向量 Hash

为了让你彻底看清它的本质,我们来看它们对待相似数据的态度:

特性 传统哈希函数(如 MD5 / SHA-256) 向量哈希函数(LSH / 局部敏感哈希)
对微小变化的反应 雪崩效应。哪怕只改动一个字母,算出来的哈希值也会天差地别(避免碰撞)。 保持亲近 。如果两个向量极其相似,它们算出来的哈希编码也几乎一模一样(故意碰撞)。
核心目的 安全加密、数据完整性校验、精确唯一寻址。 降维与聚类。将上千维的浮点数压缩成短二进制编码,进行百倍加速。

2. 向量数据库是如何用 Hashing 加速搜索的?

如果你的知识库里有 1000 万个 1536 维的 Embedding 向量,暴力去算它们之间的余弦相似度,服务器的 CPU 会直接烧满。LSH 散列函数通过以下三步实现"降维打击":

第一步:空间随机投影(Random Projection)

哈希函数会在多维空间中随机画很多条"切刀"(超平面/超直线)。

  • 如果向量在切刀的左边,就记为 0

  • 如果向量在切刀的右边,就记为 1

第二步:生成特征指纹(Fingerprint / Hash Code)

如果你在空间里纵横交错地画了 64 条切刀(即使用了 64 个随机哈希函数),那么每一个高维向量就会被这 64 条刀切成一段独一无二的编码。

  • 向量 A 最终变成了:10110010...(一段 64 位的二进制无符号整数)。

  • 它的本质把原本需要巨大内存的 float32 数组,硬生生压缩成了几个 Bytes(字节)

第三步:桶寻址与汉明距离(Hamming Distance)
  • 建库时:拥有相同或高度相似哈希编码的向量,会被归入同一个"哈希桶"中。

  • 查询时 :用户输入一句话,经过同样的哈希函数,也得到了一个编码 10110011。数据库不需要遍历全库 ,只需要去匹配跟这个编码相似的桶(通过极快的位运算计算汉明距离,即看有几位数字不同)。

速度对比 :计算两个 1536 维的浮点数距离需要上千次浮点计算;而计算两个 64 位二进制的汉明距离,在 CPU 层面只需要一条 XOR(异或)和 POPCNT(计数) 指令,耗时几乎为零。

3. 常见的高级向量哈希变体

针对不同的数学度量方式,向量数据库会采用不同的 Hashing 函数:

  1. SimHash / Charikar's LSH(针对 余弦相似度 Cosine Similarity)

    利用随机超平面(Random Hyperplanes)对向量进行切割。向量夹角越小,被切刀分到同侧的概率就越高。

  2. MinHash(针对 杰卡德相似度 Jaccard Similarity)

    常用于大规模文本去重或集合相似度计算。通过多次随机排列(Permutations)来计算两个集合交集和并集的比例。

  3. p-Stable LSH(针对 欧氏距离 L2 Distance)

    利用稳定分布(如正态分布)进行投影,并在投影线上划分固定宽度的格子,落在同一个格子里的向量即为同桶。

💡 极客调优视角:哈希的代价与 2026 年的现状

虽然 Hashing Function 听上去无懈可击,但你在使用向量数据库或写底层算法时,必须注意它的一个重大缺陷:精度损失(精确度不高)

因为它是强行把多维空间拍扁到几位二进制上,必然会发生"本来不怎么像,但刚好被切刀分在了一起(False Positives)"或者"本来挺像,但恰好被一刀切两半(False Negatives)"的情况。

  • 什么时候用 Hashing (LSH) :当你的数据量达到了数亿级别,且服务器的内存极度紧缺(买不起高配内存服务器),或者你对速度的要求远远大于准确率(如第一轮海选粗筛、海量图片版权去重)。

  • 现代向量数据库的改良 :在 2026 年,像 FAISS、Milvus 这类框架更倾向于使用 PQ(Product Quantization,乘积量化) 或者 HNSW 图索引 来代替纯粹的 LSH。PQ 的本质也是一种高级的量化哈希(把空间切成子空间做 K-Means 聚类编码),它在压缩率和精准度之间取得了更好的平衡。

相关推荐
cup1112 小时前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill
IT王师傅16 小时前
从 豆包 到 Codex CLI:一名普通开发者的 AI 工具进化路线
ai·codex cli·openclaw
岳小哥AI17 小时前
Siri要接入AI了,苹果手机上一句话让GPT写文案、DeepSeek写代码的时刻来了
ai·ai基础
Artech17 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
哥布林学者1 天前
深度学习进阶(三十一)FlashAttention:IO 感知的精确注意力
机器学习·ai
岳小哥AI2 天前
AI大模型"幻觉"从何而来?解密GPT-4、DeepSeek一本正经胡说八道的真相
ai·ai基础
JaguarJack2 天前
Openai Codex 重大更新 已支持接入任意开源大模型
ai·openai·codex
Artech3 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
岳小哥AI3 天前
读懂计算机视觉CV、语言感知(ASR/TTS)、多模态,就能理解AI是如何“看到”与“听到”世界的
ai·ai基础
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai