基于向量检索服务与ModelScope模型搭建文本搜图片---魏红斌版

简介: 【1月更文挑战第9天】综合产品理解和实操经验,总结向量检索服务的综合水平

一、产品理解及总结

     今天测评的是一款名为DashVector的向量检索服务,由阿里云通义实验室自主研发,基于高效的Proxima内核引擎,提供了一种云原生、全托管且具备水平拓展能力的服务,专为各类AI应用场景解决高效向量检索难题。

image.png

经过两天对其产品文档的研读和实操效果的总结如下:

在功能特性方面:能够实现多维度高精度检索,灵活调整算法以满足不同场景下的精度和性能平衡需求。实时在线更新能力使得大规模向量索引构建与查询无缝衔接,做到即时落盘与动态更新。同时,通过工程优化和算法调优,我能够在保证高性能的同时降低成本,实现对多种场景的良好适配,包括处理超大规模索引构建与检索,以及支持标签+向量的组合检索。

在实例类型上:我提供了性能型、存储型和免费试用三种选项。性能型适用于高并发低延迟场景;存储型拥有更大存储容量,适合大规模数据管理,并具有较高性价比;而免费试用则方便用户测试和体验。

关于计费方式:目前我仅支持按量付费,即创建后每小时根据实例规格单价、计费时长和副本数量自动扣费,计费周期精确到秒。用户可以按需选择合适的实例类型,充分利用我的强大功能,为电商智能搜索推荐、AI问答系统、多模态搜索、视频检索以及分子检测筛选等场景提供有力支撑。

image.png

二、实操体验及步骤

     结合阿里云向量检索服务DashVectorModelScope的中文CLIP多模态模型,实现基于文本搜图片的实时跨模态检索功能。整个实践过程主要分为两个关键阶段:

一、图片数据Embedding入库阶段

     首先从多模态牧歌数据集的验证集中获取图片,并通过调用ModelScope上训练精良的中文CLIP模型接口将其转化为高维向量表示。随后,将这些生成的图片向量写入到DashVector服务中存储。同时为了便于后续展示,原始图片数据也将被编码后一并入库。

二、文本Query检索阶段

     在完成图片数据的向量化及入库之后,用户可输入任意文本进行检索。系统会再次利用相同的CLIP模型计算该文本的Embedding向量,然后通过DashVector服务提供的检索API对接口,高效地搜索出与输入文本最相似的图片。

在实操前,需确保已完成以下准备:

开通并向量检索服务DashVector并创建API-KEY。

准备相应的Python环境,安装dashvector、modelscope及其依赖库。(可用notebook)

使用MsDataset加载多模态牧歌数据集作为图片素材来源。

实操步骤如下:

     通过以下步骤,即可构建一个基于多模态模型和向量检索技术的实时文本图像检索系统,有效提升图文检索场景的表现效果。

(一)申请和进入服务台

点击试用选择自己的实例名称确认相关协议,点击试用并进入服务台

image.png

image.png

服务台网址:https://dashvector.console.aliyun.com/cn-hangzhou/overview

image.png

(二)了解服务台基本架构并创建API-key

浏览服务台看到有cluster下有一个实例,并且点击创建api-key

image.png

image.png

(三)应用魔搭社区notebook进行结合

打开魔搭社区https://modelscope.cn/my/mynotebook/preset启动CPU环境,打开终端输入以下命令

image.png

# 安装 dashvector 客户端pip3 install dashvector
# Python需要更新到3.7以上pip install --upgrade pip
# 安装 modelscopepip3 install --upgrade modelscope -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html

image.pngimage.png

(四)准备数据

调用ModelScope的数据集接口获取

frommodelscope.msdatasetsimportMsDatasetdataset=MsDataset.load("muge", split="validation")

image.png

(五)图片数据Embedding入库

输入如下代码,同时注意API-KAY及CLUSTER_ENDPOINT要从下述图片位置寻找相关代码

importtorchfrommodelscope.utils.constantimportTasksfrommodelscope.pipelinesimportpipelinefrommodelscope.msdatasetsimportMsDatasetfromdashvectorimportClient, Doc, DashVectorException, DashVectorCodefromPILimportImageimportbase64importiodefimage2str(image):
image_byte_arr=io.BytesIO()
image.save(image_byte_arr, format='PNG')
image_bytes=image_byte_arr.getvalue()
returnbase64.b64encode(image_bytes).decode()
if__name__=='__main__':
# 初始化 dashvector clientclient=Client(
api_key='{your-dashvector-api-key}',
endpoint='{your-dashvector-cluster-endpoint}'    )
# 创建集合:指定集合名称和向量维度, CLIP huge 模型产生的向量统一为 1024 维rsp=client.create('muge_embedding', 1024)
ifnotrsp:
raiseDashVectorException(rsp.code, reason=rsp.message)
# 批量生成图片Embedding,并完成向量入库collection=client.get('muge_embedding')
pipe=pipeline(task=Tasks.multi_modal_embedding,
model='damo/multi-modal_clip-vit-huge-patch14_zh', 
model_revision='v1.0.0')
ds=MsDataset.load("muge", split="validation")
BATCH_COUNT=10TOTAL_DATA_NUM=len(ds)
print(f"Start indexing muge validation data, total data size: {TOTAL_DATA_NUM}, batch size:{BATCH_COUNT}")
idx=0whileidx<TOTAL_DATA_NUM:
batch_range=range(idx, idx+BATCH_COUNT) ifidx+BATCH_COUNT<=TOTAL_DATA_NUMelserange(idx, TOTAL_DATA_NUM)
images= [ds[i]['image'] foriinbatch_range]
# 中文 CLIP 模型生成图片 Embedding 向量image_embeddings=pipe.forward({'img': images})['img_embedding']
image_vectors=image_embeddings.detach().cpu().numpy()
collection.insert(
            [
Doc(
id=str(img_id),
vector=img_vec,
fields={'png_img': image2str(img)}
                )
forimg_id, img_vec, imginzip(batch_range, image_vectors, images)
            ]
        )
