引入嵌入和向量搜索时的三个错误

将非结构化数据表示为嵌入向量以及使用向量搜索进行基于嵌入的检索 (embedding-based retrieval - EBR) 比以往任何时候都更加流行。 嵌入到底是什么? Roy Keyes 在《嵌入的最短定义?》中对此进行了很好的解释。

嵌入是学习的转换,使数据更有用 - Embeddings are learned transformations to make data more useful

在学术界,这个过程被称为表征学习 (representation learning),几十年来一直是一个研究领域。 通过将数据转换为向量(计算机原生语言),我们可以使数据更有用。 以文本 BERT 为例。 Transformers 的双向编码器表示 (bidirectional encoder represenations from transformers - BERT)。

这种表示的有用程度取决于我们如何学习这种转换以及学习到的表示数据的方法如何推广到新数据。 这就是我们进行机器学习的方式。 获取一些数据,从中学习一些东西,然后将所学到的知识应用到新数据中。

那么什么是新的呢? 为什么会产生兴趣? 答案是更好的模型架构(例如 Transformer 架构)和自监督表示学习。 再加上一些围绕大型语言模型 (LLMs)(例如 chatGPT)的混乱,

关于自我监督学习。 使用巧妙的目标,我们可以使用大量数据训练模型,而无需人工监督(标记)。 然后,一旦完成,我们就可以针对任务微调模型,其中微调所需的标记数据比从头开始要少。

这种类型的学习管道称为迁移学习。 学习滑雪板也可以转移到滑板、风帆冲浪、冲浪和其他有趣的活动。

将任何数据转换为有用的表示

为了缩短这篇博文,让我们专门关注文本模型和 BERT 模型。 我们如何使用基于 Transformer 的模型将数据转换为有用的嵌入表示?

简单的 BERT 模型。 由于计算复杂度呈二次方,输入长度限制为 512 个单词(技术上为单词片段)。

BERT 是一种深度神经网络模型,具有权重、层等,我们将其复杂性隐藏在盒子内。 如果我们从 Huggingface 中提取模型,则模型权重是通过使用掩码语言模型目标进行预训练来分配的。

我们可以获取一些文本并将该文本标记为固定词汇表以获得一组数字 ID。 自由文本和硬编码标识符之间的映射。 词汇量大小取决于语言,但对于英语的普通 BERT 模型来说,约为 30K 单词。 未知单词(词汇表之外)被分配 UNK 并给予专门保留的标识符。 所有未知单词都分配给此标识符,并且如果 “foo” 和 “bar” 都不在词汇表中,则模型无法区分 “foo” 和 “bar”。

BERT 模型最多可以取 512 个单词(输入上下文长度限制),网络输出是 512 个维度为 N 的向量,具体取决于 bert-base 模型的类型。 普通 BERT 模型使用 768 个维度。 对于 512 个单词的输入,我们获得一个 512 x 768 浮点数的矩阵,每个输入单词一个 768 维向量。 与之前的 NLP 模型架构(如 Word2vec)不同,输出上的每个词向量表示都通过 Transformer 架构中的注意力 (attention) 机制进行上下文化。 单个单词的向量表示取决于输入中的所有其他单词

现在,我们有多个向量代表单个文本; 如果我们想用单个向量表示来表示一段 (a chunk) 文本、一段文本段落 (a paragraph) 或一个文本(a text),我们该怎么办? 一种方法是选择单个输出向量作为表示并忽略其余向量。 另一种方法是池化。 例如,平均池化会将 512 个输出向量平均为单个向量表示。

现在我们有了文本块 (chunk) 的嵌入表示,这会导致错误 1。

错误#1:使用预先训练的模型而没有针对特定任务进行微调

使用仅经过预训练的模型的直接向量表示不会为任何任务产生有用的嵌入表示。 搜索排名就是此类任务的一个例子; 详细信息请参阅如何不使用 BERT 进行搜索排名。

对自由文本查询和文档进行编码并期望两种表示形式之间的余弦相似度可以按相关性对文档进行排名是天真的,并且该方法的结果为你提供了随机排名结果。 你学到的滑雪板技能不会转移到打高尔夫球或游泳上。

错误 #2 使用域外 (out-of-domain) 微调的单向量嵌入模型

