你懂的,语境--第一部分:混合搜索和语境工程的演变

探索混合搜索和上下文工程如何从词汇基础发展到支持下一代代理人工智能工作流程。

Elasticsearch 拥有众多新功能,可帮助您为您的用例构建最佳的搜索解决方案。在我们关于构建现代 Search AI 体验的实践网络研讨会上,您将学习如何将其付诸实践。您也可以开始免费云服务试用,或立即在您的本地计算机上试用 Elastic。

我们全新的人工智能代理世界

和我们许多人一样,我发现自己对人工智能能力的发展速度既目瞪口呆又惊叹不已。我们首先看到大型语言模型(LLMs)和矢量搜索将我们带入语义革命,在这场革命中,我们不再需要用关键字来寻找事物。随后,法学硕士们向我们展示了与数据交互的新方法,他们使用聊天界面将自然语言请求转化为回复,将庞大的知识库提炼为易于使用的摘要。我们现在(已经)以 "代理人工智能"(agentic AI)工作流的形式出现的自动 LLM 驱动逻辑已经初具雏形,它可以从语义上理解接收到的请求,推理出需要采取的步骤,然后从可用的工具中选择迭代执行的行动来实现这些目标。

人工智能代理的前景正迫使我们从主要使用 "提示工程 "来塑造我们的人工智能生成交互,发展到关注我们如何帮助代理工具获得最相关、最有效的额外信息,以便 LLM 在生成其响应时加以考虑--"情境工程 "是下一个前沿领域。混合搜索是迄今为止最强大、最灵活的浮现相关上下文的手段,Elastic 的搜索人工智能平台开辟了一种全新的方式来利用数据为上下文工程服务。在本文中,我们将从两个角度讨论法律硕士如何改变了信息检索的世界,然后再讨论如何将它们结合起来以取得更大的成果。有相当多的地方需要覆盖...

让我们从法律硕士如何改变了我们获取和检索信息的方式这个角度出发。

我们的词汇遗产

长期以来,我们一直生活在有限的词库搜索世界中(尽我们所能,相当不错)。搜索是我们在研究或开始一个新项目时最先使用的工具,直到最近,我们还需要以词法搜索引擎能够理解的方式来描述我们的查询。词法搜索依赖于将某种形式的查询术语与文档语料库中的关键字进行匹配,无论内容是非结构化的还是结构化的。词法搜索要返回命中的文档,必须与该关键词相匹配(或者有同义词列表或词典等受控词汇来为我们建立概念联系)。

词法 多匹配 查询示例

至少搜索引擎有能力返回相关性得分的点击率。搜索引擎提供丰富的查询语法选项,可有效定位索引数据,并提供内置相关性算法,根据用户查询语法的意图对结果进行评分。几十年来,搜索引擎在相关性排序算法方面取得了长足的进步,这使搜索引擎成为一个高效的数据检索平台,可以根据查询结果的相关性对结果进行评分和排序。使用 SQL 作为主要数据检索方法的数据库和其他系统在这方面处于劣势:数据库查询中没有相关性的概念;它们能做的最好的事情就是按字母或数字对结果进行排序。好消息是,您将获得这些关键词的所有点击率(召回率),但相对于您询问这些关键词的原因(精确度)而言,它们的顺序不一定有帮助。这一点很重要,我们很快就会看到...

进入(语义)龙

信息矢量表示法作为关键字搜索的替代方法,其潜力已被研究了很长时间。矢量让我们摆脱了只用关键词匹配内容的模式,因此前景十分广阔--由于矢量是术语和权重的数字表示,因此可以根据语言模型对术语在训练领域中相互关系的理解,在数学上接近概念。通用矢量搜索之所以拖延了很长时间,是因为模型大多局限于特定领域,它们根本不足以充分理解一个术语在不同语境中可能代表的许多不同概念。

直到几年前出现了大型语言模型(LLM),它们能够在更大的数据量上进行训练(使用转换器注意力),矢量搜索才变得实用起来--LLM 的大小和深度最终使矢量能够存储足够的细微差别,从而真正捕捉语义。理解深度的骤然增加使得 LLM 现在可以实现大量以前无法实现的自然语言处理(NLP)功能,其中影响最大的可能是根据序列中迄今为止的上下文推断序列中最有可能出现的下一个术语。推理过程赋予了生成式人工智能近乎人类的文本生成能力。人工智能生成的文本参考了 LLM 对训练数据中术语相关性的理解,并利用请求的措辞来区分术语可能出现的不同语境。

尽管生成式人工智能非常神奇,但 LLM 也其局限性,会导致质量和准确性方面的误差,也就是通常所说的幻觉。当 LLM 无法获得信息(或没有正确的上下文引导)来根据事实回答问题时,就会产生幻觉,因此,为了帮助 LLM,它会产生一个自信满满、听起来似是而非的回答。部分原因在于,虽然 LLM 可以在包含各种信息的大型领域中学习语言的用法,但它们必须在某个时间点停止训练,因此它们的理解存在时效性因素--也就是说,模型只能知道在停止训练之前的准确性。造成幻觉的另一个因素是,模型通常不知道私人持有的数据(不能在公共互联网上获取的数据),当这些数据包含特定术语和名词时,这一点尤为重要。

