本文将介绍企业在没有向量数据的情况下,如何通过 Ope nSearch 向量检索版,快速搭建图像搜索服务。
用户可以直接导入图片源数据,在 OpenSearch 内部便捷的完成图片向量化、向量搜索等步骤,实现以图搜图、以文搜图等多种图像检索能力。
方案架构
用户可以通过 4 种不同的方式上传图片进行图搜引擎的搭建 :
-
OSS+MaxCompute+OpenSearch 向量检索版:用户先将图片上传至 OSS 中,在 MaxCompute 中存储业务表数据以及每条数据对应的图片地址(OSS 里的路径,比如/image/1.jpg)。
-
MaxCompute+OpenSearch 向量检索版:用户将图片通过 base64 编码后的图片及其表数据存储在 MaxCompute 中。
-
API+OpenSearch 向量检索版:用户通过 OpenSearch 向量检索版提供的数据推送接口,将 base64 编码后的图片及其表数据推送到 OpenSearch 向量检索版实例中。
-
数据湖构建(DLF)+OpenSearch 向量检索版:用户将图片数据迁移到数据湖构建 DLF 2.0 Catalog 下的数据表中。
本文演示的是 OSS+MaxCompute+OpenSearch 向量检索版搭建图搜引擎。
环境准备
1.创建 AK 和 SK
第一次开通阿里云账号并登录控制台时,会提示先创建 access key 才能继续使用。
-
创建及使用应用依赖 access key 参数,主账号下 access key 参数不能为空。
-
在为主账号创建 access key 参数后,还可以再创建 RAM 子账号 access key 通过 RAM 子账号进行访问,RAM 子账号赋予对应访问权限,请参考 RAM(子账号)的创建及授权 。
2.创建对象存储 OSS
-
添加 opensearch 标签:(key-value 值均为 opensearch)
本文在 OSS 中上传了 1000 张图片:
部分图片类型如下:
购买 OpenSearch 向量检索版实例
购买实例可参考 购买 OpenSearch 向量检索版实例 。
配置实例
在 实例列表 页面,找到新购买的实例,其状态为“待配置”,需要完成表的配置后,才可正常搜索。
1. 表基础信息
配置说明 :
-
表名称 :可自定义
-
数据分片数 :分片数设置时,请填写不超过 256 的正整数, 用于提升全量构建速度、单次查询性能。(部分存量实例,仍需各索引表分片数保持一致;或至少一个索引表分片数为 1,其余索引表分片数一致)
-
数据更新资源数 :数据更新所用资源数,每个索引默认免费提供 2 个 4 核 8G 的更新资源,超出免费额度的资源将产生费用,详情可参考 向量检索版计费概述 。
-
场景模板 :选择“向量:图片搜索”。
2. 数据同步
全量数据来源选择 MaxCompute+API 方式,依次完成参数配置,最后需要通过数据来源校验,才能进行下一步的操作。
配置参数说明 :
-
AccessKey:阿里云账号或 RAM 用户的 AccessKey ID。
-
AccessKey Secret:AccessKey ID 对应的 AccessKey Secret。
-
项目名 (Project):访问的目标 MaxCompute 项目名称。
-
表名 (Table):访问的目标 MaxCompute 表名。
-
表数据分区 (Partition):MaxCompute 数据源必须设置分区键; 示例:ds=20170626。
-
自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建。
开启自动索引重建,则必须创建 done 表,创建方式可参考 自动索引重建 。
3. 字段配置
向量检索版会根据选择的场景模板,预置相关字段,并将全量数据来源中的字段,自动导入字段列表中,下图是「 向量:图片搜索」 模板包含 4 个预置字段。
字段配置说明:
-
预设字段 : 1.id(主键)、2.source_image(源图片)、3.namespace(命名空间)、4.source_image_vector(源图片向量)。
-
必选字段:主键字段和向量字段,主键字段为 int 或 string 类型并且需要勾选主键按钮,向量字段为 float 类型并且需要勾选向量字段按钮。
-
向量字段默认为多值的 float 类型,控制台建表默认采用英文逗号切分,支持自定义多值分隔符。
-
图片向量化的字段,需要在 需数据预处理 中勾选 去配置 ,对 source_image 预设字段 进行配置。
-
使用向量检索,在定义字段时有位置要求,需要按照主键字段、命名空间字段(非必要)、向量字段的顺序创建(如上图所示)。
字段 source_image 数据预处理配置说明:
-
数据来源:有 OSS 对象存储和 Base64 编码的两种数据类型选项。
-
OSS 对象存储:需要填写 OSS 路径,其实是将图片存储在 OSS 的文件夹里面,从 OSS 直接导入。
-
Base64 编码:相当于需要先将图片进行一次编码,然后存储在数据库中,或者直接用 API 方式进行传输。
-
-
预处理模板:会根据要进行预处理的数据类型(文本或图片)而展示不同模板,由于字段的数据是图片类型,所以此时预处理模板展示的分别为(1.图片向量化、2.OCR 图片文字识别、3.OCR 图片文字识别+图片向量化)三种模板。
-
服务列表:
-
选定预处理模板后,自动出现模板下的服务列表,展示该模板下所用到的模型种类。
-
可选的模型有两个来源:
-
AI 平台 OCR 图片文字识别/文本向量服务
-
OCR 图片文字识别:针对架构图、分析图表等图片数据,AI 搜索开放平台提供图片内容理解服务,可基于多模态大模型对图片内容进行解析理解以及文字识别,也可基于 OCR 能力对图片文字进行识别,将文字信息提取出来,用于图片检索及问答等场景。
-
文本向量化:提供将文本数据转化为稠密向量形式表达的服务,支持多款不同语言、输入长度、输出维度的文本向量模型,可用于信息检索、文本分类、相似性比较等场景。
-
-
-
生成字段:原始图片数据经过模型处理后,会被自动转化为其他格式,生成新的字段内容
-
embedding 处理类的服务,默认必须生成字段。
-
ocr 服务可选是否生成字段。
-
-
接口调用配置:为了成功访问 AI 搜索开放平台,需要完成工作空间、API Key、连接域名的设置。
4. 索引结构
配置说明:
-
向量索引名称与向量字段名称相同。
-
包含字段为主键、向量字段、命名空间字段可选。
-
高级配置可按需要填写,详情可参考 向量索引通用配置 。
5. 确认创建
点击确认创建,完成表的创建,在左侧导航栏 日志记录 > 变更历史 ,可以查看表的创建进度,当状态显示完成后,就可以进行查询测试的操作。
查询测试
1.控制台查询测试
在左侧导航栏选择 向量管理 > 查询测试 ,控制台的查询测试功能同时支持表单/开发者模式,控制台查询用法可以参考: 查询测试 。
1.1 表单模式
依次选择好 表单模式 > 表名 , Query 类型 以图片类型为例(支持向量、文本、图片三种方式), 图片提供方式 选择上传图片文件,完成查询图片的上传后,点击搜索就可以在搜索结果栏中查看到结果。
1.2 开发者模式
依次选择好 开发者模式 > 表名 ,在下方的搜索框内输入查询参数,完成后点击搜索就可以在右侧的结果栏内看到查询结果。
字段说明 :
-
vector:具体要查询的向量
-
topK:取 top K 个结果
-
includeVector:是否返回文档中的向量信息
详细的查询语法可参考下方的语法说明。
2.SDK 查询
查询示例 :可参考 预测查询 。
结果展示 :
{
"totalCount": 5,
"result": [
"id": 5,
"score": 1.103209137916565
"id": 3,
"score": 1.1278988122940064
"id": 2,
"score": 1.1326735019683838
"totalTime": 242.615
}
result 中记录着返回结果。