根据 补充使用条款 ,语义搜索为公共预览版。 它可通过 Azure 门户、预览版 REST API 和 beta 版本的 SDK 获得。 这些功能是可计费的(请参阅 可用性和定价 )。

在Azure 认知搜索中, 语义搜索 通过使用语言理解重新查询搜索结果,可显著改善搜索相关性。 本文是语义排名的高级介绍。 嵌入式视频 介绍了该技术,末尾的部分介绍了可用性和定价。

语义搜索是按使用情况计费的高级功能。 建议阅读本文以了解背景信息,但如果希望立即开始使用,请执行以下步骤:

  • 检查区域可用性
  • 在搜索服务上 启用语义排名
  • 创建或修改查询以 返回语义描述和重点内容
  • 添加更多查询属性,以便也 返回语义答案
  • 正在查找矢量支持和相似性搜索? 有关详细信息 ,请参阅 Azure 认知搜索 中的矢量搜索

    语义搜索是查询相关功能的集合,可提高基于文本的查询的初始 BM25 排名搜索结果的质量。 在搜索服务上启用它时,语义搜索会通过两种方式扩展查询执行管道:

  • 首先,它在使用 BM25 算法评分的初始结果集上添加辅助排名,并使用语言理解模型来提升语义上最相关的结果。

  • 其次,它会提取并返回响应中的描述和答案,你可以在搜索页面上呈现它们以改进用户的搜索体验。

    下面是语义搜索的功能。

    Feature 语义标题和突出显示 从最能总结内容的文档中提取逐字句子和短语,并在关键段落上突出显示以便于扫描。 当单个内容字段对于搜索结果页面过于密集时,汇总结果的标题非常有用。 突出显示的文本表明最相关的词语和短语,以便用户可以快速确定为何匹配项被视为相关。 从语义查询返回的可选和额外的子结构。 它为与问题类似的查询提供直接答案。 它要求文档包含带有答案特征的文本。

    语义排名的工作原理

    语义排名查找字词之间的上下文和相关性,提升对查询更有意义的匹配项。

    下图解释了该概念。 请考虑术语“大写”。 它具有不同的含义,具体取决于上下文是金融、法律、地理还是语法。 通过语言理解,语义重排器可以检测上下文,并提升符合查询意向的结果。

    语义排名既耗费资源又耗费时间。 要在查询操作的预期延迟内完成处理,将合并并减少语义排名程序的输入,以便尽快完成基础汇总和重新排名步骤。

    如何准备输入

    在语义排名中,查询子系统将搜索结果作为输入传递给语言理解模型。 由于模型具有输入大小约束且处理密集型,因此必须调整搜索结果的大小和结构,以便高效处理。

  • 语义排名从文本查询 的 BM25 排名搜索结果 开始。 只有全文查询在范围内,并且只有前 50 个结果进入语义排名,即使结果包含超过 50 个。

  • 从每个匹配项中,对于 语义配置 中列出的每个字段,查询子系统会将值合并为一个长字符串。 通常,语义排名中使用的字段是文本和描述性的。

  • 将剪裁过长的字符串,以确保总长度满足汇总步骤的输入要求。

    此修整练习是按优先级顺序向语义配置添加字段非常重要的原因。 如果有大量文档,且文档中的字段包含大量文本,则将忽略超过最大限制的任何内容。

    每个文档现在都由单个长字符串表示。

    字符串由标记,而非字符或字词组成。 最大令牌计数为 256 个唯一令牌。 出于估计目的,可以假定 256 个标记大致相当于长度为 256 个单词的字符串。

    标记化部分取决于分析器对可搜索字段 的分配 。 如果使用专用分析器(如 nGram 或 EdgeNGram),可能需要从语义排名中排除该字段。 要深入了解如何标记字符串,请使用 测试分析器 REST API 查看分析器的标记输出。

    如何汇总输入

    准备好字符串后,现在可以通过计算机阅读理解和语言表示模型传递减少的输入,以确定哪些句子和短语提供了与查询相关的最佳摘要。 此阶段从将要进入语义排名程序的字符串中提取内容。

    汇总的输入是在准备阶段中为每个文档获取的长字符串。 汇总模型在每个字符串中都会找到最具代表性的一段。

  • 文档的 语义描述文字 。 每个标题都有纯文本版本和高亮版本,并且每个文档的标题通常少于 200 字。

  • 可选的 语义答案 ,假设你指定 answers 了 参数,则查询作为问题提出,并在长字符串中找到一个段落,该段落为问题提供了可能的答案。

    标题和答案始终是索引中的逐字文本。 此工作流中没有可创建或撰写新内容的生成 AI 模型。

    如何对摘要进行评分

    评分是通过字幕完成的。

  • 相对于提供的查询,标题会在概念和语义相关性方面进行评估。

  • @search.rerankerScore 根据描述文字的语义相关性分配给每个文档。 分数范围从 4 到 0(从高到低),分数越高表示越匹配。

  • 匹配项按分数降序列出,并包含在查询响应有效负载中。 有效负载包括答案、纯文本和突出显示的标题,以及在 select 子句中标记为可检索或指定的任何字段。

    从 2023 年 7 月 14 日开始, @search.rerankerScore 分布将发生变化。 无法确定对分数的影响,除非通过测试。 如果此响应属性具有硬阈值依赖项,请重新运行测试以了解阈值的新值。

    语义功能和限制

    语义搜索是一项较新的技术,因此必须设定对它可以做什么和不能执行的操作的预期。 它可以执行的操作:

  • 在语义上更接近原始查询意向的提升匹配项。

  • 查找要用作字幕和答案的字符串。 标题和答案在响应中返回,可以在搜索结果页上呈现。

    语义搜索不能做的是对整个语料库重新运行查询,以查找语义相关的结果。 语义搜索将重新计算 现有 结果集,由默认排名算法评分的前 50 个结果组成。 此外,语义搜索无法创建新信息或字符串。 从内容中逐字提取字幕和答案,因此如果结果不包含类似答案的文本,语言模型将不会生成。

    尽管语义搜索并非在每个方案中都有好处,但某些内容可以从其功能中获益匪浅。 语义搜索中的语言模型最适用于信息丰富并且为散文结构的可搜索内容。 知识库、联机文档或包含描述性内容的文档可以充分受益于语义搜索功能。

    基础技术来自必应和 Microsoft Research,并作为附加功能集成到认知搜索基础结构。 有关用于支持语义搜索的研究和 AI 投入的详细信息,请参阅 必应的 AI 功能如何为 Azure 认知搜索提供支持(Microsoft Research 博客)

    以下视频概要介绍功能。

    可用性和定价

    语义搜索在基本层和更高层的搜索服务上可用,具体取决于 区域可用性

    启用语义搜索时,请选择该功能的定价计划:

  • 在查询量较低的情况下(每月 1000 以下),语义搜索是免费的。
  • 在查询量较高时,选择标准定价计划。
  • 认知搜索定价页 显示不同货币和间隔的计费费率。

    如果查询请求包含 queryType=semantic 且搜索字符串不为空 ((例如,) ), search=pet friendly hotels in New York 则会收取语义搜索费用。 如果搜索字符串为空 ( search=* ) ,则即使 queryType 设置为 semantic,也不会收费。

  • 为搜索服务启用语义 搜索。
  • 配置语义排名 ,以便可以尝试对内容进行语义搜索。
  •