Azure AI 搜索中的 AI 扩充

在 Azure AI 搜索中,AI 扩充是指与 Azure AI 服务集成来处理以原始格式无法搜索的内容。 通过扩充,可以使用分析和推理来创建以前不存在的可搜索内容和结构。

Azure AI 搜索是一种文本和矢量搜索解决方案,因此 AI 扩充的目的是在与搜索相关的情况下改善内容的效用。 源内容必须是文本(不能扩充矢量),但扩充管道创建的内容可使用文本拆分技能(用于分块)和 AzureOpenAIEmbedding 技能(用于编码)等技能在矢量存储中进行矢量化和编制索引。

AI 扩充基于技能

内置技能使用 Azure AI 服务。 它们对原始内容应用以下转换和处理:

  • 多语言搜索的翻译和语言检测
  • 实体识别,从大型文本块中提取人员姓名、位置和其他实体
  • 关键短语,提取识别和输出重要术语
  • 光学字符识别 (OCR),识别二进制文件中的印刷体文本和手写文本
  • 图像分析,描述图像内容并将描述输出为可搜索的文本字段

自定义技能运行外部代码。 自定义技能可用于要在管道中包含的任何自定义处理。

AI 扩充是连接到 Azure 数据源的索引器管道的扩展。 扩充管道具有索引器管道的所有组件(索引器、数据源、索引),以及指定原子扩充步骤的技能组

下图显示了 AI 扩充的流程:

扩充管道的示意图。

“导入”是第一步。 在此处,索引器连接到数据源并将内容(文档)拉取到搜索服务中。 Azure Blob 存储是 AI 扩充方案中最常用的资源,但任何受支持的数据源都可以提供内容。

扩充和索引涵盖了大多数 AI 扩充管道:

  • 当索引器“破解文档”并提取图像和文本时,表示扩充开始。 接下来发生的处理类型取决于数据以及添加到技能组的技能。 如果你有图像,可将它们转发到执行图像处理的技能。 文本内容将会排队以等待进行文本和自然语言处理。 在内部,技能创建一个“扩充的文档”用于在转换发生时收集转换。

  • 扩充内容在技能组执行期间生成,除非进行保存操作,否则内容只是临时的。 可以启用扩充缓存来持久保存破解的文档和技能输出,以便在后续的技能组执行中重用。

  • 若要将内容放入搜索索引,索引器必须具有用于将扩充内容发送到目标字段的映射信息。 字段映射(显式或隐式)设置从源数据到搜索索引的数据路径。 输出字段映射设置从扩充文档到索引的数据路径。

  • 索引编制是将原始和扩充内容引入到搜索索引的物理数据结构(其文件和文件夹)的过程。 词法分析和标记化在此步骤中发生。

“探索”是最后一步。 输出始终是可以从客户端应用查询的搜索索引。 (可选)输出可以是一个知识存储,它由 Azure 存储中可以通过数据探索工具或下游流程访问的 Blob 和表组成。 如果你正在创建知识存储,投影将确定扩充内容的数据路径。 相同的扩充内容可以出现在索引和知识存储中。

何时使用 AI 扩充

如果原始内容为非结构化文本、图像内容或需要语言检测和翻译的内容,则使用扩充会非常有用。 通过内置技能应用 AI 可解锁此内容来实现全文搜索和数据科学应用程序。

还可以创建自定义技能来提供外部处理。 开源、第三方或第一方代码可以作为自定义技能集成到管道中。 识别各种文档类型的突出特征的分类模型属于此类别,但任何可为内容增加价值的外部包均可使用。

内置技能用例

内置的技能基于 Azure AI 服务 API:Azure AI 计算机视觉语言服务。 除非你的内容输入较小,否则,就需要附加可计费的 Azure AI 服务资源来运行较大的工作负载。

使用内置技能组合起来的技能组非常适合以下应用方案:

自定义技能用例

自定义技能执行你在自定义技能 Web 接口中提供并包装的外部代码。 可以在 azure-search-power-skills GitHub 存储库中找到自定义技能的几个示例。

