Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法,它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本,因此搜索引擎会匹配与查询最相似的矢量,而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure 服务的集成,以及与矢量搜索开发相关的术语和概念

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

Azure AI 搜索中的矢量搜索是什么?

矢量搜索是一项新功能,用于从搜索索引为矢量嵌入编制索引,以及存储和检索矢量嵌入。 可以使用它来助力相似性搜索、多模式搜索、推荐引擎或实现检索增强生成 (RAG) 体系结构的应用程序。

下图显示了矢量搜索的索引编制和查询工作流。

file

在索引编制端,可以准备包含嵌入的源文档。 尽管集成矢量化目前是作为公共预览版提供的,但正式版 Azure AI 搜索不会生成嵌入。 如果你需要遵守非预览版功能策略,则你的解决方案应包含对 Azure OpenAI 或其他模型的调用,这些模型可以将图像、音频、文本和其他内容转换为矢量表示形式。 将_矢量字段_添加到 Azure AI 搜索上的索引定义中。 使用包含矢量的文档有效负载加载索引。 索引现在可供查询。

在查询端,可以在客户端应用程序中收集查询输入。 添加一个用于将输入转换为矢量的步骤,然后将矢量查询发送到 Azure AI 搜索上的索引以进行相似性搜索。 Azure AI 搜索在结果中返回包含所请求的 k 个最近邻域 (kNN) 的文档。

可以将矢量数据与字母数字内容一起作为文档中的字段编制索引。 矢量查询可以单独发出,也可以与筛选器和其他查询类型(包括同一搜索请求中的字词查询(混合搜索)和语义排名)结合发出。

可用性和定价

矢量搜索作为所有区域中所有 Azure AI 搜索层级的一部分提供,不收取额外的费用。

备注

在 2019 年 1 月 1 日之前创建的一些较旧搜索服务部署在不支持矢量工作负载的基础结构上。 如果你在尝试将矢量字段添加到架构时收到错误,则原因是服务已过时。 在这种情况下,必须创建新的搜索服务来试用矢量功能。

矢量搜索支持哪些方案?

矢量搜索适合的方案包括:

  • 对文本进行矢量搜索。 使用嵌入模型(例如 OpenAI 嵌入)或开源模型(例如 SBERT)对文本进行编码,并使用同样编码为矢量的查询检索文档。

  • 跨不同数据类型进行矢量搜索(多模式)。 对图像、文本、音频和视频甚至它们的混合形式进行编码(例如,使用 CLIP 等模型),并对它们执行相似性搜索。

  • 多语言搜索。 使用多语言嵌入模型在单个矢量空间中以多种语言表示文档,以查找文档,无论它们采用哪种语言。

  • 混合搜索。 矢量搜索是在字段级别实现的,这意味着,你可以生成包含矢量字段和可搜索文本字段的查询。 查询将并行执行,结果将合并为单个响应。 (可选)添加[语义排名],以使用为必应提供支持的相同语言模型进行 L2 重新排名,从而获得更高的准确度。

  • 筛选的矢量搜索。 查询请求可以包含矢量查询和[筛选表达式]。 筛选器适用于文本和数字字段,可用于元数据筛选,并且在根据筛选条件包含或排除搜索文档时非常有用。 尽管矢量字段本身不可筛选,但你可以设置可筛选的文本或数字字段。 搜索引擎可以在执行矢量查询之前或之后处理筛选器。

  • 矢量数据库。 使用 Azure AI 搜索作为矢量存储来充当大型语言模型 (LLM) 或其他应用程序的长期内存或外部知识库。 例如,对于检索增强生成 (RAG) 应用程序,可以将 Azure AI 搜索用作 [Azure 机器学习提示流中的_矢量索引_]。

可以使用其他 Azure 服务来提供嵌入和数据存储。

  • Azure OpenAI 提供嵌入模型。 演示和示例针对 [text-embedding-ada-002] 和其他模型。 我们建议使用 Azure OpenAI 来生成文本嵌入。

  • [图像检索矢量化图像 API(预览版)]支持图像内容的矢量化。 我们建议使用此 API 来生成图像嵌入。

  • Azure AI 搜索可以自动为来自两个数据源的矢量数据编制索引:[Azure Blob 索引器]和 [Azure Cosmos DB for NoSQL 索引器]。

  • LangChain 是用于开发由语言模型提供支持的应用程序的框架。 使用 Azure AI 搜索矢量存储集成可以简化使用 LLM 的、将 Azure AI 搜索用作矢量数据存储的应用程序的创建。

  • 语义内核是一个轻型 SDK,可用于将 AI 大型语言模型 (LLM) 与传统编程语言集成。 它很适合用于在将输入发送到嵌入模型的较大工作流中对大型文档进行分块。

