你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
RAG 区块扩充阶段
将文档分解成区块集合后,下一步是通过清理文档并使用元数据来扩充每个区块。 通过清理区块,可以在矢量搜索中实现更好的语义查询匹配。 通过添加元数据,可以支持对超出语义搜索的区块进行搜索。 清理和扩充都涉及扩展区块的架构。
本文讨论了扩充区块的各种方法,包括一些可以对区块执行的常见清理操作,以改进矢量比较。 它还介绍了可以添加到区块以增强搜索索引的一些常见元数据字段。
本文是系列文章的一部分。 下面是相关介绍。
下面的代码示例显示了使用数据扩充的区块。
清理数据
对数据进行分块有助于工作负荷找到最相关的区块,通常通过向量化这些区块并将其存储在向量数据库中。 优化的矢量搜索仅返回数据库中与查询最接近的语义匹配的行。 清理数据的目标是通过消除与文本语义无关的潜在差异来支持接近匹配。 以下是一些常见的清洁过程。
注意
应返回原始的未清理区块作为查询结果,因此应添加一个附加字段来存储清理和矢量化的数据。
实现小写化策略。 小写化可让大写的单词(如句子开头的单词)与句子中的相同单词匹配。 嵌入通常会区分大小写,因此“Cheetah”和“cheetah”会就同一个逻辑词产生不同的矢量。 例如,对于嵌入式查询“什么是更快的,猎豹或美洲狮?”嵌入的“猎豹比美洲豹快”是比“猎豹比美洲豹快”更接近的匹配。一些小写策略将所有单词(包括适当的名词)小写,而其他策略则只小写句子中的第一个单词。
移除非索引字。 非索引字是“a”、“an”和“the”等字词。可以删除非索引字以减少生成的向量的尺寸。 如果移除前一个例子中的非索引字,“a cheetah is faster than a puma”和“the cheetah is faster than the puma”在矢量上都等同于“cheetah faster puma”。不过,重要的是要明白,有些非索引字是有语义含义的。 例如,“not”可能被认为是一个非索引字,但它却具有重要的语义含义。 你需要进行测试来确定移除非索引字的影响。
修复拼写错误。 拼写错误的单词与嵌入模型中正确拼写的单词不匹配。 例如,在嵌入中,“cheatah”与“cheetah”并不相同。 应修复拼写错误以解决此问题。
删除 Unicode 字符。 删除 Unicode 字符可以减少区块中的干扰并减少维度。 与非索引字一样,某些 Unicode 字符也可能包含相关信息。 请务必进行测试,以了解删除 Unicode 字符的影响。
规范化文本。 按照标准对文本进行规范化,如扩展缩写、将数字转换为单词,以及将“I'm”等缩略形式展开为“I am”,这些都有助于提升矢量搜索的表现。
扩充区块
针对矢量化区块的语义搜索适用于某些类型的查询,但不适用于其他查询。 根据需要支持的查询类型,可能需要使用其他信息来扩充区块。 其他元数据字段都存储在嵌入内容所在的同一行中,可以在搜索解决方案中用作筛选器或作为搜索的一部分使用。
下图显示了完全扩展内容的 JSON,并介绍了元数据如何可能被搜索平台使用。
需要添加的元数据列取决于问题域,包括你拥有的数据类型以及要支持的查询类型。 你需要分析要实现的用户体验、可用数据和结果质量。 在此处,可以确定哪些元数据可能有助于解决工作负荷的要求。
以下是一些常见的元数据字段以及原始区块文本、有关其潜在用途的一些指南,以及通常用于生成元数据内容的工具或技术。
ID。 一个 ID 唯一标识一个区块。 在处理过程中,唯一 ID 非常有用,用于确定存储区中是否已存在区块。 ID 可以是某些键字段的哈希。 工具:哈希库。
标题。 标题是区块的有用返回值。 它提供区块中内容的快速摘要。 摘要还可用于使用索引搜索进行查询,因为它可以包含用于匹配的关键字。 工具:语言模型。
总结。 摘要类似于标题,因为它是一个常见的返回值,可以在索引搜索中使用。 摘要通常比标题长。 工具:语言模型。
区块重新表述。 作为矢量搜索字段,对区块进行重新表述可能很有帮助,因为重新表述可以捕获同义词和释义等语言变化。 工具:语言模型。
关键字。 关键字搜索适用于非上下文数据、搜索精确匹配项以及当特定字词或数值重要时。 例如,汽车制造商可能会有关于其每个车型的多年来的评审或性能数据。 “2009 年产品 X 的评审”在语义上类似于“2010 年的产品 X 评审”和“2009 年产品 Y 的评审”。在这种情况下,在产品和年份的关键字上匹配更为有效。 工具:语言模型、RAKE、KeyBERT、多 RAKE。
实体。 实体是特定信息片段,如人员、组织和位置。 与关键字一样,实体非常适合完全匹配搜索,或者当特定实体很重要时。 工具:spaCy、斯坦福命名实体识别器(斯坦福 NER)、scikit-learn、自然语言工具包(NLTK)。
已清理区块文本。 已清理区块的文本。 工具:语言模型。
区块可以回答的问题。 有时,嵌入的查询与嵌入的区块不匹配。 例如,相对于区块大小,查询可能很小。 最好是构建区块可以回答的查询,并在用户的实际查询和预先表述的查询之间执行矢量搜索。 工具:语言模型。
源。 区块的源在作为查询的返回值时很有价值。 返回源代码允许查询者引用原始来源。
语言。 区块的语言可以用作查询中的筛选器。
增强处理的成本
使用某些语言模型来扩充区块可能很昂贵。 你需要计算所考虑的每个扩充的成本,然后将其乘以一段时间内的估计区块数。 请使用此信息,并结合对扩充字段的测试,来确定最佳业务决策。