评估 Elasticsearch 中的标量量化

2024-05-05 06:52

本文主要是介绍评估 Elasticsearch 中的标量量化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:来自 Elastic Thanos Papaoikonomou, Thomas Veasey

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

多语言 E5-small 是我们在 Elasticsearch 中提供的一个高质量小型多语言段落嵌入模型。它有两个版本:一个跨平台版本,可以在任何硬件上运行,还有一个为 Elastic Stack 中的 CPU 推理优化的版本(参见此处)。E5 代表了自动量化的一个挑战性案例,因为它产生的向量角度变化小且相对于最新技术模型维度较低。如果我们能够在为这个模型启用 int8 量化时实现几乎没有损害,我们就可以有信心它将可靠工作。

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

方法论概述

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

表 1:精选 BEIR 数据集的全精度和 int8 量化指数的 nDCG@10 分数
DatasetFull precisionInt8 quantizationAbsolute differenceRelative difference
Arguana0.370.362-0.008-2.16%
FiQA-20180.3090.304-0.005-1.62%
NFCorpus0.3020.297-0.005-1.66%
Quora0.8760.875-0.001-0.11%
SCIDOCS0.1350.132-0.003-2.22%
Scifact0.6490.644-0.005-0.77%
TREC-COVID0.6830.672-0.011-1.61%
Average-0.005-1.05%

总体而言,平均而言,似乎有轻微的相对下降,约为 1.05%。

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

表 2:在精选的 BEIR 数据集上多语言-E5-small 的 nDCG@10 分数
DatasetFull precisionInt8 quantizationAbsolute differenceRelative difference
Arguana0.3840.379-0.005-1.3%
Climate-FEVER0.2140.222+0.008+3.74%
FEVER0.7180.715-0.003-0.42%
FiQA-20180.3280.324-0.004-1.22%
NFCorpus0.310.306-0.004-1.29%
NQ0.5480.537-0.011-2.01%
Quora0.8820.881-0.001-0.11%
Robust040.4180.415-0.003-0.72%
SCIDOCS0.1340.132-0.003-1.49%
Scifact0.670.666-0.004-0.6%
TREC-COVID0.7090.693-0.016-2.26%
Average-0.004-0.83%

再次观察到性能略微相对下降,平均下降为 0.83%。最后,我们对多语言 E5-base 重复了相同的实验,性能下降甚至更小(0.59%)。

但这还不是全部:量化 HNSW 索引的增加效率以及原始浮点向量仍然保留在索引中的事实,使我们能够通过重新评分来恢复部分性能的损失。更具体地说,我们可以通过在量化索引中进行近似 kNN 搜索来检索更大的候选池,这是相当快速的,然后根据原始浮点向量计算相似性函数并进行相应的重新评分。

作为概念验证,我们考虑了 NQ 数据集,其在多语言 E5-small 上表现出较大的性能下降(2.01%)。通过设置 k=15、num_candidates=100 和 window_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 版本中使其成为默认设置。

准备在你的应用中构建 RAG 吗?想尝试使用向量数据库的不同 LLMs 吗? 查看我们在 Github 上为 LangChain、Cohere 等提供的示例笔记本,同时加入即将开始的 Elasticsearch 工程师培训!

原文:Evaluating scalar quantization in Elasticsearch — Elastic Search Labs

这篇关于评估 Elasticsearch 中的标量量化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961047

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

【docker】基于docker-compose 安装elasticsearch + kibana + ik分词器(8.10.4版本)

记录下,使用 docker-compose 安装 Elasticsearch 和 Kibana,并配置 IK 分词器,你可以按照以下步骤进行。此过程适用于 Elasticsearch 和 Kibana 8.10.4 版本。 安装 首先,在你的工作目录下创建一个 docker-compose.yml 文件,用于配置 Elasticsearch 和 Kibana 的服务。 version:

ElasticSearch底层原理简析

1.ElasticSearch简述 ElastiaSearch(以下简称ES)是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,支持RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ES设计用于云计算中,能够进行实时搜索,支持PB级搜索,具有稳定,可靠,快速,安装使用方便等

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":