矢量数据库

LLM 使用一种称为文本嵌入的技术将内容矢量化到其模型空间中,这种技术是指根据所接受的训练,将内容的语义嵌入或映射到模型的世界观中。准备和处理嵌入内容需要几个步骤,包括分块和标记化(以及子词标记化)。其结果通常是一组密集的向量,代表了模型在其向量空间内对该内容块含义的理解。分块是一个不精确的过程,目的是使内容符合模型生成嵌入的处理限制,同时还尝试使用语义结构(如句子和段落指示符)将相关文本归入一个分块。

由于单个分块与同一文档中的其他分块并不完全关联,因此分块的需要可能会在嵌入文档中造成一些语义损失。神经网络固有的不透明性会使这种损失变得更加严重--LLM 是一个真正的 "黑盒子",训练过程中术语和概念之间的联系是非确定的,人类无法解释。这就导致了可解释性、可重复性、无意识偏见等问题,并可能失去信任和准确性。不过,从语义上将想法联系起来的能力,以及在查询时不受特定关键词束缚的能力还是非常强大的:

语义 查询 示例

矢量数据库还有一个问题需要考虑:它们不是搜索引擎,而是数据库!在进行矢量相似性搜索时,会对查询词进行编码,以便在模型的矢量空间中找到一组(嵌入)坐标。然后将这些坐标作为靶心,找出与靶心 "近邻 "的文档--这意味着文档的排名(或在结果中的位置)是由计算出的文档坐标与查询坐标的相似度距离决定的。在可能的上下文中,哪个最接近用户的意图?我将其比喻为电影《星际之门》中的一个场景,我们有六个相交的坐标点来告诉我们目的地(靶心),但如果不知道 "第七个符号"--代表用户主观意图的起点坐标,我们就无法到达目的地。因此,通过表达式语法和相关性评分来考虑查询的主观意图,我们就能得到类似于主观相关性分级的圆柱体,而不是根据不断扩大和无差别的相似性来对向量进行相对排序。

LLM 的推理能力可能有助于确定对查询所掌握的最有可能的上下文,但问题是,在没有帮助的情况下,输入查询的坐标只能根据模型最初的训练方式来确定。

在某些方面,你可以说矢量相似性走向了与严格的关键词匹配相反的极端--它的优势在于能够克服术语不匹配的问题,但几乎可以说是无懈可击:LLM 倾向于统一相关概念,而不是区分它们。矢量相似性提高了我们从语义上匹配内容的能力,但并不能保证精确度,因为它可能会忽略精确的关键字和特定的细节,而这些细节在模型中并没有得到足够的消歧。矢量相似性搜索本身就很强大,但我们需要将从矢量数据库中获取的结果与其他检索方法的结果关联起来。

重新排名技术

现在是提及一种名为 "重排 "的通用技术的好时机。"重排 "是对结果集进行重新评分或归一化,使其达到统一的排名顺序。需要重新排序的原因可能是来自多个来源或检索方法的结果具有不同的排序/评分机制(或者根本没有,SQL!),或者重新排序可能是为了使来自非语义来源的结果与用户的查询在语义上保持一致。重新排序是第二阶段的操作,是指通过某种初始检索方法收集到的一组结果(即SQL、词法搜索、向量搜索),然后用不同的评分方法重新排序。

有几种可用的方法,包括学习排名(Learning-To-Rank,LTR)和互惠排名融合(Reciprocal Rank Fusion,RRF)--LTR 适用于捕捉搜索结果特征(喜欢、评分、点击等),并利用这些特征对搜索结果进行评分、提升或倾斜。RRF 非常适合合并不同查询模式返回的结果(如词法搜索和矢量数据库搜索)合并为一个结果列表。Elastic 还提供了使用线性重排方法调整分数的灵活性。

不过,最有效的重排技术之一是语义重排,它利用 LLM 的语义理解能力来分析查询和结果的向量嵌入,然后应用相关性评分/重评分来确定最终顺序。当然,语义重排需要与重排模型建立连接,Elasticsearch提供了推理API,让您可以创建重排端点,利用内置模型(Elastic Rerank)、导入的第三方模型或外部托管服务(如CohereGoogle Vertex AI)。然后就可以通过检索器查询抽象语法执行重新排序:

多级检索器重排操作示例

听起来不错吧?我们可以对来自不同来源的结果进行重新排序,从而接近对所有类型内容的语义理解......语义重新排序的计算成本和处理时间都很高,正因为如此,语义重新排序只能在数量有限的结果上进行,这意味着如何检索这些初始结果非常重要。

语境检索方法很重要

