Elasticsearch:将最大内积引入 Lucene

作者:Benjamin Trent

目前,Lucene 限制 dot_product (点积) 只能在标准化向量上使用。 归一化迫使所有向量幅度等于一。 虽然在许多情况下这是可以接受的,但它可能会导致某些数据集的相关性问题。 一个典型的例子是 Cohere 构建的嵌入(embeddings)。 它们的向量使用幅度来提供更多相关信息。

那么,为什么不允许点积中存在非归一化向量,从而实现最大内积呢? 有什么大不了的?

负值和 Lucene 优化

Lucene要求分数非负,因此在析取 (disjunctive query) 查询中多匹配一个子句只能使分数更高,而不是更低。 这实际上对于动态修剪优化(例如 block-max WAND)非常重要,如果某些子句可能产生负分数,则其效率会大大降低。 此要求如何影响非标准化向量?

在归一化情况下,所有向量都在单位球面上。 这允许通过简单的缩放来处理负分数。

图 1:二维单位球体(例如单位圆)中的两个相反的二维向量。 在这里计算点积时,最糟糕的情况是 -1 = [1, 0] * [-1, 0]。 Lucene 通过向结果加 1 来解决这一问题。

当向量保持其大小时,可能值的范围是未知的。

图 2:计算这些向量的点积时 [2, 2] \* [-5, -5] = -20

为了允许 Lucene 将 blockMax WAND 与非标准化向量结合使用,我们必须缩放分数。 这是一个相当简单的解决方案。 Lucene 将使用简单的分段函数缩放非标准化向量:

if (dotProduct < 0) {return 1 / (1 + -1 * dotProduct);
}
return dotProduct + 1;

现在,所有负分数都在 0 -1 之间,所有正分数都在 1 以上。这仍然可以确保较高的值意味着更好的匹配并消除负分数。 很简单,但这不是最后的障碍。

三角形问题

最大内积不遵循与简单欧几里得空间相同的规则。 三角不等式的简单假设知识被抛弃。 不直观的是,向量不再最接近其自身。 这可能会令人不安。 Lucene 的向量底层索引结构是分层可导航小世界 (HNSW)。 这是基于图的算法,它可能依赖于欧几里得空间假设。 或者在非欧几里得空间中探索图会太慢吗?

一些研究表明,快速搜索需要转换到欧几里得空间。 其他人则经历了更新向量存储以强制转换为欧几里得空间的麻烦。

这导致我们停下来深入挖掘一些数据。 关键问题是:HNSW 是否通过最大内积搜索提供良好的召回率和延迟? 虽然 HNSW 最初的论文和其他已发表的研究表明确实如此,但我们需要进行尽职调查。

我们进行的实验很简单。 所有的实验都是在真实数据集或稍微修改的真实数据集上进行的。 这对于基准测试至关重要,因为现代神经网络创建符合特定特征的向量(请参阅本文第 7.8 节中的讨论)。 我们测量了非标准化向量的延迟(以毫秒为单位)与召回率。 将数字与具有相同测量值但采用欧几里德空间变换的数字进行比较。 在每种情况下,向量都被索引到 Lucene 的 HNSW 实现中,并且我们测量了 1000 次查询迭代。 每个数据集考虑了三种单独的情况:按大小顺序插入的数据(从小到大)、按随机顺序插入的数据以及按相反顺序插入的数据(从大到小)。

以下是 Cohere 真实数据集的一些结果:

图 3:以下是嵌入维基百科文章的 Cohere 多语言模型的结果。 可在 HuggingFace 上找到。 前 10 万份文档已建立索引并进行了测试。

图 4:这是 Cohere 在维基百科上的英语和日语嵌入的混合。 这两个数据集都可以在 HuggingFace 上找到。

我们还针对一些合成数据集进行了测试,以确保我们的严谨性。 我们使用 e5-small-v2 创建了一个数据集,并通过不同的统计分布缩放了向量的大小。 为了简洁起见,我将仅显示两个分布。

图 5: 幅度  Pareto distribution 。 pareto distribution 具有“肥尾”,这意味着分布的一部分的幅度比其他部分大得多。

图 6:幅度的伽马分布。 这种分布可能具有很高的方差,并使其在我们的实验中独一无二。

在我们所有的实验中,唯一需要进行转换的是使用伽玛分布创建的合成数据集。 即使这样,向量也必须以相反的顺序插入,首先是最大幅度,以证明变换的合理性。 这些都是例外情况。

如果你想了解所有实验以及整个过程中的所有错误和改进,请参阅 Lucene Github 问题,其中包含所有详细信息(以及过程中的错误)。 这是一个开放式研究和开发的项目!

结论

这是一个相当长的旅程,需要进行多次调查才能确保 Lucene 能够支持最大内积。 我们相信数据不言自明。 无需进行重大转换或对 Lucene 进行重大更改。 所有这些工作将很快解锁 Elasticsearch 的最大内积支持,并允许 Cohere 提供的模型成为 Elastic Stack 中的一等公民。

