向量数据库实战:选型、调优与落地~系列文章15:多模态向量搜索:图片、音频、视频统一检索的工程实现

发布时间:2026/7/23 17:44:08
向量数据库实战:选型、调优与落地~系列文章15:多模态向量搜索:图片、音频、视频统一检索的工程实现 多模态向量搜索图片、音频、视频统一检索的工程实现 ️本文是《向量数据库实战选型、调优与落地》专栏第 15 篇⏱️阅读时间约 13 分钟 开篇不只是文本2025 年AI 应用早已不局限于文本——淘宝拍照搜同款拍一张照片找到相似商品 抖音内容推荐根据视频内容推荐相似视频 Spotify 歌曲推荐根据音频特征推荐相似音乐 这些背后的核心技术就是多模态向量搜索 多模态 Embedding 模型核心思想多模态模型能把不同类型的媒体文本、图片、音频映射到同一个向量空间中。┌─────────────────────────────────────────────────────────┐ │ 多模态向量空间 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 文本: 一只猫在草地上玩耍 │ │ → [0.12, -0.34, 0.56, ...] │ │ ↕ 距离很近 │ │ 图片: 猫在草地上的照片 │ │ → [0.13, -0.33, 0.55, ...] │ │ ↕ 距离较远 │ │ 图片: ️城市汽车照片 │ │ → [0.89, 0.12, -0.45, ...] │ │ │ │ 文本和图片在同一个向量空间中 │ │ → 可以用文本搜图片也可以用图片搜文本 │ │ │ └─────────────────────────────────────────────────────────┘主流多模态模型模型类型维度支持模态开源CLIP图文512/768文本图片✅SigLIP图文1024文本图片✅ImageBind多模态1024文本图片音频视频深度热成像✅Chinese-CLIP图文中文768中文文本图片✅Jina CLIP v2图文768文本图片✅ 实战图文混合搜索Step 1使用 CLIP 生成多模态向量importtorchfromtransformersimportCLIPModel,CLIPProcessor# 加载中文 CLIP 模型modelCLIPModel.from_pretrained(OFA-Sys/chinese-clip-vit-large-patch14)processorCLIPProcessor.from_pretrained(OFA-Sys/chinese-clip-vit-large-patch14)# 文本向量化defencode_text(text):inputsprocessor(text[text],return_tensorspt,paddingTrue)withtorch.no_grad():text_featuresmodel.get_text_features(**inputs)returntext_features[0].numpy()# 图片向量化defencode_image(image_path):fromPILimportImage imageImage.open(image_path)inputsprocessor(imagesimage,return_tensorspt)withtorch.no_grad():image_featuresmodel.get_image_features(**inputs)returnimage_features[0].numpy()# 测试text_vecencode_text(一只可爱的猫咪)image_vecencode_image(cat_photo.jpg)# 计算相似度fromnumpy.linalgimportnorm similaritynp.dot(text_vec,image_vec)/(norm(text_vec)*norm(image_vec))print(f文本和图片的相似度:{similarity:.4f})Step 2存入向量数据库frompymilvusimportCollection,FieldSchema,DataType# 创建多模态集合fields[FieldSchema(nameid,dtypeDataType.INT64,is_primaryTrue,auto_idTrue),FieldSchema(namecontent_type,dtypeDataType.VARCHAR,max_length20),# text/image/videoFieldSchema(nameoriginal_text,dtypeDataType.VARCHAR,max_length65535),FieldSchema(nameimage_url,dtypeDataType.VARCHAR,max_length1024),FieldSchema(nameembedding,dtypeDataType.FLOAT_VECTOR,dim768),# CLIP 维度]schemaCollectionSchema(fieldsfields)collectionCollection(multimodal,schema)# 插入文本数据text_embeddingencode_text(向量数据库入门教程)collection.insert([[text],# content_type[向量数据库入门教程],# original_text[],# image_url[text_embedding.tolist()]])# 插入图片数据image_embeddingencode_image(tutorial_cover.jpg)collection.insert([[image],[],[tutorial_cover.jpg],[image_embedding.tolist()]])Step 3跨模态搜索# 用文本搜索图片collection.load()query_text教程封面图片query_embeddingencode_text(query_text)resultscollection.search(data[query_embedding.tolist()],anns_fieldembedding,param{metric_type:COSINE,params:{ef:128}},limit5,exprcontent_type image,# 只搜图片output_fields[content_type,original_text,image_url])# 用图片搜索文本query_imageencode_image(some_photo.jpg)resultscollection.search(data[query_image.tolist()],anns_fieldembedding,param{metric_type:COSINE,params:{ef:128}},limit5,exprcontent_type text,# 只搜文本output_fields[content_type,original_text]) 多模态搜索应用场景应用场景查询方式检索目标典型案例以图搜图图片 → 图片相似图片淘宝拍照搜同款以文搜图文本 → 图片匹配的图片素材网站搜索以图搜文图片 → 文本图片描述/相关文档图片内容理解跨模态推荐文本 → 图文混合图文内容小红书推荐视频检索文本/图片 → 视频帧视频关键帧视频内容搜索️ 视频搜索架构┌─────────────────────────────────────────────────────────┐ │ 视频向量搜索架构 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 输入视频 │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 视频抽帧 │ 每秒抽 1 帧 / 关键帧检测 │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 帧向量化 │ CLIP 对每帧生成向量 │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 视频向量聚合 │ 平均池化 / 最大池化 │ │ │ │ 将 N 帧向量 → 1 个视频向量 │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 向量数据库 │ 存储视频向量 元数据 │ │ │ │ (视频URL、时间戳、标签) │ │ └──────────────┘ │ │ │ │ 查询: 找一段日落的海边视频 │ │ → 文本向量化 → 向量搜索 → 返回匹配视频 │ │ │ └─────────────────────────────────────────────────────────┘⚠️ 多模态搜索的坑坑说明解决方案模型选择不同模型的向量空间不兼容同一集合必须用同一模型中文支持原版 CLIP 中文效果差用 Chinese-CLIP图片预处理尺寸、格式不统一统一 resize 到模型要求向量维度不同模态维度可能不同确认模型输出维度一致存储成本图片/视频占空间只存向量URL原始文件存 OSS 本篇核心要点回顾要点说明多模态模型CLIP/Chinese-CLIP 将文本和图片映射到同一空间跨模态搜索可以用文本搜图片也可以用图片搜文本视频搜索抽帧 → 向量化 → 聚合 → 存储中文场景推荐 Chinese-CLIP 或 Jina CLIP v2存储策略向量存数据库原始文件存 OSS下篇预告《Milvus 分布式部署实战从单机到集群的完整踩坑记录 ️》有问题欢迎评论区讨论觉得有用请点赞收藏 作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容