使用 Elasticsearch 作为向量数据库:深入研究 dense_vector 和 script_score

news2024/11/20 8:22:45

Elasticsearch 是一个非常强大且灵活的搜索和分析引擎。 虽然其主要用例围绕全文搜索,但它的用途广泛,足以用于各种其他功能。 其中一项引起许多开发人员和数据科学家关注的功能是使用 Elasticsearch 作为向量数据库。 随着 dense_vector 数据类型的出现以及利用 script_score 函数的能力,Elasticsearch 的功能已经扩展,可以促进向量相似性搜索。

向量搜索对于语义搜索的重要性

向量搜索彻底改变了我们理解和执行搜索操作的方式,特别是在语义搜索方面。 但在深入研究其意义之前,有必要了解句法 (syntatical) 搜索和语义 (semantic) 搜索之间的区别。

句法搜索与语义搜索

想象一下对 “apple alcoholic beverage” 进行搜索查询。 在句法搜索中,引擎将查找包含该确切短语的文档。 如果文档中的 “apple”、“alcoholic” 和 “beverage” 这些词不很接近或没有按照特定的顺序,则它可能不会排名靠前,甚至不会显示在结果中。 此方法是有限的,因为它严格依赖于查询的语法,并且可能会错过上下文相关的文档。

输入由向量搜索提供支持的语义搜索。 在这里,搜索引擎不是查看确切的短语,而是尝试理解查询背后的含义或意图。 在语义搜索领域,查询 “apple alcoholic beverage” 不仅仅会为你提供包含该确切短语的文档。 它将理解你查询的本质并获取与 “appletini”、“apple Brandy”、“apple bourbon” 等相关的文档。

为什么向量搜索对于语义搜索至关重要?

向量搜索在实现这种语义理解方面发挥着重要作用。 使用各种嵌入技术(例如 Word2Vec、BERT 或 FastText),可以将单词、短语甚至整个句子表示为高维空间中的向量。 在这个向量空间中,向量之间的 “距离” 表示语义相似度。 具有相似含义的单词或短语的向量彼此更接近。

当你搜索 “apple alcoholic beverage” 时,其向量表示可能接近于 “appletini”、“apple brandy” 或 “apple bourbon” 的向量。 然后,向量搜索获取这些语义相似的术语,从而实现对用户意图的语义理解。

嵌入模型背景下的向量空间

在较高的层次上,向量空间是一种数学结构,其中存在向量,并且可以执行加法和标量乘法等运算。 在嵌入模型和自然语言处理的背景下,向量空间用于将单词、句子甚至整个文档映射到数值向量

  1. 维度 (dimensionality):该空间中的每个维度都可以被视为数据的一个特征或特征。 对于单词或句子,这些维度可以捕获句法角色、语义含义、上下文或各种抽象语言属性。 维度越多,表示就越细致,但也需要更多的计算资源。
  2. 距离和相似度 (distance and similarity):将单词或句子转换为向量的主要原因是为了测量相似度。 在这些向量空间中,任何两个向量之间的 “距离”(通常使用余弦相似度或欧几里德距离等度量)可以指示这两个项目的相似程度。 向量越接近,它们就越相似。 例如,在训练有素的嵌入模型中,“king” 的向量减去 “man” 的向量加上 “woman” 的向量可能接近 “queen” 的向量,从而捕获关系语义。
  3. 训练和上下文 (training & context):嵌入模型(例如 Word2Vec 或 BERT)通过对大量文本数据进行训练来生成这些向量。 在此训练期间,模型学习以在向量空间中捕获上下文相似性(单词与其他单词的关系如何使用)的方式来表示单词或句子。 这就是为什么同义词或主题相关的单词最终在空间中具有彼此接近的向量。

向量搜索的机制

一旦有了一组向量(无论是单词、句子还是文档),进行向量搜索涉及:

  1. 查询转换:使用相同的嵌入模型将搜索查询转换为其向量表示。
  2. 距离计算:对于数据库中的每个项目(或子集,取决于优化),计算查询向量和项目向量之间的距离(或相似度得分)。
  3. 排名:根据项目与查询向量的距离或相似度对项目进行排名。 向量最接近查询向量的项目被认为是最相关的,并作为顶部结果返回。
3D 空间中 “kitten” 一词的向量搜索表示。

密集向量数据类型的兴起

Elasticsearch 的密集矢量数据类型旨在存储浮点值的向量。 这些向量通常用于机器学习,特别是对于在高维空间中将项目表示为向量的嵌入。 例如,来自 Word2Vec 等模型的词嵌入或来自 BERT 等模型的句子嵌入可以使用密集向量数据类型进行存储。

要存储向量,你可以定义如下映射:

{
  "properties": {
    "text-vector": {
      "type": "dense_vector",
      "dims": 512
    }
  }
}

这里,dims 表示向量的维数。

利用 script_score 的强大功能来实现向量相似度

为了执行向量相似性搜索,我们需要测量给定向量与数据库中其他向量的接近程度。 一种常见的方法是计算向量之间的点积。 Elasticsearch 中的 script_score 函数允许我们根据脚本计算文档的自定义分数。 通过使用此功能,我们可以计算查询向量与数据库中存储的向量之间的点积。

