My binary vector search is better than your FP32 vectors

My binary vector search is better than your FP32 vectors

💡 原文中文,约3800字,阅读约需10分钟。
📝

内容提要

本文介绍二进制向量搜索技术,通过将向量二值化大幅减少内存(30倍)并提升速度(RPS约3000),但准确率降至80%。采用自适应检索(先二进制索引粗筛,再用KNN重排)可将准确率提升至95%,同时保持高吞吐和低内存。相比缩短向量,二进制向量在速度、内存和准确率上更优,尤其适合大规模向量检索场景。

🔎

延伸解读

内存与速度的权衡

二进制向量将每个元素压缩为1比特,相比FP32的4字节,内存占用减少约30倍(1M 3072维向量从约20GB降至约600MB)。同时,RPS从约300提升至约3000,速度提升约10倍。但代价是准确率从接近100%降至约80%,在需要高精度的场景中可能不可接受。

自适应检索:兼顾速度与精度

通过先使用二进制索引快速检索出2倍于目标数量的候选集,再用KNN对候选集进行精确重排,准确率可提升至约95%,同时RPS仍保持在约1700,内存占用依然仅为原始向量的约1/30。这种方法在保持高吞吐的同时显著缓解了二值化带来的精度损失。

与缩短向量的对比

相比将向量维度从3072缩短至1024或256,二进制向量在内存和速度上优势明显:1024维索引内存约8GB,RPS约1000,准确率约85%;256维索引内存约2GB,RPS约1200,准确率约60%。而二进制向量内存仅约600MB,RPS约3000,准确率约80%。即使结合自适应检索,二进制向量在内存和速度上仍优于256维索引,但1024维索引在准确率上可达99%,不过内存增加12倍。

Q&A

什么是二进制向量搜索?

二进制向量搜索是一种将向量中的每个元素编码为二进制值(0或1)的表示方法,相比原始的float32向量,每个元素只需1 bit存储,从而大幅减少内存占用。

二进制向量相比float32向量能减少多少内存?

二进制向量每个元素仅需1 bit,而float32向量每个元素需要4字节(32 bit),因此理论上可减少32倍内存。实际测试中,100万个3072维向量从约20GB降至约600MB,减少约30倍。

二进制向量搜索的准确率如何?

在实验中,二进制向量搜索的准确率约为80%,相比原始float32向量有所下降,但通过自适应检索技术可提升至95%。

什么是自适应检索?它是如何工作的?

自适应检索是一种结合二进制向量索引和KNN重排的方法。首先通过二进制向量索引快速检索出较大候选集(如200个),然后使用KNN对候选集进行精确重排,得到最终结果。这样既保持了高速度,又提高了准确率。

二进制向量搜索与缩短向量相比有哪些优势?

在实验中,二进制向量(3000 RPS,80%准确率,600MB内存)优于256维缩短向量(1200 RPS,60%准确率,2GB内存)和1024维缩短向量(1000 RPS,85%准确率,8GB内存)。二进制向量在速度、内存和综合性能上更优。

二进制向量搜索的每秒请求数(RPS)是多少?

二进制向量搜索的RPS约为3000,而原始float32向量搜索的RPS约为300,速度提升约10倍。

二进制向量搜索适合哪些场景?

二进制向量搜索适合大规模向量检索场景,尤其是内存受限或需要高吞吐量的应用。通过自适应检索,可以在保持高准确率的同时大幅降低内存使用,适合处理百万级甚至更大规模的向量数据。

🏷️

标签

➡️

继续阅读