主观意图是确定结果准确性和评分相关性的一个重要因素。由于无法考虑用户执行查询的意图(如通过灵活的语法或第二阶段重排所表达的意图),我们只能从模型空间中已编码的现有上下文中进行选择。我们通常通过检索增强生成(RAG)等技术来解决这种缺乏上下文的问题。RAG 的工作原理是,它可以有效地转移查询的坐标,包括通过预查询返回的其他相关术语,以获取与上下文相关的数据。这就使得提供额外上下文的引擎及其执行检索初始方法对上下文的准确性更加重要!

让我们回顾一下不同的上下文检索方法,以及它们对 RAG 操作的帮助或伤害:

  • 没有搜索引擎的混合搜索检索仍然缺乏主观相关性。如果提供 RAG 的平台主要基于下面的 SQL(包括大多数 "数据湖 "平台),那么在初始检索阶段就缺乏相关性评分。许多数据湖平台提供自己版本的混合检索(而非搜索),通常在基于 SQL 的检索和矢量数据库结果上结合语义重排和 RRF 等重排技术。简单的排序显然不足以进行主观排序,但即使作为第二阶段语义重排操作的基础,SQL 作为第一阶段检索,在只对 "前 k 个 "点击进行语义重排时也会出现问题--如果不在检索时对结果进行某种评分,我们又如何保证最好的结果确实在最前面的结果中呢?
  • 对于 RAG 来说,仅有矢量相似性是不够的。这实际上是由一系列复杂问题造成的--这是嵌入的损失性,还有天真的分块方法、相似性的计算方法,以及主观意图这一至关重要的缺失部分。RAG 的主要目标之一是将生成式人工智能交互建立在客观事实的基础上,既能防止产生幻觉,又能让 LLM 了解它在训练过程中不知道的私人信息。我们可以利用 RAG 提供的额外语境来约束和引导 LLM,使其考虑我们所知道的对回答当前问题最重要的关联和细节。为此,我们需要同时使用语义和词汇方法。
  • 基于文件的 grep/regex RAG。在人工智能代理领域,有一些指出,应使用大幅放大的上下文窗口,通过 grep 和 regex 访问本地文件,以实现 RAG,而不是使用外部检索平台。我们的想法是,有了更大的上下文窗口,法律硕士就能在自己的思维空间内建立概念联系,而不是依赖分块的碎片和多种检索方法/平台来收集相关信息。虽然从理论上讲,拥有整个文档比拥有文档片段能提供更全面的信息,但这只适用于小数据域(或者,例如,在提供用于振动编码的文件时),即使在这种情况下,初始检索方法也是扫描所有仅有关键字匹配的文档。

搜索不仅仅是检索

搜索引擎的设计目的是使查询尽可能快速和灵活。在内部,它们利用专门的数据结构来存储和检索不同类型的数据,以满足这些数据类型的需要。Elasticsearch 可优化所有类型数据的存储和查询,包括非结构化/全文词法搜索(匹配、短语、近似、多重匹配)、快速关键字(精确匹配)匹配和过滤、数字范围、日期、IP 地址,而且存储文档结构的方式也非常灵活(例如,可通过"...嵌套或扁平化文档)。Elasticsearch 还是一个原生矢量数据库,可以存储和查询稀疏和密集矢量类型。我们将继续探索创新方法(例如,更好的二进制量化 (BBQ) & DiskBBQ),以保持搜索保真度,同时提高速度、可扩展性以及与矢量化内容相关的成本。Elasticsearch 平台还提供内置的数据弹性和高可用性,并包含数据生命周期管理功能,如可搜索快照,让您可以在经济高效的对象存储上保留不常访问或长期保留的数据,但仍可完全搜索。

混合搜索是最好的选择

混合搜索(不仅仅是混合检索)将传统词汇搜索的优势与 LLM 的语义理解和向量相似性搜索相结合。这种协同作用允许在检索阶段通过搜索引擎提供的任何灵活的查询语法选项:意图驱动语法选项和相关性评分、多模态数据检索、过滤、聚合和偏置来定位高度相关的结果。利用ES|QL等搜索语法和多级检索器,我们可以在一个请求中灵活地将传统搜索与语义搜索、过滤器和多种重排技术结合起来。

混合搜索的最大优势之一是,您的查询可以同时针对多种不同的数据类型使用专门的语法。这些不同的查询语法不仅可用于查找结果,还可用作结果筛选器或聚合器。例如,最常见的查询类型之一是地理空间分析,它经常与其他语法相结合。您可以查询地理坐标在某一点指定距离内的结果,或要求按地区对结果进行汇总,或进行汇总以跟踪进入/离开某个区域的移动情况并发出警报。使用混合搜索,您可以灵活地组合语法,以最准确的方式定位搜索结果,检索最贴近您的上下文的内容。

中场休息

第一部分讲述了矢量搜索如何改变了我们检索数据的方式,并为 LLM 给我们用来与数据交互的查询机制带来的变化做了铺垫。我们将假装不得不把这部分内容分成多个部分,以便 LLM 能够在不丢失上下文的情况下理解......;-)让我们在 第二部分 "代理人工智能和上下文工程的必要性"中进一步了解 这一点的重要性 ,在第三部分中,我们将继续讨论混合搜索。

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用