论文阅读_OpenAI嵌入+Lucene

英文名称: Vector Search with OpenAI Embeddings: Lucene Is All You Need
中文名称: 使用OpenAI嵌入进行向量搜索:只需Lucene
链接: http://arxiv.org/abs/2308.14963v1
作者: Jimmy Lin, Ronak Pradeep, Tommaso Teofili, Jasper Xian
机构: 滑铁卢大学戴维·切里顿计算机科学学院, 罗马第三大学工程系
日期: 2023-08-29

读后感

嵌入领域新旧技术的最大不同点在于存储的是稠密向量(深度学习)还是稀疏向量(统计),对于稠密和稀疏的搜索和索引技术完全不同,所以继深度学习模型成为热点后,向量数据库也成为热点。作者认为,针对 Lucene 框架做少量调整,使其支持稠密向量,并不失为一种简单经济的解决方案。

作者挑战了主流观点,通过实验证明,对于很多应用,使用 Lucene+HNSW 可以在不大改动 Lucene 的情况下,完美支持当前基于大模型的文本编码,无需附加的向量数据库。与当前主流方法相比,这种方法成本和复杂度更低。简单来说,如果数据量不多且速度要求不高,Lucene 可以支持向量存储和搜索。

后来,Elasticsearch 也对向量搜索做了进一步优化;Postgres 提供了开源的向量相似性搜索。我们可以在不同情境不同预算下使用不同方案。

摘要

目标: 挑战当前普遍认为需要专门的向量存储才能利用深度神经网络进行搜索的观点。

方法: 使用 Lucene 和 OpenAI 嵌入,在流行的 MS MARCO 段落排序测试集上提供了一个可重复、端到端的向量搜索演示。

结果: 在标准双编码器架构中,Lucene 的层次可导航小世界网络(HNSW)索引足以提供向量搜索功能,从而不需要引入专门的向量存储。

1 引言

在大模型开始流行之后,主流观点认为,为了管理大量密集向量,企业需要专用的“向量存储”或“向量数据库”作为其“AI 堆栈”的一部分。

然而,目前许多生产基础设施由以开源 Lucene 搜索库为中心的广泛生态系统主导。其中最引人注目的是 Elasticsearch、OpenSearch 和 Solr 等平台。作者认为,在很多应用场景中没有必要单独使用专用向量存储。

Lucene 的最新主要版本(第 9 版,从 2021 年 12 月开始)包括 HNSW 索引和矢量搜索。嵌入可以通过简单的 API 调用来计算,索引和搜索密集向量在概念上与使用词袋模型索引和搜索文本相同。

2 从架构到实现

双编码器架构(见图 1)的核心思想是将查询和段落编码为密集向量(通常称为“嵌入”),使相关的查询 - 段落对能获得高分。这些高分是通过计算其嵌入的点积得出的。系统的任务是在给定查询嵌入的情况下,快速检索具有最大点积的 top- 段落嵌入。

用于生成向量表示的“编码器”使用 Transformer 实现。这些 Transformer 通常利用大量相关的 query–passage 对数据集,以监督方式进行微调。在比较密集向量时,这种搜索方法不同于传统的词袋稀疏表示。

在向量空间中,最近邻搜索是基于分层可导航小世界网络(HNSW)的索引。Faiss 库提供了一种流行的 HNSW 索引实现。

由于结合密集和稀疏表示的混合方法已被证明比单独使用任何一种方法更有效,许多现代系统将单独的检索组件组合在一起以实现混合检索。这需要同时管理稀疏和密集检索模型。Lucene 的最新主要版本(第 9 版:2021 年 12 月)包括 HNSW 索引和搜索功能,这些功能在过去几年中稳步改进。这意味着 Lucene 和专用矢量存储之间的功能差异主要在于性能,而不是必备功能的可用性。Lucene 也可以对密集向量进行索引。

文中演示进一步展示了通过简单地将现成的组件“插入在一起”即可轻松实现最先进的矢量搜索。文本编码由 OpenAI API 实现,检索由 Lucene 实现。向量索引和搜索方式类似于使用词袋模型(如 BM25)进行索引和检索。

(小编注:TF-IDF 和 BM25 将每个文档表示为一个高维向量,其维度通常是词表的长度,其向量中的每个值都是浮点数。而 Embedding 编码后更稠密,同时可以不依赖库中的数据,产生较为通用的编码。)

3 实验