矢量搜索概念

如果你不熟悉矢量,本部分将解释一些核心概念。

关于矢量搜索

矢量搜索是一种信息检索方法,其中的文档和查询表示为矢量而不是纯文本。 在矢量搜索中,机器学习模型生成源输入(可以是文本、图像、音频或视频内容)的矢量表示形式。 使用内容的数学表示形式可为搜索方案提供共同的基础。 如果所有内容都是矢量,则查询可以在矢量空间中查找匹配项,即使关联的原始内容与查询位于不同的媒体中或采用不同的语言。

为何使用矢量搜索

矢量可以使用机器学习模型来捕获上下文中单词和短语的含义,而不是仅仅依赖于词法分析和单个查询字词的匹配,因而克服了传统的基于关键字的搜索的局限性。 通过捕获查询的意图,即使文档中不存在确切的字词,矢量搜索也可以返回符合用户需求的更相关结果。

此外,矢量搜索可应用于不同类型的内容,例如图像和视频,而不仅仅是文本。 这使得新的搜索体验成为可能,例如多语言应用程序中的多模式搜索或跨语言搜索。

嵌入和矢量化

_嵌入_是内容或查询的一种特定矢量表示形式,它们由捕获文本语义或其他内容(例如图像)的表示形式的机器学习模型创建。 自然语言机器学习模型已基于大量的数据进行训练,可以识别单词之间的模式和关系。 在训练过程中,他们会试着在一个称为_编码器_的中间步骤中将任何输入表示为实数矢量。 训练完成后,可以修改这些语言模型,使中间矢量表示形式成为模型的输出。 生成的嵌入是高维矢量,其中具有相似含义的单词在矢量空间中距离更近,如了解嵌入 (Azure OpenAI)中所述。

矢量搜索在检索相关信息方面的有效性取决于嵌入模型将文档和查询的含义提取到结果矢量中的有效性。 最佳模型已基于其所代表的数据类型进行了全面的训练。 你可以评估现有模型(例如 Azure OpenAI text-embedding-ada-002),引入自己的、已直接在问题空间中训练的模型,或者微调通用模型。 Azure AI 搜索不会对你选择的模型施加限制,因此请选择最适合你的数据的模型。

若要为矢量搜索创建有效的嵌入,必须考虑到输入大小限制。 我们建议在生成嵌入之前按照数据分块准则进行操作。 这种最佳做法可确保嵌入准确捕获相关信息并实现更高效的矢量搜索。

什么是嵌入空间?

_嵌入空间_是矢量查询的语料库。 在搜索索引中,它是填充了来自同一嵌入模型的嵌入的所有矢量字段。 机器学习模型通过将各个单词、短语或文档(用于自然语言处理)、图像或其他形式的数据映射到由实数(表示高维空间中的坐标)矢量组成的表示形式,来创建嵌入空间。 在此嵌入空间中,相似的项位置相互靠近,而不相似的项位置相距较远。

例如,谈论不同种类的狗的文档将在嵌入空间中紧密聚类到一起。 有关猫的文档也会相互接近,但与狗的聚类相距较远,不过它们仍属于动物的邻域。 云计算等不同的概念则与此有很大的差异。 在实践中,这些嵌入空间是抽象的,没有明确定义的、人类可解释的含义,但核心思想保持不变。

最近邻域搜索

在矢量搜索中,搜索引擎将搜索嵌入空间中的矢量,以识别那些接近查询矢量的矢量。 此技术称为_最近邻域搜索_。 最近邻域有助于量化项之间的相似性。 矢量高度相似性表明原始数据也相似。 为了帮助实现快速的最近邻域搜索,搜索引擎将执行优化或采用数据结构或数据分区来减少搜索空间。 每种矢量搜索算法都会提供不同的方法来解决此问题,并权衡不同的特征,例如延迟、吞吐量、召回率和内存。 为了计算相似性,相似性指标提供了用于计算此距离的机制。

