将文档分解为区块集合后,下一步是通过清理和扩充包含元数据的区块来扩充每个区块。 通过清理区块,可以在矢量搜索中实现更好的语义查询匹配。 通过添加信息,可以支持超出区块语义搜索的搜索。 清理和扩充都涉及扩展区块的架构。
本文讨论各种扩充区块的方法,包括可以对区块执行的一些常见清理操作,以改进矢量比较,并介绍了可以添加到区块以扩充搜索索引的一些常见元数据字段。
本文是系列文章的一部分。 阅读 简介。
图 1. 使用元数据扩充区块
清洗
将数据分块支持工作负荷查找最相关的区块,通常通过向量化这些区块并将其存储在向量数据库中。 优化矢量搜索仅返回该数据库中与查询最接近的语义匹配的行。 清理数据以支持接近匹配的目标,方法是消除文本语义中不存在的潜在差异。 以下是一些常见的清理过程。
注意
需要返回原始的未清理区块作为查询结果,以便添加一个附加字段来存储清理和矢量化的数据。
- Lowercasing - Lowercasing 允许大写的单词(如句子开头的单词)与句子中的相同单词匹配。 嵌入通常区分大小写,这意味着“猎豹”和“猎豹”会导致同一逻辑词的不同向量。 例如,对于嵌入式查询:“什么是更快的,猎豹还是 puma?以下嵌入:“猎豹比幼崽快”是比嵌入“猎豹比美洲豹快”更接近的匹配。一些小写策略,包括适当的名词,而其他策略只是降低句子中的第一个单词。
- 删除非索引字 - 非索引字是通常在句子中出现的单词,如“a”、“an”和“the”。 可以删除非索引字以减少生成的向量的尺寸。 删除停止词将允许“猎豹比美洲豹快”和“猎豹比美洲豹快”,两者都向量等于“猎豹更快 puma”。但是,必须了解一些非索引字具有语义意义。 例如,“not”可能被视为非索引字,但会保留重要的语义含义。 请务必测试删除非索引字的效果。
- 修复拼写错误 - 拼写错误的单词与嵌入模型中正确拼写的单词不匹配。 例如,嵌入中的“速查”()与嵌入中的“猎豹”不同。 应修复拼写错误以解决此挑战。
- 删除 unicode 字符 - 删除 Unicode 字符可以减少区块中的干扰并减少维度。 与非索引字一样,某些 Unicode 字符可能包含相关信息。 请务必测试如何了解删除 Unicode 字符的影响。
- 规范化 - 将文本规范化为扩展缩写、将数字转换为单词等标准,以及将“我是”等收缩扩展到“我是”有助于提高矢量搜索的性能。
扩充区块
针对矢量化区块的语义搜索适用于某些类型的查询,但不适用于其他查询。 根据需要支持的查询类型,可能需要使用其他信息来扩充区块。 其他元数据字段都存储在嵌入内容所在的同一行中,可以在搜索解决方案中用作筛选器或搜索的一部分。
图 2. 在搜索解决方案中使用扩充元数据
需要添加的元数据列取决于特定于问题域的决策。 这包括你拥有的数据类型和要支持的查询类型。 你需要分析要实现的用户体验、可用数据和结果质量。 在此处,可以确定哪些元数据可能有助于解决工作负荷的要求。
以下是一些常见的元数据字段,以及原始区块文本、有关其潜在用途的一些指南,以及通常用于生成元数据内容的工具或技术。
- ID - ID 是用于唯一标识区块的关键元数据字段。 唯一 ID 可用于处理以确定存储区中是否已存在区块。 ID 可以是某些键字段的哈希。 工具:哈希库
- 游戏 - 游戏是区块的有用返回值。 它提供区块中内容的快速摘要。 摘要还可用于使用索引搜索进行查询,因为它可以包含用于匹配的关键字。 工具:语言模型
- 摘要 - 摘要类似于标题,因为它是一个常见的返回值,可用于索引搜索。 摘要通常比标题长。 工具:语言模型
- 分块 重新分配 - 区块的重新分配可以作为矢量搜索字段很有用,因为重音捕获语言(如同义词和描述)的变体。 工具:语言模型
- 关键字 - 关键字搜索适用于非文本数据、搜索完全匹配项以及特定术语或值很重要时。 例如,汽车制造商可能有多个年对每个型号的评价或性能数据。 2009 年产品 X 的评审在语义上类似于“2010 年产品 X 的评审”和“2009 年产品 Y 评审”。在这种情况下,最好匹配产品和年份的关键字。 工具:语言模型、RAKE、KeyBERT、MultiRake
- 实体 - 实体是人员、组织和位置等特定信息片段。 与关键字一样,实体非常适合完全匹配搜索,或者当特定实体很重要时。 工具:SpaCy、斯坦福命名实体识别器(SNER)、scikit-learn、自然语言工具包(NLTK)。
- 清理的区块文本 - 清理的区块文本。 工具:语言模型
- 区块可以回答的问题 - 有时,嵌入的查询和嵌入的区块不匹配。 例如,查询在区块大小方面可能很小。 最好是构建区块可以回答的查询,并在用户的实际查询和预生成查询之间执行矢量搜索。 工具:语言模型
- 源 - 区块的源可以作为查询的返回值。 它允许仲裁者引用原始来源。
- 语言 - 区块的语言可以很好地用作查询中的筛选器。
增强经济学
使用某些语言模型来扩充区块可能很昂贵。 你需要计算你考虑的每个扩充的成本,并将其乘以一段时间内的估计区块数。 应将此信息与测试这些扩充字段一起用作搜索的一部分,以便做出良好的业务决策。
后续步骤
相关资源
- 在 Azure AI 搜索 中
AI 扩充 - Azure AI 搜索 中的
技能集概念