使用 MS MARCO 段落排名测试集合。该语料库包含从网络上提取的约 880 万个段落,采用标准开发查询以及 TREC 2019 和 TREC 2020 深度学习赛道中的查询。

我们利用 OpenAI 的 ada2 模型生成查询和段落嵌入,输出嵌入大小为 1536 个维度。所有段落被截断为 512 个标记,总计约有 6.6 亿个 token。

所有检索实验均使用 Anserini IR 工具包进行,直接访问底层 Lucene 功能,实验基于 Lucene 9.5.0。

测试环境为一台装有两个英特尔至强 Platinum 8160 处理器(每个 33M 缓存,2.10 GHz,24 核)和 1 TB RAM 的服务器。服务器运行 Ubuntu 18.04 操作系统,并使用 ZFS 文件系统。使用 32 位浮点数表示,原始的 1536 维向量在磁盘上占用约 54 GB。以 JSON 文本表示,压缩后的文本文件占用了 109 GB。在向量搜索方面,使用了 16 个线程,能够达到每秒 9.8 个查询(QPS),每次查询获取 1000 个结果。

4 相关知识

4.1 Anserini IR 工具包

Anserini 是一个用于信息检索(IR,Information Retrieval)的开源工具包。它提供了一系列常见的信息检索功能,包括索引构建、查询处理、评估和实验管理等。Anserini 的底层实现基于 Apache Lucene,这是一个成熟的 Java 库,专门用于全文检索和信息检索任务。

4.2 HNSW

HNSW(Hierarchical Navigable Small World)算法是一种用于近似最近邻搜索(Approximate Nearest Neighbor Search, ANN)的高效算法。它通过构建多层次的小世界图来实现高效的近似最近邻搜索。

HNSW 算法基于“小世界”图的概念,即在图中,节点之间的连接结构既有局部性(近邻连接),又有全局性(长距离连接)。这种结构有助于快速搜索。算法采用多层次的结构来组织数据。每一层都是一个小世界图。较低层次的图用于快速定位候选集,而较高层次的图用于精细化搜索。每个节点都保存着指向其他节点的链接,这些链接被用来加速查询过程,使得算法能够高效地在大量数据中查找最接近给定查询点的数据点。

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

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

相关文章

锁机制 -- 概述篇

锁机制 1、概述 ​  加锁是为了解决并发场景下,多个线程对同一资源同时进行操作,而导致同一线程多次操作出现结果不唯一的情况(一次操作包含多条指令)。结果不唯一发生的原因在于指令的错乱,前提条件是多线程环境及…

k8s_如何查看container拉取的镜像

当 Kubernetes (k8s) 使用 containerd 作为容器运行时时,可以通过以下方法查看 Kubernetes 集群中拉取的镜像。可以直接在每个节点上使用 containerd 的命令行工具 ctr 来查看已经拉取的镜像。 方法一:使用 ctr 查看节点上的镜像 确保 containerd 已安装并运行: 在 Kuberne…

全面解析:微软Edge浏览器支持的PDF文件操作功能

微软Edge浏览器,作为Windows 10及更高版本操作系统的默认浏览器,不仅提供了快速、安全的网页浏览体验,还内置了对PDF文件的多种操作功能。本文将详细探讨Edge浏览器支持的PDF文件操作,帮助用户更有效地利用这一功能强大的浏览器。…

双指针算法第一弹(移动零 复写零 快乐数)

目录 前言 1. 移动零 (1)题目及示例 (2)一般思路 (3)双指针解法 2. 复写零 (1)题目及示例 (2)一般解法 (3)双指针解法 3. 快…

61.ThreadLocal认识和使用

ThreadLocal介绍 ThreadLocal类用来提供给线程内部的局部变量。 这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。 ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。 ThreadLocal的作用…

MySQL之索引创建原则

索引创建原则有哪些? 1.针对数据量较大,且查询比较频繁的表建立索引。(单表超过10w数据) 2.针对常作为查询条件(where)、排序(order by)、分组(group by)操…

Hadoop 安装与伪分布的搭建

目录 1 SSH免密登录 1.1 修改主机名称 1.2 修改hosts文件 1.3 创建hadoop用户 1.4 生成密钥对免密登录 2 搭建hadoop环境与jdk环境 2.1 将下载好的压缩包进行解压 2.2 编写hadoop环境变量脚本文件 2.3 修改hadoop配置文件,指定jdk路径 2.4 查看环境是否搭建完成 3 …

