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

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

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

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 …

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

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

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

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

产品是应该有生命力的

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

[鹏城杯 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搜索引擎如何破坏内容创作者的权益

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

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

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

Android Focused Window的更新

启动App时更新inputInfo/请求焦点窗口流程: App主线程调ViewRootImpl.java的relayoutWindow();然后调用到Wms的relayoutWindow(),窗口布局流程。焦点窗口的更新,通过WMS#updateFocusedWindowLocked()方法开始,下面从这…

MIX OTP——监督树和应用

在上一章关于 GenServer 的内容中,我们实现了 KV.Registry 来管理存储容器。在某个时候,我们开始监控存储容器,这样每当 KV.Bucket 崩溃时,我们就能采取行动。虽然变化相对较小,但它提出了一个 Elixir 开发人员经常问的…

独家原创 | Matlab实现CNN-Transformer多变量时间序列预测

SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-Transformer多变量时间序列预测; 2.运行环境为Matlab2023b…

【JavaScript】JavaScript简介

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 JavaScript入门(1)————JavaScript简介开篇说明一、什么是JavaScript二、JavaScript的使用2.1 开发工具的选择…

fiddler抓包工具

概念 概念: Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。 http:不加密,端口为80 https:加密,端口为443 原理: 其实就在访问服务器时&#xff0…

如何在写代码中找到乐趣

平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。 如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。 参考资料: 实战!工作中常用到…

[方法] Unity 3D模型与骨骼动画

1. 在软件中导出3D模型 1.1 3dsmax 2014 1.1.1 TGA转PNG 3dsmax的贴图格式为tga,我们需要在在线格式转换中将其转换为Unity可识别的png格式。 1.1.2 模型导出 导出文件格式为fbx。在导出设置中,要勾选三角算法,取消勾选摄像机和灯光&#…

三秒4张图!让 Stable Diffusion 出图速度暴增的新一代生成模型LCM!

前言 大家好,这里是和你们一起探索 AI绘画月月~ 最近一种新的图像生成形式逐渐兴起,即生成的图像会随输入的文字或笔画动作迅速变化,这让图像生成有了更多灵活探索和准确控制的空间。这种「实时反馈」的感觉源于模型能在几秒钟内&#xff0…

fiddler 返回Raw乱码

有时会发现自己发送的请求后,返回结果Raw里面是乱码,可以勾选Decode并重新发送请求就解决了 这个时候将Decode勾选一下 此时就好了

【C++ | 委托构造函数】委托构造函数 详解 及 例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

模版总结小全

BFS 最短步数问题 #include<iostream> #include<queue> #include<cstring> using namespace std;const int N 50; char g[N][N],d[N][N]; int dx[] {-1,0,1,0}; int dy[] {0,1,0,-1}; int n,m;int bfs(int x,int y){queue<pair<int,int> > q…