为了获得用于搜索排名的有用嵌入表示(优于随机),我们需要调整模型权重。 我们可以通过在训练模型时使用不同的目标来做到这一点。 我们可以使用带标签的示例进行训练(更新权重),例如针对大量查询样本的相关和不相关文档。 MS MARCO 是一个大型网络搜索相关性集合,具有带标签的查询和文档对,可用于训练排名模型。

这种微调创建了基于 BERT 的有用嵌入表示,并在 MS MARCO 数据集上大幅超越了没有可学习参数的传统关键字搜索方法(例如 BM25)。

问题是,当我们采用在 MS MARCO 标签上进行微调的单个向量表示模型时,它无法在文档和问题类型略有不同的不同领域中击败 BM25。

BEIR 基准是一个优秀的框架,用于评估在 MS Marco 上训练的模型的质量以及它们转移到不同领域和任务的情况。

通过使用十种不同检索模型来验证有效性,它证明了域内性能无法预测方法在零样本设置中的泛化程度。 许多方法 (9中方法) 在 MS MARCO 的域内评估中表现优于 BM25,但在 BEIR 数据集上表现不佳。

错误 3:缺乏对向量搜索权衡的理解

所以你在这里做到了并拥有有用的数据嵌入表示。 现在,你需要一种使用最近邻搜索 (nearest neighbor search),也称为 KNN,来搜索矢量数据的方法,并且你可以将令人兴奋的用例部署到生产中。

你应该问自己的第一件事是,我们是否需要引入近似最近邻搜索(approximate nearest neighbor search - ANNS)而不是精确最近邻搜索 (KNN)? 与生活的许多方面一样,这是一个权衡的问题。

在查询服务端。 即使不考虑文档端处理的复杂性,例如 CRUD 的需求、实时与批处理等。

  • 延迟服务级别协议 (SLA) — 我们需要多快? 0.001ms、1ms、10ms、100ms、一秒? 也许3秒就可以了?
  • 吞吐量——我们对查询吞吐量的期望是多少?我们可以预期的最大值是多少? 1 QPS,也许是 1M QPS,甚至是数十亿?
  • 我们的用例可以容忍的准确性影响。 当我们引入近似搜索时,与穷举搜索相比,准确性会有所损失。 根据我们选择的算法,这可能会很大。 我们可以通过使用精确搜索运行查询、比较近似输出并计算两者之间的重叠来评估这种影响。 例如,使用 k=10,我们可以测量 overlap@10,或者 k=1,测量 overlap@1。

鉴于上述情况,这归结为生产部署成本; 我们需要多少台服务器,或者我们根本不需要服务器?

让我们详细讨论精度误差容限以及为什么它依赖于用例。 如果你正在构建包含超过十亿张照片矢量的图像搜索服务,则不一定需要完美的召回。 有许多同样出色的猫照片,并且查询模型认为最相关的最佳猫可能并不那么重要。

另一方面,如果你正在构建一个使用向量搜索来确定用户是否可以访问建筑物的视网膜图像扫描应用程序,那么你最好有很好的 overlap@1。 在 ANN 算法的学术研究中,这些极端、高召回率和低召回率设置之间存在明显的区别。

详尽的搜索可能就是你所需要的

对邻居的精确搜索将暴力计算查询与所有符合条件的文档之间的距离,返回的 k 个文档是真正的最近邻居。 搜索可以是并行的、多线程的,并且在许多情况下,可以使用优化的硬件指令; 向量是机器的语言。 如果我们将向量存储在具有查询引擎过滤功能的引擎中,则搜索也可以有效地限制在子集内。

例如,暴力搜索 128 维的 1M 向量,单线程大约需要 100ms。 我们可以并行化搜索; 例如,通过使用四个线程,我们可以将其降低到 25 毫秒,直到内存带宽达到要求。 如果我们从磁盘中随机分页向量数据,速度会更慢,但仍然可以并行化。 如果我们有 10B 个向量,并且我们没有办法有效地选择执行最近邻搜索的文档子集,那么我们就会遇到成本问题。 我们仍然可以通过将搜索并行分配到多个节点来获得不错的延迟,就像 Vespa 可以做到的那样。 但由于数十亿的嵌入,租用服务器来控制延迟可能会变得昂贵。 再加上高查询吞吐量,我们就遇到了真正的成本问题。

