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

news2024/11/22 13:15:29

将非结构化数据表示为嵌入向量以及使用向量搜索进行基于嵌入的检索 (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.coloradmin.cn/o/1044679.html

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

相关文章

C语言环境搭建(Win)

一、C语言简介 1、 C语言简介 C语言是一门通用的、面向过程式的编译型语言,它的运行速度极快,仅次于汇编语言。 C语言是计算机产业的核心程序设计语言,操作系统、硬件驱动、关键组件、数据库等都离不开C语言,广泛应用于底层开发。…

10CQRS

本系列包含以下文章: DDD入门DDD概念大白话战略设计代码工程结构请求处理流程聚合根与资源库实体与值对象应用服务与领域服务领域事件CQRS(本文) 案例项目介绍 # 既然DDD是“领域”驱动,那么我们便不能抛开业务而只讲技术&…

SigFit—光-机-热耦合分析工具

美国Sigmadyne公司的SigFit软件是光机热耦合分析工具,可以将有限元分析得到的光学表面变形等结果文件通过多项式拟合或插值转化为光学分析软件的输入文件,还可实现动态响应分析、光程差分析、设计优化、主动控制/自适应控制光学系统的促动器布局及优化等…

美篇作文网教学资源源码-自带作文数据

非常漂亮的UI设计和页面排版! 自适应手机pc端 页面内容均支持自定义 可以用来做网站矩阵,或者增强你其他网站板块,或者单独运营都可以。 可以通过广告方式变现,或者引流等等 友好的seo,更容易被浏览器收录 关注青狐…

软件测试面试题 —— 整理与解析(5)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

5153. 删除

题目: 样例1: 输入 3454 输出 YES 344 样例2: 输入 10 输出 YES 0 样例3: 输入 111111 输出 NO 思路: 这道题就三个条件 关键条件是 能够被 8 整除。 而能被 8 整除的有一个重要的性质是 能够被 8 整除的重要…

MySQL - 全表分组后,获取组内排序首条数据信息

性能 不详!!! 不详!!! 不详!!! 请谨慎使用!!!环境 MySQL服务: 8.0版本;思路 使用8.0版本的新函数特性: row_number(): 序号函数; 顾名思义, 就是给每组中的元素从1开始按顺序加上序号;over(): 其中两个语法如下 partition: 按某字段分组;order by: 按某字段排序;注意: 两函数详…

【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集(IrisDataset) 2. 构建模型(FeedForward) a. __init__(初始化) b. forward(前向传播) 3.整合训练、评估…

Json文件反序列化读取

Json文件 [{"name":"清华大学","location":"北京","grade":"1"},{"name":"北京大学","location":"北京","grade":"2"} ] 安装包 代码 Program.c…

Redis应用(8)——Redis的项目应用:结合SpringBoot如何在Redis里面存对象 RedisUtil工具类的封装 遇到的问题

前言 Redis作为一款优秀的开源、高效的内存数据库,在各种项目中都能见到其身影,熟练使用Redis是程序员必备的技能之一。本系列博客结合应用场景,阐述Redis从安装到使用的,从入门到进阶的相关内容。 本篇博客介绍在Spring项目中&…

免费AI人工智能,人工智能写文章软件

在当今信息爆炸的时代,内容创作已经成为了无处不在的需求。从博客、新闻报道到广告宣传,人们对于高质量的文本内容的需求愈发迫切。然而,面对繁忙的生活节奏和不断增长的写作任务,许多创作者感到焦头烂额。 从博客作者到广告写手&…

系统集成|第十六章(笔记)

目录 第十六章 信息(文档)和配置管理16.1 文档管理16.2 配置管理 上篇:第十五章、采购管理 下篇:第十七章、变更管理 第十六章 信息(文档)和配置管理 16.1 文档管理 信息系统项目相关信息(文档…

记录一次错误---想让U-net网络输入大小不一致的图片

最近在看Deeplab系列的论文,文中提到了语义分割领域的一个难题是:将图片输入网络之前需要resize成统一大小,但是resize的话会造成细节信息的损失,所以想要网络处理任意大小的图片输入。我之前训练的U-net网络都是resize成224*224大…

基于若依ruoyi-nbcio支持flowable流程角色,同时修改流转用户为username,流程启动做大调整(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: ruoyi-nbcio: nbcio-boot的若依版本,基于ruoyi-flowable-plus和flowable6.7.2,目前处于移植功能阶段,目标是打造一个最好的若依平台上flowable流程管理系统开源版本&#xff0c…

【项目】Http服务器

【项目】Http服务器 项目简介 背景: http协议被广泛使用,从移动端,pc端浏览器,http协议无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可撼动,是能准确区分前后台的重要协议。 描述&a…

MD5 绕过第一式:弱比较绕过

文章目录 参考环境MD5韧性脆弱性md5() 隐式类型转换字符串连接数学运算布尔判断相等运算符 科学计数法科学计数法前缀 0E 与 0e PHP8 与 PHP 其他版本下字符串转化为数值的具体规则PHP8数值字符串优化 其他版本更为详细的讲解 字符串与字符串的弱比较字符串与数值的弱比较0e215…

git查看自己所在的分支

很多时候可能大家不太想切换其他工具,又不知道自己是否在自己需要操作的分支 可以直接终端执行 git branch此时 他就会在终端将所有的本地分支输出出来 并特殊标注自己所在的分支 这样我们就可以进一步去做自己想要做的操作了 当然 随着各种编辑器的发展 这个命令…

视频剪辑软件哪个好? 2023年最新功能解析

如今聊到视频的话题,大家可能都注意到近年来火爆的抖音短视频。从图片到动画,从动画到视频。时代在发展,技术在更新。到了近几年小视频也火了,其实不乏缺有视频剪辑软件的功劳。现在不少朋友在业余时间都喜欢剪辑视频来丰富自己的…

支撑电动汽车规模化,特来电智能化升级群充产品

9月26日,中国领先的充电网生态运营商特来电重磅发布智能群充4.0产品,标志着特来电群充产品体系进一步升级,充电行业迎来更高质量、更高性能的设备与系统,充电网基础设施将更好地支撑大规模电动汽车的发展。 群充技术路线引领充电…

音频处理基础的一些笔记碎片

感谢 B 站上关于 EQ 扫盲视频分享 🔊声音变好听-让均衡器改变你的音色|均衡器怎么调?(adobe audition 2020基础教程) 简要内容 a. 人耳能够听到的频率 20HZ-20000HZ; b. 人耳普遍认为低于 80HZ 是噪声; c. …