仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
大家好,我是Ai学习的老章
经常在外冲浪,看到很多优秀的技术文章,独享不如分享
我会使用DeepSeek-R1+科技类翻译大师prompt翻译出来,大家一起学习
如有翻译偏差,请大家指教。
原文:#在向量数据库公司工作两年后学到的37个信息检索知识点
https ://www. leoniemonigatti.com/blog/what_i_learned. html
本文作者是大模型时代刚刚成立的向量数据库标杆公司Weaviate的员工leoniemonigatti,她本身也是一名机器学习工程师和技术撰稿人。
今天是我在向量数据库公司Weaviate工作两周年的日子。为表庆祝,我想回顾这段时间对向量数据库和搜索的认知收获。以下是我学到的部分经验以及常见的理解误区:
BM25是搜索的强基准线。哈!你以为我会先讲向量搜索,结果我在谈关键词检索。这正是第一课:在接触向量搜索等复杂技术前,应先从BM25这类简单方法入手。
向量数据库中的向量搜索是近似而非精确的。理论上可以用暴力搜索计算查询向量与库中每个向量的距离(精确KNN算法),但这种方式扩展性差。因此向量数据库采用HNSW、IVF或ScaNN等近似最近邻(ANN)算法,在牺牲微量准确性的前提下加速搜索。正是向量索引技术让向量数据库具备大规模高速检索能力。
向量数据库不仅存储嵌入向量。它们还存储原始对象(例如生成向量嵌入的文本)和元数据。这使得它们能够支持除向量搜索之外的其他功能,如元数据过滤、关键词搜索和混合搜索。
向量数据库的主要应用场景并非生成式AI,而是搜索。但为LLMs寻找相关上下文本质上就是\“搜索\“。这就是为什么向量数据库和LLMs像饼干配奶油般相得益彰。
你必须指定想要检索的结果数量。回想起来,当我意识到需要定义想要检索的最大结果数时,这真是个醍醐灌顶的时刻——虽然有点过于简化,但如果没有limit或top_k参数,向量搜索会返回数据库中所有按与查询向量距离排序的对象。
嵌入类型多种多样。当你想到向量嵌入时,脑海中浮现的可能是类似[-0. 9837,0. 1044,0. 0090,…,-0. 2049]这样的数值。这被称为稠密向量,是最常用的向量嵌入类型。但除此之外还存在稀疏向量([0,2,0,…,1])、二进制向量([0,1,1,…,0])以及多向量嵌入([[-0. 9837,…,-0. 2049],[0. 1044,…,0. 0090],…,[-0. 0937,…,0. 5044]])等多种形式,它们各自适用于不同场景。
优质嵌入模型何处寻?首推大规模文本嵌入基准测试(MTEB),它涵盖了分类、聚类和检索等各类嵌入模型任务。若专注信息检索领域,建议关注BEIR基准:一个用于信息检索模型零样本评估的异构基准测试。
MTEB上大多数嵌入模型仅支持英语。如需处理多语言或非英语场景,值得关注多语言大规模文本嵌入基准测试(MMTEB)。
关于向量嵌入的一点历史:在当今的上下文嵌入(如BERT)出现之前,存在静态嵌入(如Word2Vec、GloVe)。它们之所以被称为静态,是因为每个单词都有固定的表示形式,而上下文嵌入会根据周围语境为同一单词生成不同的表示。尽管现今的上下文嵌入表达能力更强,但在计算资源受限的环境中,静态嵌入仍具价值,因为它们可以从预先计算的表格中直接查询。
不要混淆稀疏向量和稀疏嵌入。我花了些时间才明白稀疏向量可以通过不同方式生成:要么通过对词频(通常通过倒排索引获取)应用统计评分函数(如TF-IDF或BM25),要么使用神经稀疏嵌入模型(如SPLADE)。这意味着稀疏嵌入属于稀疏向量,但并非所有稀疏向量都必然是稀疏嵌入。
万物皆可嵌入。嵌入不仅适用于文本,你还可以嵌入图像、PDF(视为图像,参见ColPali)、图结构数据等。这意味着你能对多模态数据进行向量搜索,这相当不可思议。有机会你应该试试。
向量嵌入的经济学。这一点不足为奇,但向量维度会影响所需的存储成本。因此,在选择1536维的嵌入模型而非768维模型时,请先权衡是否值得承担存储需求翻倍的风险。确实,更高维度能捕捉更多语义细节。但实现\“与文档对话\“功能很可能不需要1536维。部分模型实际采用套娃表示学习技术,允许在计算资源有限的环境中使用缩短后的向量嵌入,同时保持极小的性能损失。
说到这个:\“与文档对话\“教程堪称生成式AI领域的\“Helloworld\“程序。
你需要频繁调用嵌入模型。即便在数据摄入阶段已完成文档嵌入,也不意味着可以停止调用嵌入模型。每次执行搜索查询时(若未使用缓存),查询语句同样需要被嵌入。后续新增对象时,这些对象同样需要嵌入(并建立索引)。如果更换嵌入模型,则必须重新嵌入(并重建索引)所有内容。
相似并不一定意味着相关。向量搜索通过对象与查询向量的相似度返回结果,这种相似度由它们在向量空间中的接近程度来衡量。即使两个句子在向量空间中相似(例如\“如何修理水龙头\“和\“哪里可以买到厨房水龙头\“),也不意味着它们彼此相关。
余弦相似度和余弦距离不是同一概念,但二者相互关联(cosinedistance=1−cosinesimilarity)。可以说,距离和相似度是反比关系:如果两个向量完全相同,相似度为1,它们之间的距离则为0。
当处理归一化向量时,使用余弦相似度还是点积作为相似度度量并不重要,因为从数学角度看它们是等价的。但从计算效率考虑,点积更为高效。
常见误解:RAG中的R代表\“向量搜索\“。实际上并非如此,R代表\“检索\“(retrieval)。检索可以通过多种不同方式实现(参见后续要点)。
向量搜索只是检索工具箱中的一种工具。还有基于关键词的搜索、过滤和重排序。它们并非非此即彼的关系。要构建出色的系统,你需要结合使用不同的工具。
何时使用基于关键词的搜索vs. 基于向量的搜索:你的用例主要需要匹配语义和同义词(例如\“pastelcolors\“与\“lightpink\“),还是精确关键词(例如\“A字裙\“、\“荷叶边连衣裙\“)?如果两者都需要(例如\“浅色A字裙\“),结合两者使用混合搜索可能会带来好处。在某些实现中(例如Weaviate),你可以直接使用混合搜索功能,然后通过alpha参数调整权重——从纯关键词搜索、两者混合到纯向量搜索。
混合搜索可以是不同搜索技术的混合体。最常见的情况是,当人们谈论混合搜索时,他们指的是基于关键字的搜索和基于向量的搜索的结合。但“混合”一词并未具体说明要结合哪些技术。因此,有时你可能会听到人们谈论混合搜索,指的是基于向量的搜索与结构化数据搜索(通常称为元数据过滤)的结合。
误解:过滤会使向量搜索更快。直觉上,你会认为使用过滤器应该能降低搜索延迟,因为你减少了需要搜索的候选数量。但实际上,预过滤候选可能会破坏HNSW中的图连接性,而后过滤则可能导致完全没有结果。向量数据库采用了各种复杂的技术来应对这一挑战。
两阶段检索流程不仅适用于推荐系统。推荐系统通常采用第一阶段的简单检索(如向量搜索)来缩减候选范围,随后在第二阶段通过计算密集但更精确的重排序进行二次筛选。这一方法同样可应用于RAG流程。
向量搜索与重排序的区别。向量搜索从整个数据库中返回少量结果,而重排序则对输入列表进行重新排序后输出。
确定合适的文本块嵌入尺寸并非易事。尺寸过小会丢失关键上下文,过大则损害语义表达。多数嵌入模型采用均值池化技术,将各词元嵌入平均为单个向量表示。因此,若嵌入模型具备大上下文窗口,理论上可嵌入整篇文档。虽忘记出处,但有个精妙类比:这就像用电影所有帧叠加制作海报——信息俱全,却难辨剧情。
向量索引库与向量数据库是两种不同的技术。两者都能实现极速的向量搜索,在\“与文档对话\“风格的RAG教程中都能完美展示向量搜索功能。但只有后者具备数据管理特性,例如内置持久化、CRUD支持、元数据过滤和混合搜索能力。
自首个长上下文LLM问世以来,RAG技术就被不断宣告死亡。每当出现上下文窗口更长的LLM时,总有人声称RAG将退出历史舞台。但这种情况从未发生…
即使丢弃97%的信息,仍能(基本)准确地完成检索——这就是向量量化的魔力。以二值量化为例,你可以将类似[-0. 9837,0. 1044,0. 0090,…,-0. 2049]的向量转换为[0,1,1,…,0](存储空间从32位浮点数缩减至1位,降低32倍),而检索效果在某些应用场景中仍能保持惊人的准确度。
向量搜索对拼写错误并不鲁棒。有段时间我以为向量搜索能处理拼写错误,因为大量文本语料中必然包含许多拼写错误,嵌入模型应该能学会这些错误。但仔细想想,训练数据中不可能包含足够数量的所有可能的单词拼写错误变体。因此,虽然向量搜索能处理部分拼写错误,但并不能说它具有拼写错误鲁棒性。
了解何时使用哪种指标评估搜索结果。评估搜索结果的指标有很多种。观察学术基准测试(如BEIR)时,你会发现NDCG@k指标很突出。但对于许多实际用例而言,精确率和召回率这类简单指标反而更合适。
精确率与召回率的权衡常被比作渔夫撒网的类比,但这个电商例子让我茅塞顿开:假设你有个网店有100本书,其中10本是机器学习相关的。
现在,如果用户搜索机器学习相关的书籍,你完全可以只返回一本ML书籍。太棒了!你获得了完美的精确率(在返回的k=1个结果中,有多少是相关的)。但召回率却很差(在所有存在的相关结果中,你返回了多少?这里只返回了10本相关书籍中的1本)。而且,这对你的业务也不利。也许用户并不喜欢你返回的那本ML书籍。
另一个极端情况是返回全部书籍——整整100本,且未经排序…这样召回率是完美的,因为你返回了所有相关结果。问题在于同时也返回了大量无关结果,这可以通过极低的精确率来衡量。
有些指标会考虑排序因素。当我想到搜索结果时,脑海中浮现的是类似谷歌搜索的界面。因此很自然地认为搜索结果的排序很重要。但像精确率和召回率这类指标并不考虑结果顺序。如果你的应用场景中排序很关键,就需要选择考虑排序的指标,如MRR@k、MAP@k或NDCG@k。
分词器至关重要。如果你长期沉浸在Transformer的世界里,可能已经忘记了除字节对编码(BPE)外还存在其他分词器。分词器对关键词搜索及其性能同样重要。既然分词器会影响基于关键词的搜索性能,那么它必然也会影响混合搜索的表现。
领域外与词汇表外不是同一概念。早期的嵌入模型常因遇到词汇表外术语而失效。如果嵌入模型从未接触过\“Labubu\“这个词,系统就会直接报错。通过智能分词技术,可以优雅处理未见过的词汇表外术语,但问题在于这些术语仍属于领域外词汇——它们的向量嵌入看似规范,实则毫无意义。
查询优化:就像你学会了在谷歌搜索栏输入\“非洲最长河流\“,而不是\“非洲最长的河流叫什么名字\“一样。你已经学会了为关键词搜索优化查询(是的,我们知道谷歌搜索算法更复杂。能先这么理解一下吗?)。同样地,我们现在需要学习如何为向量搜索优化查询。
向量搜索之后是什么?最初是基于关键词的搜索。后来,机器学习模型实现了向量搜索。现在,具备推理能力的LLMs实现了基于推理的检索。
信息检索现在正炙手可热。能在这个激动人心的领域工作,我感到非常幸运。虽然研究和应用LLMs看起来很酷,但弄清楚如何为它们提供最佳信息同样令人兴奋——这就是检索领域的魅力所在。
我要重申最后一点,但回顾过去的两年,我深感庆幸能在这个领域工作。目前我所掌握的只是皮毛,仍有太多知识需要学习。当初加入Weaviate时,向量数据库还是新兴热门技术。随后RAG技术兴起。如今,我们又在讨论\“上下文工程\“。但始终不变的核心是:为LLM寻找最佳信息输入,才能获得最优答案。
制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!
搭建完美的写作环境:工具篇(12章)图解机器学习-中文版(72张PNG)ChatGPT、大模型系列研究报告(50个PDF)108页PDF小册子:搭建机器学习开发环境及Python基础116页PDF小册子:机器学习中的概率论、统计学、线性代数史上最全!371张速查表,涵盖AI、ChatGPT、Python、R、深度学习、机器学习等