在最新的Elastic Stack 8.10 的发布中,Elasticsearch 开始引入了并行化 kNN 向量搜索开始。

引入近似值

沿着近似向量搜索路线,我们需要一种可以对向量数据建立索引的算法,以便以资源使用和索引处理为代价,使搜索比穷举搜索成本更低。 这里也有很多权衡,比如磁盘使用和内存使用。 该算法在实时 CRUD 操作中的使用效果如何。 ANN 算法理解的来源之一是 https://github.com/erikbern/ann-benchmarks,其中在各种向量数据集上比较了不同的算法和实现。


上图是 SIFT 数据集,有 1M 128 维向量。 该图显示了 recall@10(与 overlap@10相同)与每秒查询数的关系。 基准测试是单线程的,这意味着如果算法的 QPS 为 10²,则延迟为 10 毫秒。 10³ QPS 意味着 1ms 的延迟,依此类推。 这些算法非常快。

如果我们将这些算法部署在具有多个 CPU 核心的服务器上,我们可以获得更高的 QPS。 只要不存在任何争用或锁定扩展问题,2 个核心预计将提供 2 倍的 QPS。 但并不是所有的人工神经网络算法都能给我们同样好的回忆。 向上和向右的算法在性能和准确性之间提供了最佳权衡,而左下象限则更差。 如上所示,一些算法很难达到 50% 以上的召回率。

上图中没有体现的是索引的成本以及算法是否可以支持更新和 CRUD 操作。 有些是面向批处理的,因此它们首先需要大量文档向量样本才能构建索引,而另一些则可以增量构建索引。 请注意,ann-benchmark 只能使用开源算法在同一运行时上进行重现。 一些商业和专有向量搜索供应商在召回与性能之间进行了未知的权衡。

更多学习资源:

  • 如何利用 Elastic 的向量数据库得到完美的词汇和 AI 驱动搜索

  • 改进 Elastic Stack 中的信息检索:提高搜索相关性的步骤

  • 改进 Elastic Stack 中的信息检索:对段落检索进行基准测试

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

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

相关文章

React redux更新数据的诡异特征==》彻底掌握redux更新state机制的精髓

此文章是跟随我上一篇文章《Redux Toolkit中action派发但state值不更新的原因》写的。 本来一切都搞定了,此时我突发奇想: 如果让api服务端不发送包含x-pagination的header信息,web端会不会报错。因为按照web端 redux原有的逻辑:…

ubuntu与win之间共享文件夹

ubuntu上设置共享文件夹 第一步:点击【设置】或【虚拟机弹窗下面的【设置】选项】 第二步:进入【虚拟机设置】页面,点击【选项】如下图所示 第三步:启用共享文件:点击【总是启用】第四步:添加共享文件&…

【深度学习】RNN循环神经网络和LSTM深度学习模型

1. 循环神经网络 RNN( Recurrent Neural Network) 循环神经网络的一个核心是可以把前面的序列数据用到后面的结果预测里面。怎么样实现这一点呢。RNN 结构如下图所示。 前部序列的信息经处理后,作为输入信息传递到后部序列。 数学模型&…

机器学习第十三课--主成分分析PCA

一.高维数据 除了图片、文本数据,我们在实际工作中也会面临更多高维的数据。比如在评分卡模型构建过程中,我们通常会试着衍生出很多的特征,最后就得到上千维、甚至上完维特征;在广告点击率预测应用中,拥有几个亿特征也是常见的事…

使用U3D、pico开发VR(一)——将unity的场景在设备中呈现

最近srtp项目在赶进度,自己之前是在电脑端进行的开发。但是项目是VR端,因此需要重新学习,在此记录一下自己的学习经历。 首先,如何将unity的场景在自己的眼镜中进行呈现呢? 对此,我也找了很多教程&#xff…

Ubuntu 安装Kafka

在本指南中,我们将逐步演示如何在 Ubuntu 22.04 上安装 Apache Kafka。 在大数据中,数以百万计的数据源生成了大量的数据记录流,这些数据源包括社交媒体平台、企业系统、移动应用程序和物联网设备等。如此庞大的数据带来的主要挑战有两个方面…

软件架构的演化和维护

