菜单

搜索应用

相关源文件

本文档介绍如何使用向量嵌入构建用于语义搜索的搜索应用程序。它涵盖了嵌入的基本概念、创建和搜索嵌入索引的过程,以及构建能够查找非结构化数据中相关信息的应用程序的实际实现细节。有关常规文本生成的信息,请参阅文本生成应用程序,有关基于聊天的交互,请参阅聊天应用程序

搜索应用程序简介

由生成式 AI 驱动的搜索应用程序通过理解文本的语义含义,超越了传统的关键词匹配。在此系统上下文中,搜索应用程序使用嵌入(文本的数值表示)来根据含义而不是精确的词语匹配来查找相关内容。

存储库中演示的主要用例是构建一个搜索工具,该工具允许学生通过自然语言提问来搜索教育性 YouTube 视频。该系统会返回视频中可找到相关答案的具体时间点的链接。

来源:08-building-search-applications/README.md8-15

传统的搜索(基于关键词)查找文本中的精确词语匹配,常常会遗漏使用不同术语表达相同概念的相关内容。语义搜索理解单词背后的含义,可以根据概念相似性返回结果。

以存储库中的示例为例:用户使用语义搜索查询“我梦想中的汽车”时,系统会理解其意图是查找关于理想汽车的信息,而不是关于汽车的梦想。语义搜索理解意图和上下文,而不仅仅是单个单词。

来源:08-building-search-applications/README.md40-44

理解文本嵌入

嵌入是文本的数值表示(向量),它捕获了语义含义。它们允许 AI 系统以数学方式理解和比较文本,从而实现语义搜索。

什么是嵌入?

嵌入将文本表示为高维空间中的点,其中含义相似的文本无论使用何种特定词语,都会被放置得更近。在该系统中,OpenAI 嵌入模型用于生成这些向量表示。

例如,文本“今天我们将学习 Azure 机器学习”可能会表示为由 1536 个数字组成的向量,其中每个数字代表文本含义的某个方面。

  1. 文本文件(在此例中为 YouTube 视频字幕片段)被转换为嵌入向量
  2. 用户查询也被转换为嵌入向量
  3. 系统查找与查询嵌入最相似的文档的嵌入
  4. 结果按相似度排序并返回给用户

来源:08-building-search-applications/README.md46-62 08-building-search-applications/README.md63-73

余弦相似度:核心搜索机制

余弦相似度是用于确定两个嵌入向量有多接近的技术。它衡量了多维空间中两个向量之间夹角的余弦值。

关于余弦相似度的要点

  • 值范围从 -1(完全相反)到 1(相同)
  • 含义相似的两个文本将具有高余弦相似度的嵌入
  • 它对于比较文档含义(无论长度如何)都很有效
  • 搜索过程包括计算查询嵌入和所有文档嵌入之间的余弦相似度

来源:08-building-search-applications/README.md78-86

构建嵌入索引

该存储库包含一个从 YouTube 视频字幕创建嵌入索引的过程,演示了如何为语义搜索准备数据。

  1. 从 YouTube 视频下载字幕
  2. 提取元数据(如说话者姓名)
  3. 将字幕分块成可管理的小段(3 分钟一段)
  4. 使用 OpenAI Chat API 为每个片段生成摘要
  5. 使用 OpenAI Embedding API 为每个片段创建嵌入
  6. 将嵌入、文本和元数据存储在索引中

对于生产应用程序,嵌入索引通常会存储在向量数据库中,如 Azure Cognitive Search、Redis、Pinecone 或 Weaviate。为简单起见,示例应用程序将索引存储在加载到 Pandas DataFrame 中的 JSON 文件中。

来源:08-building-search-applications/README.md63-76

实现搜索应用程序

实施过程涉及几个关键步骤:

  1. 创建和配置 Azure OpenAI 资源
  2. 加载嵌入索引
  3. 捕获用户查询
  4. 使用 OpenAI Embedding API 将查询转换为嵌入
  5. 计算查询嵌入与所有文档嵌入之间的余弦相似度
  6. 对结果进行排名并返回

设置 Azure OpenAI 服务

来源:08-building-search-applications/README.md98-149

搜索实现

核心搜索功能包括:

  1. 接收用户查询文本
  2. 使用 OpenAI API 将其转换为嵌入向量
  3. 计算此向量与索引中所有向量之间的余弦相似度
  4. 按相似度分数对结果进行排序
  5. 返回最相关的视频片段及时间戳

该应用程序不仅返回相关片段,还提供指向 YouTube 视频中确切时间戳的链接,这些链接提供了答案,因此对于教育用途非常有用。

来源:08-building-search-applications/README.md152-158

用于生产应用程序的向量数据库

虽然存储库中的示例使用了简单的 JSON 文件进行存储,但生产应用程序通常会使用专门的向量数据库,这些数据库专为大规模高效的相似性搜索而设计。

存储库中提到的一些选项包括:

  • Azure Cognitive Search
  • Redis
  • Pinecone
  • Weaviate

这些数据库经过优化,能够高效地存储和搜索嵌入向量,支持快速的最近邻搜索算法,这对于大规模语义搜索至关重要。

来源:08-building-search-applications/README.md76-77

与 OpenAI 的技术集成

该搜索应用程序与 Azure OpenAI 服务集成,特别是使用 text-embedding-ada-002 模型生成嵌入。这为将文档和查询转换为相同的向量空间提供了一种一致的方法。

关键配置详情

  • 使用的嵌入模型是 text-embedding-ada-002
  • 嵌入向量是 1536 维的
  • 身份验证需要 Azure OpenAI API 密钥
  • API 端点在配置中指定

Azure OpenAI 服务已部署,可通过 Azure Cloud Shell 访问,或以编程方式进行配置。

来源:08-building-search-applications/README.md100-149

与其他组件的关系

搜索应用程序是此系统中可以使用生成式 AI 构建的应用程序类型之一。它们与其他类型的应用程序互为补充:

  • 文本生成应用程序(#4.1)- 侧重于生成连贯的文本内容
  • 聊天应用程序(#4.2)- 支持对话式交互
  • 搜索应用程序(#4.3)- 以语义方式查找相关信息
  • 图像生成应用程序(#4.4)- 根据文本描述创建图像

搜索应用程序尤其与检索增强生成(RAG)概念(#5.1)相关,该概念结合了搜索功能和生成式响应。

来源:README.md68-91

结论

通过嵌入和语义搜索驱动的搜索应用程序与传统的基于关键词的搜索相比,提供了更直观、更有效的知识检索方式。通过理解文本的含义而不是仅仅匹配单词,这些应用程序可以提供更相关的结果,尤其是在教育和知识发现用例中。

本存储库中演示的基于嵌入的搜索方法为构建各种需要在大文本数据集中查找相关内容的应用程序奠定了基础。当与其他生成式 AI 功能结合使用时,它就能实现强大的系统,这些系统不仅可以查找信息,还可以理解和解释复杂信息。