Elasticsearch:优化的标量量化 - 更好的二进制量化

作者:来自 Elastic Benjamin Trent

在这里,我们解释了 Elasticsearch 中的优化标量量化以及如何使用它来改进更好的二进制量化 (Better Binary Quantization - BBQ)。

我们的全新改进版二进制量化 (Better Binary Quantization - BBQ) 索引现在变得更强大了!在各方面的召回率都有提升(某些极端情况下提升高达 20%),并开启了将向量量化到任意 bit 大小的未来。从 Elasticsearch 8.18 开始,BBQ 索引现已采用我们最先进的优化标量量化算法作为技术支撑。

标量量化简史

标量量化(scalar quantization)在 Elasticsearch 8.12 中引入,最初是一个简单的最小/最大量化方案。每个 Lucene 段,我们会找到给定置信区间的全局分位数。然后使用这些分位数作为最小值和最大值来量化所有向量。虽然这种简单的量化功能强大,但它实际上只适用于整字节量化。
静态置信区间意味着静态分位数。它针对给定段中的所有向量计算一次,并且适用于较高的位值。

在 Elasticsearch 8.15 中,我们添加了半字节或 int4 量化。为了实现高召回率,我们添加了一个优化步骤,允许动态计算最佳分位数。这意味着不再有静态置信区间。Lucene 将为每个段计算最佳全局上分位数和下分位数。与 float32 向量相比,内存使用率降低了 8 倍。
动态搜索最佳分位数以减少向量相似性误差。此操作在向量样本集上全局执行一次,然后应用于所有向量。

最后,现在在 8.18 中,我们添加了局部优化标量量化。它优化了每个单独向量的分位数。允许在任何位大小下实现出色的召回率,即使是单比特量化。

什么是优化标量量化?

如需深入了解优化标量量化背后的数学和直觉,请查看我们关于优化标量量化的博客文章。这项工作有三个主要收获:

  • 每个向量都以 Apache Lucene 段的质心为中心。这使我们能够更好地利用可能的量化向量来表示整个数据集。
  • 每个向量都使用一组独特的优化分位数单独量化。
  • 使用非对称量化,允许在相同的内存占用下实现更高的召回率。

简而言之,在量化每个向量时:

  • 我们将向量置于质心上
  • 计算有限次数的迭代以找到最佳分位数。如果分位数不变或误差(损失)增加,则提前停止
  • 打包生成的量化向量
  • 存储打包的向量、其分位数、其分量的总和以及额外的误差校正项

以下是优化 2 位向量的分步视图。在第四次迭代之后,我们通常会停止优化过程,因为误差(损失)会增加。第一个单元格是每个单独组件的误差。第二个是 2 位量化向量的分布。第三个是整体误差的变化方式。第四个是当前步骤的分位数与正在量化的原始向量的叠加。

存储和检索

优化标量量化向量的存储和检索与 BBQ 类似。主要区别在于我们存储的特定值。
为每个二进制量化向量存储:dims/8 字节、上分位数和下分位数、附加校正项、量化分量的总和。

其中一个细微差别是校正项。对于欧几里得距离,我们存储中心向量的平方范数(squared norm)。对于点积,我们存储质心和非中心向量之间的点积。

性能

说得够多了。以下是四个数据集的结果。

  • Cohere 的 768 维多语言嵌入。这是一个分布良好的内积数据集。
  • Cohere 的 1024 维多语言嵌入。此嵌入模型针对量化进行了很好的优化。
  • E5-Small-v2 在 quora 数据集上量化。此模型通常在二进制量化方面表现不佳。
  • GIST-1M数据集。这个科学数据集为内积和量化开辟了一些有趣的边缘情况。

以下是 Recall@10|50 的结果:

Dataset BBQ BBQ with OSQ Improvement
Cohere 768 0.933 0.938 0.5%
Cohere 1024 0.932 0.945 1.3%
E5-Small-v2 0.972 0.975 0.3%
GIST-1M 0.740 0.989 24.9%

总体而言,我们发现,在我们新的优化标量量化的支持下,BBQ 提高了召回率,对于 GIST-1M 数据集而言,这一效果非常显著。

但是,索引时间呢?当然,所有这些每个向量的优化都必须加起来。答案是否定的。

以下是相同数据集的索引时间。

Dataset BBQ BBQ with OSQ Difference
Cohere 768 368.62s 372.95s +1%
Cohere 1024 307.09s 314.08s +2%
E5-Small-v2 227.37s 229.83s < +1%
GIST-1M 1300.03s* 297.13s -300%
  • 由于使用内积时量化方法在 GIST-1M 上效果很差,由于向量距离无法很好区分,因此构建 HNSW 图需要很长时间。。

结论

这种新的、最先进的量化方法不仅提高了 BBQ 索引的召回率,还解锁了未来的优化。我们现在可以将向量量化为任意位大小,并且我们想探索如何提供 2 位量化,在不重新排序的情况下在内存利用率和召回率之间取得平衡。

Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。

原文:Optimized Scalar Quantization: Even Better Binary Quantization - Elasticsearch Labs

相关推荐
喜欢猪猪2 分钟前
Spring Boot 3.0响应式编程:订阅与发布、Flow的使用场景及优势解析
大数据
fajianchen22 分钟前
当Elasticsearch索引数据量过多时,可以采取以下措施进行优化和部署
大数据·elasticsearch·搜索引擎
董董灿是个攻城狮30 分钟前
010:传统计算机视觉之大津算法初探
人工智能·计算机视觉·cnn
松岛的枫叶1 小时前
springBoot整合ELK Windowsb版本 (elasticsearch+logstash+kibana)
spring boot·elk·elasticsearch·kibana·logstash
Stealmoon_91 小时前
快速、简单的2D-6D位姿估计:Gen6D算法复现 (pytorch 1.12.1 + cu113)
人工智能·pytorch·算法
whaosoft-1431 小时前
51c~Pytorch~合集4
人工智能
爱喝热水的呀哈喽1 小时前
pytorch模型的保存失敗しましたが、
人工智能·pytorch·python
viperrrrrrrrrr71 小时前
大数据学习(32)-spark基础总结
大数据·学习·spark
pzx_0012 小时前
【深度学习】通俗理解偏差(Bias)与方差(Variance)
人工智能·python·深度学习·算法·机器学习·集成学习
power-辰南2 小时前
Transformer入门教程全解析(一)
人工智能·深度学习·transformer