Clickhouse 常见操作

数据查询 从json array string中解析字段 json array string 为json.dumps(array(dict)) select JSONExtractString(row,"Date") as Date from( select arrayJoin(JSONExtractArrayRaw(Remarks)) as row from table x )JSONExtractArrayRaw: 将JsonS…

python中的相对路径

在Python中,相对路径是相对于当前工作目录(由os.getcwd()返回)的路径。当你想要引用当前目录、父目录或子目录中的文件或目录时,你会使用相对路径。 以下是一些常见的相对路径写法: 引用当前目录下的文件或目录&#…

C# Modbus设备信息加载的实现方式(2)

GlobalProperties是一个全局的数据&#xff0c;类似CoreData&#xff1a; public class GlobalProperties{public static Device Device { set; get; }public static Action<int, string> AddLog;public static SysAdmin CurrentAdmin;public static ModbusTCP Modbus { …

基于Spring Boot的药房信息管理系统

1 项目介绍 1.1 研究的背景及意义 随着社会的飞速进步和药房行业竞争的白热化&#xff0c;传统的手工管理模式已难以适应药房信息管理的现代化需求。在计算机科学技术日臻完善的背景下&#xff0c;药房信息管理者们日益认识到运用计算机技术进行信息管理的迫切性和重要性。计…

【Git】LFS

什么是lfs Git 是分布式 版本控制系统&#xff0c;这意味着在克隆过程中会将仓库的整个历史记录传输到客户端。对于包涵大文件&#xff08;尤其是经常被修改的大文件&#xff09;的项目&#xff0c;初始克隆需要大量时间&#xff0c;因为客户端会下载每个文件的每个版本**。Gi…

快手正式推出Vision Pro版本,引领虚拟现实社交新潮流

6月28日&#xff0c;快手正式推出其专为Apple Vision Pro打造的版本——快手vp版app&#xff0c;成为国内首批登陆Apple Vision Pro的短视频平台。 借助先进的虚拟现实技术&#xff0c;用户可以在快手上体验更真实生动的视频内容&#xff0c;无论是观看趣味短视频内容&#xf…

产品是应该有生命力的

产品是应该有生命力的 在日新月异的商业环境中&#xff0c;产品被寄予厚望&#xff0c;不仅仅满足基本功能需求&#xff0c;而是要能够自我革新&#xff0c;适应市场和技术的快速变化&#xff0c;以及持续吸引并留住用户。 这种生命力体现在产品的迭代升级能力、对用户需求的精…

[鹏城杯 2022]babybit

发现一个压缩包提取出来提取出来两个压缩包里面是注册表使用MiTeC Windows Registry Recovery 恢复注册表 flag在ROOT\ControlSet001\Control\FVEStats里的OsvEncryptInit和OsvEncryptComplete中 NSSCTF{2022/6/13_15:17:39_2022/6/13_15:23:46}

互联网信任危机:Perplexity搜索引擎如何破坏内容创作者的权益

前段时间&#xff0c;Perplexity搜索引擎还是一颗冉冉升起的明日之星&#xff0c;手握巨额投资&#xff0c;有很美好的未来前景&#xff0c;这时&#xff0c;如果不出意外的话&#xff0c;要出意外。 喜好儿网 Perplexity这家公司&#xff0c;它正试图通过创建一个新型的“答…

LoRaWAN网关源码分析(基础概念篇)

目录 一、简介 1、lora_gateway 2、packet_forwarder 二、目录结构 1、lora_gateway 2、packet_forwarder 一、简介 LoRaWAN网关的实现主要依赖两个源代码&#xff1a;lora_gateway和packet_forwarder。接下来&#xff0c;我们将从分析源代码入手&#xff0c;移植LoRaWAN源…

LeetCode:经典题之21、24 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

深入探讨目标检测算法:原理、方法与应用

目录 1. 目标检测的基本原理 1.1 分类与定位 1.2 评价指标 2. 常见目标检测算法 2.1 传统方法 2.2 基于深度学习的方法 2.2.1 区域提议方法 2.2.2 单阶段检测方法 3. 目标检测算法的发展历程 3.1 早期阶段 3.2 深度学习时代 4. 目标检测的实际应用 4.1 自动驾驶 …

网页背景全屏就这?分享 1 段优质 CSS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 700 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 CSS 代码片段&#xff0c;使用 CSS 设置网页全屏背景图片&#xff0c;很简单。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看…