在 ElasticON AI 大会上,Jim Farenzi 和 Benhant 向我们介绍了 Elasticsearch 和 Lucene 的最新向量搜索功能。这些功能包括:SIMD、每次搜索的多线程执行、Int8 量化和内存减少、混合搜索、最大内积和 Passage vectors。我们非常期待这些功能的实现,相信它们将进一步提高 Elasticsearch 和 Lucene 的搜索效率和性能。
大家好,我是Jim Farenzi ,今天和我的同事Benhant一起向大家介绍最新的Elastic Search和Lucene向量搜索功能。今天我们将深入探讨Elastic Search作为向量数据存储的历史,以及我们在该领域中实现的一些最新公告。
Elastic Search最初是一个搜索引擎和数据存储系统,主要用于文本搜索和半结构化和结构化数据的分析。直到现在,我们使用的数据结构称为稀疏向量,但是随着机器学习的进步和对混合数据类型的需求增加,我们引入了称为密集向量的新数据结构。与稀疏向量不同,密集向量的操作完全不同,它从文本开始,将文本翻译为浮点数表示的向量,然后进行搜索。 今天,我们将探讨我们在该领域中实施的一些最新公告,重点是密集向量方面。
为了将Elastic Search打造成一个向量数据库,一切都始于新的能力,就像在Elastic Search和UC库中的任何新功能一样,一切都始于数据结构。我们使用的数据结构称为HNSW,叫做分层可导航小世界图,它是可导航小世界图的一个扩展,最大的看点在于它的数据结构特征使得最近邻搜索更加高效,这是用于高效最近邻搜索的最先进的数据结构,我们积极参与了该数据结构的集成。像索引数据一样,我们引入了过滤功能,利用Elastic Search DSL或我们用于查询的Elastic Search Language的丰富过滤功能,同时为了将Elastic Search平台打造成一个语义搜索平台,我们还集成了在平台内直接创建内嵌向量的功能,这意味着,您可以直接在文本上搜索,而不是直接使用您的向量进行搜索。将文本翻译成密集向量是通过模型完成的,该模型可以是开源模型或内部数据库弹性开发的专有模型。我们添加的其他功能都是为了确保混合搜索的完全集成和易于使用,这意味着您可以使用非常简单的抽象来混合搜索您的密集和稀疏向量。因此,将Elastic Search打造成一个向量数据库,首先需要新的能力,然后是对其进行完全的集成和优化,以确保其充分利用了其最先进的功能,这是我们一直在努力做的事情。
近期我们加入了向量量化,向量量化通常是对每个维度中的数据进行四字节存储的,但是对于300、1500或2000维的数据,您不需要这些维度的信息量,因此,您可以将其减少,以节约成本,仅使用INT 8,或者更进一步,使用INT 4,这将使空间减少四倍,搜索准确性不会有所降低。
我们还添加了多线程搜索段,这意味着我们可以利用服务器上的多个CPU来减少延迟,最近我们还添加了对段矢量的支持,它允许我们基于其最近的段来调整文档分数,作为最近邻搜索的一部分,它非常适合场景,并且与Lucene的只读段架构完美匹配。
我们最近推出的一个产品是“最大乘积”,这是一种简单的计算,向量的大小调整了其得分,对于余弦相似度,它是一个简单的欧几里德空间计算,但对于最大乘积,它是非欧几里德的,这有效地意味着向量不再是最接近它自己的向量,距离并不像人类想象的那么简单,但是模型处理得非常好,你可以根据需要对其进行紧密控制,您可以根据时间进行学习,对用户进行正确的提升,最终为用户提供最相关的结果。我们还添加了Lucene的段矢量支持,让我们可以根据其最近的段来进行调整,以便我们可以过滤元数据并将其组合在一起,它还允许我们在主要的稀疏搜索中进行混合搜索,这是一个非常有趣和令人激动的领域。
除此之外,我们还有更多有趣的内容,但时间有限,在此只能简单列举一些,其中包括针对稀疏向量和Elsa的优化,Elsa V2和硬件加速基础设施,使推理成为堆栈中的第一类公民,以及向量搜索、索引和用户体验的超级简化。我希望这次的高级概述能激起您的一些问题,我很乐意与您们每一位交流。