Azure AI 搜索目前支持以下算法:

  • 分层可导航小世界 (HNSW):HNSW 是一种领先的 ANN 算法,它已针对数据分布未知或可能频繁变化的高召回率、低延迟应用程序进行优化。 它将高维数据点组织成分层图形结构,从而实现快速且可缩放的相似性搜索,同时允许在搜索准确度和计算成本之间进行可优化的权衡。 由于该算法要求所有数据点都驻留在内存中以便能够快速随机访问,因此它会消耗[矢量索引大小]配额。

  • 穷举 K 最近邻域(KNN):计算查询矢量与所有数据点之间的距离。 这是一种计算密集型算法,因此最适合较小的数据集。 由于该算法不要求快速随机访问数据点,因此不消耗矢量索引大小配额。 但是,该算法将提供全局最近邻域集。

在索引定义中,可以指定一种或多种算法,然后为每个矢量字段指定要使用的算法:

  • [创建矢量索引],以指定索引和字段中的算法。

  • 对于穷举 KNN,请使用面向任一 REST API 版本的 [2023-11-01]、[2023-10-01-Preview]或 Azure SDK Beta 版库。

在索引创建过程中用于初始化索引的算法参数是不可变的,并且在索引生成后无法更改。 但是,可以修改影响查询时特征 (efSearch) 的参数。

此外,指定 HNSW 算法的字段还支持使用[查询请求]参数 "exhaustive": true 执行穷举 KNN 搜索。 但是反过来则不适用。 如果针对 exhaustiveKnn 将某个字段编制索引,则无法在查询中使用 HNSW,因为实现高效搜索的其他数据结构不存在。

近似最近邻域

近似最近邻域搜索 (ANN) 是一种用于在矢量空间中查找匹配项的算法。 此类算法采用不同的数据结构或数据分区方法来显著减少搜索空间,以加速查询处理。

ANN 算法牺牲了一些准确度,但提供了可缩放且更快的近似最近邻域检索,这使得它们非常适合用于在现代信息检索应用程序中平衡准确度和效率。 你可以调整算法的参数,以微调搜索应用程序的召回率、延迟、内存和磁盘占用空间要求。

Azure AI 搜索将 HNSW 用于其 ANN 算法。

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DPDK系列之三十六报文转发

一、网络报文处理 学过网络通信的都知道,其实在网络的底层数据就是一包(帧)包的。换句话说,所有的网络设备转发的其实就是一包包的二进制流数据。对设备或者驱动来说,这些数据没有什么任何意义,它们只是负…

Web之HTML笔记

Web之HTML、CSS、JS Web标准一、HTML(超文本标记语言)HTML 基本结构标签常用标签1.font标签2.p标签3.注释4.h系列标题5.img6.超链接a7.列表8.表格9.表单 Web之CSS笔记 Web标准 结构标准用于对网页元素进行整理和分类(HTML)表现标准用于设置网页元素的版…

LoRa模块空中唤醒功能原理和物联网应用

LoRa模块是一种广泛应用于物联网领域的无线通信模块,支持低功耗、远距离和低成本的无线通信。 其空中唤醒功能是一项重要的应用,可以实现设备的自动唤醒,从而在没有人工干预的情况下实现设备的远程监控和控制。 LoRa模块空中唤醒功能的原理…

HTTPS加密为什么能保证网络安全?

随着互联网的普及和发展,网络安全问题日益严重。为了保护用户的隐私和数据安全,许多网站都采用了HTTPS加密技术。那么,HTTPS加密为什么可以保证网络安全呢? 原因是HTTP协议采用的是数据明文传输方式。用户从客户端浏览器提交数据…

SHELL中的数组及其相关操作

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改) 数组 在shell中,可以使用数组来存储和操作一组数据。数组是由一个或多个元素组成的有序集合&am…

springboot生成PDF,并且添加水印