自定义技能并非总是很复杂。 例如,如果你的现有包提供模式匹配或文档分类模型,那么你可以将其封装到自定义技能中。

存储输出

在 Azure AI 搜索中,索引器保存它创建的输出。 一个索引器运行最多可以创建三个包含已扩充输出和已编制索引输出的数据结构。

数据存储 必须 位置 说明
可搜索索引 必须 搜索服务 用于全文搜索和其他查询形式。 指定索引是一项索引器要求。 索引内容是从技能输出以及直接映射到索引中字段的任何源字段填充的。
知识存储 可选 Azure 存储 用于知识挖掘或数据科学等下游应用。 知识存储在技能组中定义。 其定义决定了已扩充的文档是投影为 Azure 存储中的表还是对象(文件或 Blob)。
扩充缓存 可选 Azure 存储 用于缓存扩充内容,以便在后续的技能组执行中重用。 缓存存储已导入的但未处理的内容(破解的文档)。 它还存储在技能组执行期间创建的扩充文档。 如果你正在使用图像分析或 OCR,并且希望避免重新处理图像文件的时间和费用,则高速缓存会很有帮助。

索引和知识存储完全相互独立。 虽然必须附加索引以满足索引器要求,但如果唯一目标是知识存储,则填充后可以忽略该索引。

探索内容

在定义并加载搜索索引知识存储之后,可以探索其数据。

查询搜索索引

运行查询以访问管道生成的扩充内容。 该索引与可为 Azure AI 搜索创建的其他任何索引类似:可以使用自定义分析器补充文本分析、调用模糊搜索查询、添加筛选器,或尝试使用计分概要文件来调整搜索相关性。

对知识存储使用数据探索工具

在 Azure 存储中,知识存储可以采用以下形式:JSON 文档的 Blob 容器、图像对象的 Blob 容器或表存储中的表。 可以使用存储资源管理器Power BI 或任何连接到 Azure 存储的应用来访问内容。

  • Blob 容器捕获整个扩充文档,这很有利于将数据馈送到其他过程。

  • 如果需要扩充文档的切片,或者想要包含或排除输出的特定部分,则表非常有用。 对于 Power BI 中的分析,建议在 Power BI 中将表用作数据源以进行数据研究和可视化。

可用性和定价

扩充在提供 Azure AI 服务的区域中可用。 可以在各区域的 Azure 产品可用性页上查看扩充的可用性。

计费遵循标准预付费套餐定价模型。 如果在技能组中指定了多区域 Azure AI 服务密钥,则使用内置技能的成本将会被传递。 还有与图像提取相关的成本(按 Azure AI 搜索计费)。 不过,文本提取和实用工具技能不计费。 有关详细信息,请参阅 Azure AI 搜索如何收费

清单:典型工作流

扩充管道由具有技能组索引器组成 。 编制索引后,可以查询索引以验证结果。

支持的数据源中的数据子集开始。 索引器和技能组设计是一个迭代性过程。 使用较小的有代表性数据集可以加快工作进度。

  1. 创建一个指定数据的连接的数据源

  2. 创建技能组。 除非项目很小,否则应附加 Azure AI 多服务资源。 如果你正在创建知识存储,请在技能组中定义它。

  3. 创建一个索引架构用于定义搜索索引。

  4. 创建并运行索引器,以将上述所有组件组合在一起。 此步骤检索数据、运行技能组并加载索引。

    索引器也是指定字段映射,以及输出用于设置搜索索引数据路径的字段映射的位置。

    (可选)在索引器配置中启用扩充缓存。 完成此步骤后,以后可以重用现有的扩充。

  5. 运行查询来评估结果,或启动调试会话来处理任何技能组问题。

若要重复上述任何步骤,请重置索引器,然后再运行它。 或者,针对每次运行都删除并重新创建对象(如果使用的是免费层,则建议这样做)。 如果启用了缓存,当源中的数据未更改,并且你对管道的编辑不会使缓存失效时,索引器将从缓存中拉取内容。

后续步骤