注:最大内积已经在 8.11 中进行了支持!

原文:Bringing Maximum-Inner-Product into Lucene — Elastic Search Labs

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

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

相关文章

Android:Google三方库之Firebase集成详细步骤(一)

前提条件 安装最新版本的 Android Studio&#xff0c;或更新为最新版本。使用您的 Google 账号登录 Firebase请注意&#xff0c;依赖于 Google Play 服务的 Firebase SDK 要求设备或模拟器上必须安装 Google Play 服务 将Firebase添加到应用&#xff1a; 方式&#xff1a;使用…

普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会

Hi~ 你有一份邀约请查收 11月22日—26日绵阳科博会 普乐蛙展位号&#xff1a;B馆科技体验区(1) 邀你体验趣味VR科普&#xff0c;探索科技新发展 第十一届中国(绵阳)科技城国际科技博览会 绵阳科博会自2013年创办以来&#xff0c;已连续成功举办十届&#xff0c;已有近7000家单位…

财报解读:将低价作为“唯一性基础武器”的京东,效果在慢慢显现

近日&#xff0c;京东集团公布了2023年第三季度财报。这是自创始人刘强东去年11月强势回归京东一线、主导一系列战略调整和人事组织改革近一年后的一份“成绩单”。 财报显示&#xff0c;第三季度京东实现收入2477亿元&#xff0c;同比增长1.7%&#xff1b;归属于公司普通股股…

unityplayer.dll如何安装?unityplayer.dll缺失的解决方法

Unityplayer.dll是Unity引擎所需的一个重要动态链接库&#xff08;DLL&#xff09;文件&#xff0c;负责在运行Unity创建的游戏或应用程序时处理相关的软件逻辑。如果此文件意外丢失&#xff0c;可能会导致错误提示&#xff0c;甚至阻止程序的正常运行。因此&#xff0c;对于许…

Linux常用操作 Vim一般使用 SSH介绍 SSH密钥登录

目录 1. 常用命令 2. vim一般使用 3. SSH介绍 4. ssh密钥登录 1. 常用命令 1&#xff09;# 与 $ 提示的区别 # 表示用户有root权限&#xff0c;一般的以root用户登录提示符为#&#xff0c; $提示符表示用户为普通用户 2&#xff09;ifconfig 查看ip地址 eno1: 代表由主板…

连线鑫云:企业级存储设备制造商!

我们在今年的双11专场直播中&#xff0c;有幸邀请到了鑫云存储的嘉宾与我们连线&#xff0c;为大家作了一场精彩的分享。 这里&#xff0c;首先感谢鑫云存储对水经注的大力支持&#xff01; 现在&#xff0c;我们将嘉宾分享的内容进行简单整理&#xff0c;并以图文的方式与大家…

【擎标】CCID信息系统服务商交付能力等级认证标准

为顺应信息技术服务业发展趋势及市场需求&#xff0c;维护市场秩序&#xff0c;加强行业自律&#xff0c;促进信息系统服务商交付能力的不断提高&#xff0c;增强信息系统服务商创新能力和国际竞争力&#xff0c;支撑信息系统服务商转型提升&#xff0c;中国软件行业协会、企业…

③【List】Redis常用数据类型: List [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis List ③Redis List 操作命令汇总1. lpus…

Influence Matters 成立印度尼西亚办公室,构建北亚及东南亚服务中心

2023 年 11 月 22 日——过去八年&#xff0c;Influence Matters致力于通过高效的公关传播服务&#xff0c;为跨境B2B 科技企业耕耘中国市场提供业务支持。我们已与近百家企业、组织和政府合作&#xff0c;以远超预期的公关传播方案和执行力&#xff0c;为客户与其目标决策者和…

详解自动化之单元测试工具Junit

目录 1.注解 1.1 Test 1.2 BeforeEach 1.3 BeforeAll 1.4 AfterEach 1.5 AfterAll 2. 用例的执行顺序 通过 order() 注解来排序 3. 参数化 3.1 单参数 3.2 多参数 3.3 多参数(从第三方csv文件读取数据源) 3.4 动态参数ParameterizedTest MethodSource() 4. 测试…

二、Gitee使用方法

目录 &#xff08;1&#xff09;首先可以注册一个 gitee 账号&#xff0c;注册很方便&#xff0c;自行注册 &#xff08;2&#xff09;登陆后进入你的主页 &#xff08;3&#xff09;创建仓库 &#xff08;3&#xff09;克隆 &#xff08;4&#xff09;代码提交 &#xf…

【机器学习】贝叶斯分类器

贝叶斯分类器是一种概率模型&#xff0c;利用贝叶斯公式来解决分类问题。假设样本的特征向量服从一定的概率分布&#xff0c;我们就可以计算出该特征向量属于各个类的条件概率。分类结果是条件概率最大的分类结果。如果假设特征向量的每个分量彼此独立&#xff0c;则它是朴素贝…