软件架构的演化和维护 定义 定义 顶不住了,刷题去了,不搞这个了,想吐。。。

GLTF编辑器也可以转换GLB模型

1、GLB模型介绍 GLB(GLTF Binary)是一种用于表示三维模型和场景的文件格式。GLTF是"GL Transmission Format"的缩写,是一种开放的、跨平台的标准,旨在在各种3D图形应用程序和引擎之间进行交换和共享。 GLB文件是GLTF文件…

目标检测:Edge Based Oriented Object Detection

论文作者:Jianghu Shen,Xiaojun Wu 作者单位:Harbin Institute of Technology Shenzhen 论文链接:http://arxiv.org/abs/2309.08265v1 内容简介: 1)方向:遥感领域中的目标检测技术 2)应用&…

云原生Kubernetes:K8S存储卷

目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验 1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享…

编译vtk源码

vtk和opengl关系 VTK(Visualization Toolkit)和OpenGL(Open Graphics Library)都是用于图形可视化和渲染的重要工具,但它们在图形编程中的角色和关系略有不同。 OpenGL: OpenGL是一种开放的图形库和API&a…

十六,镜面IBL--预滤波环境贴图

又到了开心的公式时刻了。 先看看渲染方程 现在关注第二部分,镜面反射。 其中 这里很棘手,与输入wi和输出w0都有关系,所以,再近似 其中第一部分,就是预滤波环境贴图,形式上与前面的辐照度图很相似&#…

uni-app:实现页面效果2(canvas绘制,根据页面宽度调整元素位置)

效果 代码 <template><view><!-- 车搭配指示器-双显 --><view class"content_position"><view class"content"><view class"SN"><view class"SN_title">设备1</view><view class…

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(3,二维随机变量函数的分布)

文章目录 七、二维随机变量函数的分布7.1 二维随机变量函数分布的基本情形 ( X , Y ) (X,Y) (X,Y) 为二维离散型随机变量 ( X , Y ) (X,Y) (X,Y) 为二维连续型随机变量 X X X 为离散型变量&#xff0c; Y Y Y 为连续型变量 7.2 常见二维随机变量的函数及其分布 Z min ⁡ { X ,…

【IDEA】idea恢复pom.xml文件显示灰色并带有删除线

通过idea打开spring boot项目后&#xff0c;发现每个服务中的pom.xml文件显示灰色并带有删除线&#xff0c;下面为解决方案 问题截图 解决方案 打开file——settings——build,execution,deployment——Ignored Files&#xff0c;把pom.xml前面的复选框去掉&#xff0c;去掉之…

虹科分享 | 网络保险:有效承保网络风险解决方案

文章来源&#xff1a;虹科网络安全 点击阅读原文&#xff1a;https://mp.weixin.qq.com/s/myCFPYtVVz5TPSFQaKqvLg 网络风险似乎往往很难量化&#xff0c;这使得保险公司很难适当地承保其网络风险政策。威胁载体的数量和不断发展的威胁&#xff0c;如新型恶意软件/勒索软件&…

PSINS工具箱学习(二)姿态的表示:姿态阵、四元数、欧拉角、等效旋转矢量的概念和转换

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、基础概念1、坐标系定义1. 惯性坐标系&#xff08; i 系 &#xff09;2. 地心地固坐标系&#xff08; e 系 )3. 导航坐标系&#xff08; n 系&…

Nginx WEB访问与Linux授权约束

看到所有文件的权限都是没有的&#xff0c;即便所有的权限都没有即使nginx做了配置&#xff0c;这些都是正确的。那么在浏览器真正去访问的时候是不能访问的。 [rootjenkins html]# ls -l total 4 drwxr-xr-x 2 root root 23 Sep 16 17:43 dist ---------- 1 root root 33 Sep …

【算法练习Day7】反转字符串替换空格反转字符串中的单词左旋转字符串

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 反转字符串反转字符串 I…

十三,打印辐照度图

上节HDR环境贴图进行卷积后&#xff0c;得到的就是辐照度图&#xff0c;表示的是周围环境间接漫反射光的积分。 现在也进行下打印&#xff0c;和前面打印HDR环境贴图一样&#xff0c;只是由于辐照度图做了平均&#xff0c;失去了大量高频部分&#xff0c;因此&#xff0c;可以…