跳到主内容
快讯直播
AI智模界
AI 词典

二值化嵌入:把浮点向量压成0/1,用汉明距离换内存

一句话定义:二值化嵌入(Binary AI 词典:Embedding">Embedding)是把原本每个维度都是浮点数的向量,压成每维只有 0 或 1 的向量表示,用极小的存储代价换取可接受的检索精度。

它到底做了什么

普通嵌入(embedding)通常是 768 维或 1024 维的 float32 向量:一个维度占 4 字节,768 维就是 3KB 左右。二值化之后,每个维度只占 1 个比特(bit),768 维只要 96 字节——内存直接降到约 1/32。

相似度算法也随之改变。浮点向量一般用余弦相似度(cosine similarity)或内积;二值向量则用汉明距离(Hamming distance):把两个向量逐位异或(XOR),数一数有几个 1,就是它们不同的位数。位数越少越相似。这个操作在 CPU 上就是几条位运算指令,比浮点乘加快得多,而且天然适合并行。

打个比方

原来的嵌入像一份详细的成绩单:"数学 87.5、语文 62.3、英语 91.0……"。二值化之后,它变成了"数学及格、语文不及格、英语及格"的清单。整体趋势还在:理科好的人依然排在前面。但两个人都"及格"时,你分不出谁考得更好——这就是精度损失。

怎么训出来

前向计算时用符号函数(sign)或 tanh 后取正负号,把浮点值拍成 +1/-1。麻烦在于符号函数几乎处处导数为零,反向传播的梯度传不回去。工程上的通行做法是直通估计器(straight-through estimator, STE):反向传播时假装这一步是恒等映射,把梯度原样放过去。另一种更省事的路径是先训好浮点模型,再做二值化,或者先学一个旋转/投影矩阵再取符号,让信息分布更均匀。

和相邻概念的区别

方案每维占用相似度相对浮点压缩精度
浮点嵌入32 bit余弦/内积1×基准
int8 标量量化8 bit内积约 4×几乎不掉
乘积量化(PQ)依赖码本查表视配置而定可调
二值化嵌入1 bit汉明距离约 32×有可见下降

关键差别不在"压缩多少",而在"能不能重排救回来"。

对从业者的实际意义

在向量数据库(vector database)里做十亿级检索时,内存往往是真正的瓶颈,而不是算力。二值化的典型用法是当粗筛:先用汉明距离快速捞出几百个候选,再用原始浮点向量做一次精排(rerank),把丢掉的召回补回来。这样既省内存,最终效果也不会差太多。

代价也很实在:召回率通常会掉几个百分点,且对训练细节更敏感;如果业务本身就要求高精度、数据量又不大,直接用 int8 量化更划算——4 倍压缩几乎不掉点,何必为了 32 倍去承担召回损失。

要不要上二值化,判断标准很简单:内存是不是卡死了,且你能不能接受两阶段检索。具体库和索引类型的支持情况,以官方页面为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。