/*** 导出调查问卷*/ApiLog("导出调查问卷")PostMapping("/print/{id}")ApiOperationSupport(order 23)ApiOperation(value "导出报告", notes "导出报告")public void print(PathVariable Long id, HttpServletResponse response…

CentOS7设置 redis 开机自启动

CentOS7设置 redis 开机自启动 步骤1.创建redis.service文件2.重新加载所有服务3.设置开机自启动4.自由地使用linux系统命令4.1.启动 Redis 服务4.2.查看 Redis 状态(-l:查看完整的信息)4.3.停止 Redis 服务4.4.重启 Redis 服务 步骤 如果你傲娇,不想拷贝&#xff0…

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因,您可能想要将 PDF 转换为 HTML。例如,您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中,您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…

虹科示波器 | 汽车免拆检修 | 2015款奔驰G63AMG车发动机偶尔自动熄火

一、故障现象 一辆2015款奔驰G63AMG车,搭载157发动机,累计行驶里程约为9.4万km。车主反映,该车低速行驶时,发动机偶尔会自动熄火,故障大概1个星期出现1次。 二、故障诊断 接车后路试,故障未能再现。用故障检…

机器人制作开源方案 | 智能快递付件机器人

一、作品简介 作者:贺沅、聂开发、王兴文、石宇航、盛余庆 单位:黑龙江科技大学 指导老师:邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响,大学校园内都采取封闭式管理来降低传染的风险,导致学生不能外出&#xff0c…

GNU gold链接器 - target.cc 实现特定目标架构的支持

一、Target::do_is_local_label_name(const char* name) const 1. object.cc 中 调用target().is_local_label_name(name) 这段代码是在链接器中用于决定是否应该丢弃本地符号的部分。它包含了一些逻辑,以便在满足特定条件时丢弃本地符号。下面是关键部分的解释&…

SpringCloud微服务:Nacos和Eureka的区别

目录 配置: 区别: ephemeral设置为true时 ephemeral设置为false时(这里我使用的服务是order-service) 1. Nacos与eureka的共同点 都支持服务注册和服务拉取 都支持服务提供者心跳方式做健康检测 2. Nacos与Eu…

【git】一些容易混淆的操作

git clone vs git init: git clone:用于从现有的 Git 仓库复制一个副本到本地。这通常是参与一个已存在项目的起始步骤。git init:用于在本地创建一个新的 Git 仓库。这是开始一个全新项目的第一步。 git add vs git commit: git add:将更改…

在服务器导出kafka topic数据

使用Kafka自带的工具:Kafka提供了一个命令行工具kafka-console-consumer,可以用来消费指定Topic的数据并将其打印到控制台。 1.打印到控制台 命令如下: kafka-console-consumer.sh --bootstrap-server $kafkaHost --topic $topicName --from-…

【广州华锐互动】VR可视化政务服务为公众提供更直观、形象的政策解读

虚拟现实(VR)技术正在逐渐应用于政务服务领域,为公众提供更加便捷、高效和个性化的服务体验。通过VR眼镜、手机等设备,公众可以在虚拟环境中参观政务服务中心,并根据自己的需求选择不同的办事窗口或事项进行咨询和办理…

06-流媒体-YUV数据在SDL控件显示

整体方案: 采集端:摄像头采集(YUV)->编码(YUV转H264)->写封装(H264转FLV)->RTMP推流 客户端:RTMP拉流->解封装(FLV转H264&#xff09…

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)

LEFT JOIN LEFT JOIN 同样用于关联两个表,ON 关键字后指定两个表共有的字段作为匹配条件,与 INNER JOIN 不同的地方在于匹配不上的数据行,INNER JOIN 对两表匹配不上的数据行不返回结果,而 LEFT JOIN 只对右表(table2…

Rust根据条件删除相邻元素:dedup

文章目录 示例dedup_bydedup_by_key Rust系列:初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信 示例 Rust中的动态数组Vec提供了dedup函数,用于删除相邻重复元素。此外,还提供了dedup_by和dedup_by_key,可…

STM32外部中断(EXTI)与RTOS多任务处理的协同设计

当在STM32上使用外部中断(EXTI)与RTOS(Real-Time Operating System,实时操作系统)进行多任务处理时,需要设计合适的协同机制,以确保可靠的中断处理和任务调度。在下面的概述中,我将介…

【shell 常用脚本30例】

先了解下编写Shell过程中注意事项 开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:全局变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的&#xf…