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