Elasticsearch:圣诞晚餐 BBQ

作者:来自 Elastic Ugo_Sangiorgi

什么是 VectorFaces?

既然今天是 12 月 24 日,不如来点圣诞晚餐 BBQ?

VectorFaces 是我开发的一个人脸识别演示,用于在会议上展示 Elasticsearch 向量能力。它使用 Elasticsearch BBQ、DIskBBQ、int8 和 int4 量化技术,在 120 万个名人脸部 embedding 中进行搜索。

点击这里,通过 start-local 在单个 CPU(!)上体验在线演示,或者查看 github 仓库自行运行。

该数据集摘自 IMDB-WIKI 数据集,包含来自 IMDb 和 Wikipedia 的名人图片。我们使用 InsightFace 生成了 512 维的 embedding。

该演示并行使用了四种量化方法,在四个不同的索引中分别包含 318,526 个向量 embedding(总计 120 万个向量),让你可以直接比较它们的性能:

  • BBQ(Better Binary Quantization)------ Elasticsearch 的二进制量化方式,在保持高召回率的同时实现显著压缩
  • DiskBBQ ------ 针对磁盘存储优化的 BBQ,在重评分阶段直接从磁盘读取向量
  • int8 ------ 8 位整数量化,将每个维度从 4 字节减少到 1 字节
  • int4 ------ 4 位量化,提供最大压缩率(比 float32 小 8×)

所有量化都会带来一定的准确性损失。实际中,int8 通常几乎不需要重评分int4 往往受益于 1.5×--2× 的过采样,而 BBQ 通常需要 3×--5× 的过采样才能获得最佳召回率。每种方法在准确性、速度、内存占用和存储之间都有不同的权衡,你可以通过调整参数和过采样来验证这一点。

在 Settings 中,你可以试验这些参数以平衡速度和准确性,并选择在查询时要考虑哪些索引:

  • size:从 Elasticsearch 返回的结果数量。必须 ≤ k。
  • k:在所有 shard 上全局返回的最近邻数量。最终的 top k 结果会从所有 shard 合并而来。
  • num_candidates :在选择 top k 之前,每个 shard 收集的近似邻居数量。值越高,召回率和准确性越好,但会增加延迟。
    • 这是用于优化延迟 / 召回权衡的主要调节参数。
    • 对于量化索引,增加 num_candidates 等同于对搜索空间进行过采样,有助于恢复量化过程中损失的准确性。

在更改这些参数后,注意延迟和相关性是如何变化的。在右下角,框中会显示 top 结果以及两个最重要步骤的延迟:你的快照(摄像头或图片)的 embedding 生成,以及 Elasticsearch ------ 它会显示类似 " Elasticsearch: 50ms "。

分数范围是 0 到 1,或者 0% 到 100% 的相似度,这样更容易理解。对于这个数据集,匹配度高于 0.75 可以认为是正匹配,你可以自己测试。

另一个值得关注的点是每个索引使用了多少内存和磁盘,我们可以使用 Elasticsearch _stats API,并在 Kibana 中发出这些请求:

ini 复制代码
`

1.  GET faces-bbq_hnsw-10.15/_stats?filter_path=*.primaries.dense_vector

3.  GET faces-disk_bbq-10.15/_stats?filter_path=*.primaries.dense_vector

5.  GET faces-int8_hnsw-10.15/_stats?filter_path=*.primaries.dense_vector

7.  GET faces-int4_hnsw-10.15/_stats?filter_path=*.primaries.dense_vector

`AI写代码

更改更多参数

虽然 k 和 num_candidates 可以在查询时修改,但一些量化技术还有可以调整的特殊设置。可以在这里查看完整的设置列表,其中一些只适用于索引阶段(例如 m、ef_construction),这需要重新索引,但也有一些可以在查询阶段使用。

也许最重要的一个是 oversample。它控制使用原始 float 向量进行重评分的候选数量。当 oversample: 3.0 时,搜索会先使用量化向量在每个 shard 上检索 num_candidates,然后在返回最终 top k 结果之前,用原始向量对 top k * oversample 个候选进行重评分。值越高,准确性越好,但会带来额外的计算开销。

对于 BBQ,我们可以在索引 mapping 中修改它:

bash 复制代码
`

1.  PUT faces-bbq_hnsw-10.15/_mapping
2.  {
3.    "properties": {
4.      "face_embeddings": {
5.        "type": "dense_vector",
6.        "dims": 512,
7.        "index": true,
8.        "similarity": "cosine",
9.        "index_options": {
10.          "type": "bbq_hnsw",
11.          "m": 16,
12.          "ef_construction": 100,
13.          "rescore_vector": {
14.            "oversample": 3
15.          }
16.        }
17.      }
18.    }
19.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

对于 DiskBBQ,我们可以修改 rescore_vector.oversample,以及 default_visit_percentage,它控制搜索阶段访问的簇百分比。较低的值通过访问更少的簇来以速度换取准确性。

bash 复制代码
`

1.  PUT faces-disk_bbq-10.15/_mapping
2.  {
3.      "properties": {
4.          "face_embeddings": {
5.            "type": "dense_vector",
6.            "dims": 512,
7.            "index": true,
8.            "similarity": "cosine",
9.            "index_options": {
10.              "type": "bbq_disk",
11.              "cluster_size": 384,
12.              "default_visit_percentage": 0,
13.              "rescore_vector": {
14.                "oversample": 3
15.              }
16.            }
17.          }
18.      }
19.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

同样,在更改这些参数后,注意延迟和相关性的变化。

下一步

查看完整文档,了解如何在你自己的基础设施上索引和运行此演示的设置说明。

圣诞快乐,祝大家 BBQ 开心!

原文:discuss.elastic.co/t/dec-24th-...

相关推荐
叮咚侠4 小时前
Ubuntu 24.04.3 LTS系统中Elasticsearch 8.14.0+kibana 8.14.0集群部署搭建
大数据·ubuntu·elasticsearch·搜索引擎·集群·kibana
Elasticsearch7 小时前
Elasticsearch:2025年的企业搜索 - 是否需要进行抓取?
elasticsearch
Elasticsearch7 小时前
Elasticsearch:在 X-mas 吃一些更健康的东西
elasticsearch
毕小宝7 小时前
Elasticsearch 条件字段为 date 类型时注意事项
大数据·elasticsearch·搜索引擎
xianjixiance_7 小时前
Flutter跨平台UUID生成工具uuid_test鸿蒙化使用指南
flutter·elasticsearch·harmonyos
本旺8 小时前
【数据开发离谱场景记录】Hive + ES 复杂查询场景处理
hive·hadoop·elasticsearch
-拟墨画扇-9 小时前
Git | 简介与安装
大数据·git·elasticsearch
Elastic 中国社区官方博客9 小时前
Elasticsearch:圣诞晚餐 BBQ
大数据·人工智能·elk·elasticsearch·搜索引擎·ai·全文检索
豆豆9 小时前
哪些cms网站内容管理系统支持lucene或Elasticsearch的全站全文检索功能
elasticsearch·全文检索·cms·lucene·低代码平台·单点登录·工单系统