前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Elasticsearch中评估标量量化

在Elasticsearch中评估标量量化

原创
作者头像
点火三周
发布2024-05-07 09:54:58
1510
发布2024-05-07 09:54:58

在8.13版本中,我们将标量量化引入到Elasticsearch中。通过使用此功能,用户可以提供浮点向量,这些向量在内部被索引为字节向量,同时在索引中保留浮点向量以进行可选的重新评分。这意味着他们可以将索引内存需求(这是其主要成本)减少四分之一。目前,这是一个可选功能,但我们相信它比索引向量为浮点数提供了更好的权衡。在8.14版本中,我们将默认启用此功能。然而,在此之前,我们希望系统地评估其质量影响。

多语言E5-small是我们在Elasticsearch中提供的一种高质量的多语言段落嵌入模型。它有两个版本:一个跨平台版本,可以在任何硬件上运行,另一个版本针对Elastic Stack的CPU推理进行了优化(参见这里)。E5对于自动量化来说是一个挑战,因为它产生的向量角度变化小,相对于最先进的模型,其维度较低。如果我们能够通过启用int8量化来对此模型造成很小或没有损害,我们可以有信心认为它将可靠地工作。

这次实验的目的是估计使用此模型在广泛的检索任务中执行标量量化kNN搜索的效果,如此处所描述。更具体地说,我们的目标是评估从全精度索引切换到量化索引时的性能降级(如果有的话)。

方法概述

对于评估,我们依赖BEIR,对于我们考虑的每个数据集,我们都使用默认的超参数(m: 16ef_construction: 100)构建了一个全精度索引和一个int8量化索引。首先,我们试验了Elastic 在此提供的多语言E5-small模型的量化(仅权重)版本,表1呈现了nDCG@10分数(k:10num_candidates:100)的摘要:

数据集

全精度索引

Int8量化索引

绝对差值

相对差值

Arguana

0.37

0.362

-0.008

-2.16%

FiQA-2018

0.309

0.304

-0.005

-1.62%

NFCorpus

0.302

0.297

-0.005

-1.66%

Quora

0.876

0.875

-0.001

-0.11%

SCIDOCS

0.135

0.132

-0.003

-2.22%

Scifact

0.649

0.644

-0.005

-0.77%

TREC-COVID

0.683

0.672

-0.011

-1.61%

平均值

-0.005

-1.05%

表1:全精度和int8量化索引在BEIR数据集中的nDCG@10分数

总的来说,平均相对降低了1.05%。

接下来,我们考虑使用未量化版本的多语言E5-small(参见模型卡片这里)重复相同的评估过程,表2显示了相应的结果。

数据集

全精度索引

Int8量化索引

绝对差值

相对差值

Arguana

0.384

0.379

-0.005

-1.3%

Climate-FEVER

0.214

0.222

+0.008

+3.74%

FEVER

0.718

0.715

-0.003

-0.42%

FiQA-2018

0.328

0.324

-0.004

-1.22%

NFCorpus

0.31

0.306

-0.004

-1.29%

NQ

0.548

0.537

-0.011

-2.01%

Quora

0.882

0.881

-0.001

-0.11%

Robust04

0.418

0.415

-0.003

-0.72%

SCIDOCS

0.134

0.132

-0.003

-1.49%

Scifact

0.67

0.666

-0.004

-0.6%

TREC-COVID

0.709

0.693

-0.016

-2.26%

平均值

-0.004

-0.83%

表2:在一系列BEIR数据集上的多语言E5-small的nDCG@10分数

再次,我们观察到性能的轻微相对下降,为0.83%。最后,我们对多语言E5-base进行了相同的操作,性能下降更小(0.59%)

但这并不是全部:量化的HNSW索引的效率提高和索引中仍然保留原始浮点向量的事实,使我们可以通过重新评分恢复大部分丢失的性能。更具体地说,我们可以在量化索引中通过近似kNN搜索检索更大的候选者池,这非常快,然后在原始浮点向量上计算相似性函数并相应地重新评分。

作为概念的证明,我们考虑NQ数据集,该数据集在多语言E5-small中表现出较大的性能下降(2.01%)。通过设置k=15num_candidates=100window_size=10(因为我们对nDCG@10感兴趣),我们得到了一个改进的分数0.539,恢复了大约20%的性能。如果我们进一步将num_candidates参数增加到200,那么我们得到的分数将匹配全精度索引的性能,但响应时间更快。在Arguana上使用相同的设置,可以将分数从0.379增加到0.382,从而将相对性能下降从1.3%限制到只有0.52%

结论

我们评估的结果表明,标量量化可以用来减少Elasticsearch中向量嵌入的内存占用,而不会在检索性能上造成重大损失。对于较小的向量(多语言E5-small产生的向量大小等于384,而E5-base产生768维的嵌入),性能下降更明显,但可以通过重新评分来缓解。我们对标量量化将对大多数用户有益,我们计划在8.14版本中将其设为默认设置。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法概述
  • 结论
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档