dotProduct 函数可以在 script_score 中使用,如下所示:

{
  "query": {
    "script_score": {
      "query": {
        "match_all": {}
      },
      "script": {
        "source": "dotProduct(params.queryVector, 'text-vector') + 1.0",
        "params": {
          "queryVector": [...]
        }
      }
    }
  }
}

这里,params.queryVector 是你要搜索的向量,“text-vector” 是指存储向量的字段。

为什么是“+1.0”?

精明的观察者可能会对在 dotProduct 函数之外添加 + 1.0 感到好奇。 由于 Elasticsearch 内的限制,这一添加至关重要:它无法处理负分数值。 通过添加 1.0,我们确保查询返回的所有得分值均保持为正值。

然而,重要的是要记住,这种加法可能会扭曲向量之间的相对相似性测量,特别是当点积接近于零时。 如果需要精确的相似度值,开发人员应在查询返回后手动对分数进行后处理,减去 1.0 加法以检索原始点积值。

Elasticsearch 相对于其他向量搜索库的优势

使用 Elasticsearch 作为向量数据库的不可否认的优势之一是其内置功能可以过滤特定数据子集的查询。 当你想要缩小搜索空间或当你的应用程序需要上下文感知向量搜索时,此功能非常有用。

相比之下,虽然 ChromaDB 和 Faiss 等其他专用矢量搜索库为纯向量搜索提供了无可挑剔的速度和效率,但它们缺乏 Elasticsearch 中提供的全功能查询功能。 例如,ChromaDB 确实允许查询元数据,但它仅限于字符串的精确匹配。 这种限制有时会阻碍复杂搜索场景中所需的灵活性和粒度。

将 Elasticsearch 丰富的查询环境与向量相似性搜索相结合意味着用户可以两全其美:基于矢量的精确结果,并通过使用细致入微的上下文感知过滤器对这些搜索进行分层的能力来增强。 这种合并使 Elasticsearch 成为需要深度和广度搜索功能的开发人员的一个令人信服的选择。

Elasticsearch 版本 8 的进步:值得注意的是,虽然版本 7 存在一些限制,但由原始 Elasticsearch 团队开发的最新 Elasticsearch 版本 8 已经合并了 HNSW,从而提高了其在向量搜索领域的功能。

Elasticsearch 进入向量搜索领域的旅程凸显了它的多功能性和适应性。 虽然最初并未设计为向量数据库,但其功能已通过诸如 dense_vector 数据类型和 script_score 函数等创新进行了扩展。 这些进步使 Elasticsearch 成为向量相似性搜索的可行工具,弥合了传统全文搜索与向量表示实现的语义理解的微妙领域之间的差距。Elasticsearch 的灵活性和广泛的查询功能使其在多方面的搜索场景中具有无价的价值。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排名评估指标综合指南

一、介绍 右排序是机器学习中的一个问题,其目标是以最合适的方式对最终用户的文档列表进行排序,因此最相关的文档出现在顶部。排名出现在数据科学的多个领域中,从推荐系统开始,算法建议一组要购买的商品,最后到 NLP 搜…

STM32F4X TFTLCD ST7735S使用

STM32F4X TFTLCD ST7735S使用 TFTLCD简介TFTLCD使用TFTLCD特点TFTLCD的概念TFTLCD色彩空间三原色RGB颜色RGB565RGB666RGB888 ST7735S驱动芯片ST7735S引脚定义ST7735S 4线SPI模式ST7735S显示原理ST7735S分辨率ST7735S显存结构ST7735S像素点扫描模式MCU操作ST7735S显存方法 TFTLC…

解决appium或selenium使用时driver.find_element_by_xpath中间有删除线问题

一、问题描述 Darren洋在公司电脑搭建完成appium后准备运行appium2.0版本执行脚本时发现执行脚本中的driver.find_element_by_xpath中间有删除线,说明较高版本的appium及selenium中该方法已被弃用。 二、解决办法 该问题解决办法为将driver.find_element_by_xpath()…

广东金媒人的线下交友活动有哪些吸引点呢?

广东金媒人线下交友活动吸引人的地方还是不少的,这也是举办活动的机构中,都具备的优点。 金媒人现场活动有专业的主持人,可以及时帮助大家解疑答惑,让相亲更高效。活动场地都是比较正式、开阔的,一般是西餐厅类型的地方…

网络电视机顶盒怎么样?内行揭晓网络电视机顶盒排名

网络电视机顶盒怎么样?可以说是家家户户不可或缺的部分,但很多朋友买回家发现经常死机和卡顿,究竟要如何选择才不踩坑呢?我身为业内人士给各位分享业内最新发布的网络电视机顶盒排名,跟着我一起看看哪些网络机顶盒最值…

浅谈AI大模型技术:概念、发展和应用

AI大模型技术是指使用超大规模的深度学习模型来解决各种复杂的人工智能问题,如自然语言处理、计算机视觉、多模态交互等。AI大模型技术具有强大的学习能力和泛化能力,可以在多种任务上取得优异的性能,但也面临着计算、存储、通信等方面的挑战…

