二进制嵌入通过将每个向量分量表示为单个位(0 或 1)或二进制值(通过符号函数为 -1 或 1),而不是全精度浮点数,从而大幅减少存储空间。例如,存储为 32 位浮点数的 128 维向量需要 512 字节,但其二进制等效项仅使用 16 字节(128 位)。即使为了实际对齐而将其存储为字节(每位 1 字节),它也仅占用 128 字节——远小于浮点版本。这种压缩对于大规模系统(例如推荐引擎或图像检索)至关重要,在这些系统中,存储数十亿个高维向量变得可行。例如,一个包含 10 亿个 128 维二进制向量的数据库将需要 ~16 GB 的存储空间,而相同数据如果用 float32 表示,则需要 ~512 GB,这使得二进制嵌入在原始位方面效率提高了 32 倍。
二进制向量的搜索算法主要依赖于汉明距离(不同位的计数)和针对速度优化的按位运算。计算汉明距离涉及异或两个二进制向量并计算设置位,该过程通过现代 CPU 上的 POPCNT
(人口计数)等硬件指令加速。对于近似最近邻搜索,像局部敏感哈希 (LSH) 这样的方法适用于二进制代码。例如,LSH 可能使用随机超平面将相似向量哈希到同一存储桶中,从而实现亚线性时间查找。像 FAISS 这样的库支持具有诸如 Binary IVFADC 等技术的二进制嵌入,该技术对向量进行聚类并使用非对称距离计算。多索引哈希将二进制代码分成段,从而可以通过比较部分哈希来快速查找。这些方法避免了浮点运算的计算成本,从而使搜索速度提高了几个数量级。
实际应用包括图像检索(例如,将 CNN 特征映射到二进制代码)或文本搜索(哈希词嵌入)。像 FAISS 或 Annoy 这样的库提供对二进制向量的内置支持,即使对于海量数据集也能实现高效的内存搜索。学习到的二进制代码(例如来自 Deep Hashing 模型)通过训练神经网络以产生语义上有意义的二进制表示,从而进一步提高准确性。例如,一个模型可能会优化嵌入,以便相似图像的汉明距离最小。虽然二进制嵌入牺牲了一些精度,但它们的存储和速度优势使其对于可伸缩性和延迟至关重要的实时系统来说是必不可少的。开发人员可以使用现成的工具来实现这些,从而根据其用例平衡准确性和效率之间的权衡。