idx+=BATCH_COUNTprint("Finish indexing muge validation data")

image.png

image.png

image.png

image.png

(六)文本Query检索及展示结果

通过DashVector向量检索服务的检索接口,快速检索相似的图片,输入下方代码进行测验,同时也要注意API-KAY及CLUSTER_ENDPOINT

importtorchfrommodelscope.utils.constantimportTasksfrommodelscope.pipelinesimportpipelinefrommodelscope.msdatasetsimportMsDatasetfromdashvectorimportClient, Doc, DashVectorExceptionfromPILimportImageimportbase64importiodefstr2image(image_str):
image_bytes=base64.b64decode(image_str)
returnImage.open(io.BytesIO(image_bytes))
defmulti_modal_search(input_text):
# 初始化 DashVector clientclient=Client(
api_key='{your-dashvector-api-key}',
endpoint='{your-dashvector-cluster-endpoint}'    )
# 获取上述入库的集合collection=client.get('muge_embedding')
# 获取文本 query 的 Embedding 向量pipe=pipeline(task=Tasks.multi_modal_embedding,
model='damo/multi-modal_clip-vit-huge-patch14_zh', model_revision='v1.0.0')
text_embedding=pipe.forward({'text': input_text})['text_embedding']  # 2D Tensor, [文本数, 特征维度]text_vector=text_embedding.detach().cpu().numpy()[0]
# DashVector 向量检索rsp=collection.query(text_vector, topk=3)
image_list=list()
fordocinrsp:
image_str=doc.fields['png_img']
image_list.append(str2image(image_str))
returnimage_listif__name__=='__main__':
text_query="眼镜"images=multi_modal_search(text_query)
forimginimages:
# 注意:show() 函数在 Linux 服务器上可能需要安装必要的图像浏览器组件才生效# 建议在支持 jupyter notebook 的服务器上运行该代码img.show()

image.png

image.png

cpu运行时间较长,请耐心等待。。。

(七)实操视频

三、体验和展望

     我是在 cpu 环境下运行,在 gpu 环境下会视 gpu 性能得到不同程度的性能提升,所以可能慢了一些,但是效果还是有目共睹的,通过整合前沿的多模态预训练模型CLIP与先进的向量检索引擎DashVector,我们成功构建了一套高效智能的文本驱动图片搜索系统。

     在实践操作中,海量图片数据通过CLIP模型转化为语义稠密空间中的向量表示,进而被DashVector索引优化以实现亚秒级的检索速度。用户输入的任意文本也能转换为对应向量,并在庞大的图像数据库中寻找到语义最为匹配的结果。这一创新应用不仅体现了深度学习技术在跨模态信息检索领域的突破性进展,还揭示了理论研究与实际工程紧密结合所带来的巨大价值,为今后智能化信息服务的设计与实施树立了典范。

目录
相关文章
|
2天前
|
自然语言处理
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
19 1
|
2天前
|
API 语音技术
ModelScope-FunASR**有支持热词又支持时间戳的模型**。
【2月更文挑战第30天】ModelScope-FunASR**有支持热词又支持时间戳的模型**。
35 2
|
2天前
|
人工智能 API 决策智能
Modelscope结合α-UMi:基于Modelscope的多模型协作Agent
基于单个开源小模型的工具调用Agent,由于模型容量和预训练能力获取的限制,无法在推理和规划、工具调用、回复生成等任务上同时获得比肩大模型等性能。
|
2天前
|
文字识别 并行计算 语音技术
ModelScope问题之下载模型文件报错如何解决
ModelScope模型报错是指在使用ModelScope平台进行模型训练或部署时遇到的错误和问题;本合集将收集ModelScope模型报错的常见情况和排查方法,帮助用户快速定位问题并采取有效措施。
279 3
|
2天前
|
数据采集 自然语言处理 搜索推荐
ModelScope问题之模型encoder配置报错如何解决
ModelScope模型报错是指在使用ModelScope平台进行模型训练或部署时遇到的错误和问题;本合集将收集ModelScope模型报错的常见情况和排查方法,帮助用户快速定位问题并采取有效措施。
88 0
|
2天前
|
人工智能 达摩院 自然语言处理
超好用的开源模型平台,ModelScope阿里达摩院
超好用的开源模型平台,ModelScope阿里达摩院
110 1
|
2天前
|
人工智能 自然语言处理 搜索推荐
魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
【2月更文挑战第9天】魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
223 3
|
2天前
|
API
使用ModelScope平台进行模型验证时
【2月更文挑战第9天】使用ModelScope平台进行模型验证时
68 4
|
2天前
|
机器学习/深度学习 测试技术 TensorFlow
ModelScope模型使用与EAS部署调用
本文以魔搭数据的模型为例,演示在DSW实例中如何快速调用模型,然后通过Python SDK将模型部署到阿里云PAI EAS服务,并演示使用EAS SDK实现对服务的快速调用,重点针对官方关于EAS模型上线后示例代码无法正常调通部分进行了补充。
|
2天前
modelscope-funasr怎么拿验证集评估微调后的模型效果呢
【2月更文挑战第19天】modelscope-funasr怎么拿验证集评估微调后的模型效果呢
36 1