layui 表格 展开

一、表格嵌套表格&#xff08;手风琴打开&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>设备上下线统计</title><script type"text/javascript" src"../../../l…

【NPM】particles.vue3 + tsparticles 实现粒子效果

在 NPM 官网搜索这两个库并安装&#xff1a; npm install element-plus --save npm i tsparticles使用提供的 vue 案例和方法&#xff1a; <template><div><vue-particlesid"tsparticles":particlesInit"particlesInit":particlesLoaded&…

【C语言刷题】#define宏实现一个整数的二进制位的奇数位和偶数位交换

本篇文章目录 1. 分析如何交换1.2 得到所有奇数位1.2 得到所有偶数位1.3 奇数位和偶数位交换后相加 2. 实现交换 1. 分析如何交换 这里为了方便演示&#xff0c;使用较小的正整数&#xff08;负数也是一样的&#xff0c;只不过要用算下补码&#xff09;&#xff0c;且不用一个…

VMware Greenplum 7 正式发布!

在当今瞬息万变的商业环境中&#xff0c;企业持续寻求创新途径以优化运营、简化决策过程&#xff0c;并构建独特的竞争优势。实现这些目标的关键在于有效利用海量数据资源。然而&#xff0c;这项任务并不轻松。数据的数量、复杂性和来源呈现出爆发性增长&#xff0c;同时从数据…

Quest 3最新规则调整,降低了积分获取难度和交互Dapp数量

自上周Quest 3启动以来&#xff0c;获得来自社区小伙伴们的支持。你们的热情和参与程度超出了我们的预期&#xff0c;仅在第一天Sui Discord服务器的活动量就惊人地增长了600&#xff05;&#xff01;我们非常高兴与大家一起踏上这个旅程。 同时&#xff0c;我们也关注了到社区…

亿发软件:现代化机械制造行业建设企业一体化管理系统的必要性

机械设备制造行业作为传统制造产业&#xff0c;面临着许多挑战&#xff1a; &#xff08;1&#xff09;项目进度管理困难&#xff0c;难以迅速掌握每个项目的物料采购进度和加工件生产进度。 &#xff08;2&#xff09;采购计划难以制定&#xff0c;各个部门之间的信息交流不…

从创业者的角度告诉你AI问答机器人网页的重要性

在数字化时代&#xff0c;创业者面临着越来越多的挑战。而AI问答机器人网页正成为创业者们的必备工具。它可以提供即时客户支持、降低运营成本&#xff0c;并实现全天候服务。接下来&#xff0c;我将从创业者的角度阐述一下&#xff0c;AI问答机器人网页为什么那么重要&#xf…

10kb的照片尺寸怎么弄?几个步骤轻松搞定!

为了图片方便在互联网上分享、传输或存储&#xff0c;我们常常会有缩小图片的需求&#xff0c;那么如何进行操作呢&#xff1f;下面分享了三种实用的方法。 方法一&#xff1a;使用嗨格式压缩大师 1、在电脑上打开安装好的“嗨格式压缩大师”&#xff0c;在首界面中点击“图片…

国际十大优质期货投资app软件最新排名(综合版)

在当今的金融市场中&#xff0c;期货投资成为了越来越多人的选择。随着科技的发展&#xff0c;许多优质的期货投资app软件也应运而生。这些软件不仅提供了便捷的投资交易工具&#xff0c;还为投资者提供了丰富的市场分析和风险管理手段。 本文将介绍国际十大优质期货投资app软…

ant中的environment属性

在ant的配置文件中&#xff0c;可以设置属性environment的值&#xff0c;设置的这个值就作为访问环境变量的前缀。例如声明了environment“env”&#xff0c;那么就可以通过env.<环境变量名称>来访问环境变量。 例如创建了一个Java工程&#xff0c;在工程目录下有一个bu…

GP09|公司赚的多,股票涨的好?

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;今天我们来分享GP09策略。前面很多期我们都不同程度用到了量价因子。这一期我们单纯的使用财务因子来构建&#xff0c;实际我们都知道单纯的财务因子中&#xff0c;已经无法get超额收…

大数据开发中的秘密武器:探索Hadoop纠删码的奇妙世界

随着大数据技术的发展&#xff0c;HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了系统的可靠性&#xff0c;HDFS通过复制来实现这种机制。但在HDFS中每一份数据都有两个副本&#xff0c;这也使得存储利用率仅为1/3&#xff0c;每TB数据都需要占用3TB的存储空间。因此&…

[Linux c/c++] futex

参考&#xff1a; Pthread locks: Mutex vs Spilocks vs Futex – Deep Code DiveLocking During multi-threading or multi-processing, the biggest challenge is selecting types of locks. When writing C code, one can manually write their own locking mechanism or c…

Photon——Fusion服务器(Failed to find entry-points:System.Exception: )

文章目录 前言解决方案:1.报警信息如下2.选择3d urp3.引入Fusion之后选择包管理,点击Burst中的Advanced Project Settings4.勾选两个预设选项5.引入官网unity.burst6.更新后报警消失总结前言 制作局域网游戏,出现未找到进入点报警 Failed to find entry-points 解决方案: …