十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VLM在Web-Scale搜索相关性度量中的实战应用

VLM在Web-Scale搜索相关性度量中的实战应用 之前在做电商搜索的语义相关性迭代时发现一个很典型的场景用户搜“白色连衣裙”返回结果里却混杂了大量纯文本描述匹配、但图片实际是T恤或裤子的商品。传统基于文本的相关性模型很难识别这类“图文不一致”的问题。后来团队引入视觉语言模型Vision-Language Models简称 VLM来度量图文相关性整个排序质量才有了明显提升。本文将围绕“Web-Scale Search 下如何用 VLM 做 Relevance Measurement”展开结合可落地的代码、评估方法和工程优化思路给正在做多模态搜索、相关性排序或召回精排的同学提供一份完整实操笔记。适合以下读者负责搜索引擎相关性、排序策略的算法工程师正在做多模态检索、以图搜图、电商搜索的研发同学对大模型落地搜索场景感兴趣想了解 VLM 如何参与相关性度量的同学。读完你可以掌握VLM 在相关性度量中的定位、数据如何构建、模型如何训练或微调、如何做离线评估与上线部署以及常见坑点的排查方法。1. 相关性度量为什么需要 VLM1.1 从文本相关性到多模态相关性传统 Web 搜索相关性大多基于 Query 与 Document 的文本匹配。经典做法包括TF-IDF / BM25计算词项权重与文档匹配度Query 改写与语义向量召回用双塔模型把文本编码成向量做内积或余弦相似度精排模型使用 LTRLearning to Rank模型融合文本、点击、类目等特征。这些方法在处理纯文本网页时表现不错但随着电商、视频、社交图片、本地生活等富媒体内容爆发搜索结果不再只是“网页文字”而是大量由图片、标题、标签、描述混合组成的 Item。举个实际例子用户输入 Query“北欧风实木餐桌”。搜索引擎返回的内容可能包含一张北欧风格餐桌的图片商品标题“实木餐桌 北欧简约 白橡木”详情页描述文案其他用户上传的使用场景图。此时如果只用文本模型模型能匹配“实木餐桌”“北欧”等关键词但无法判断“图片里的桌子是不是实木”“图片风格是否真的北欧”。如果标题包含“实木餐桌”但图片其实是一张塑料桌文本模型依然会判为高相关这就会带来很差的用户体验。VLM 的价值在于它同时理解图片和文本可以把“视觉信息”和“语言描述”映射到同一个表示空间进而对图文是否匹配做出判断。1.2 什么是 Vision-Language Model视觉语言模型是同时接受图像和文本输入并联合建模的大模型。常见代表有CLIPContrastive Language-Image Pre-trainingSigLIPSigmoid Loss for Language Image Pre-trainingBLIP / BLIP-2FlavaChinese-CLIP 及各种中文多模态模型VLM 的核心能力是“图文对齐”。它把图像编码成视觉向量把文本编码成语义向量然后通过对比学习让匹配的图文向量更接近不匹配的图文向量更远。相关性度量中使用 VLM本质上就是利用这种“图文对齐”能力来判断一个查询Query和一个结果项Document Item 或图片是否有关。1.3 VLM 在 Web-Scale Search 里的作用位置在搜索系统中相关性度量通常出现在以下几个阶段阶段作用传统方式VLM 增强方式召回从海量文档中粗筛候选BM25、文本向量召回图文联合向量召回精排对候选做精细打分LTR、文本深度模型图文相关性分数作为强特征重排多样性与业务约束RR、MMR 规则多模态相关性加约束评估离线/在线相关性评测人工标注、文本指标VLM 辅助标注或度量一致性校验如果用一句话概括VLM 可以在“文本相似”之外补充“视觉-文本语义匹配”这个维度解决人工和传统模型都容易忽略的图文一致性问题。2. Web-Scale 场景下的挑战2.1 规模和数据形态Web-Scale 意味着数据量级通常达到亿级甚至百亿级。以电商搜索为例商品图片、用户 Query、长尾描述每天都在变化。此时做相关性度量不能简单理解为“拿一个模型算分”而要考虑候选集检索不能对全量 Item 逐一跑大模型需要先召回再精算特征更新频率图片会变、标题会改向量和相关性特征需要增量更新计算成本大模型单次推理开销高Web 搜索 QPS 又远高于一般 CV 任务长尾 Query大量低频或新词模型需要具备较强的 Zero-shot 泛化能力。2.2 相关性的定义并不单一相关性在搜索场景中通常分层主题相关Query 和 Item 是不是在谈论同一个事物意图相关Item 是否满足用户搜索的深层意图质量相关画面是否清晰、信息是否完整、是否满足用户审美或功能需求。VLM 擅长处理“主题相关”和“意图相关”中偏视觉的部分但“质量相关”往往还需要额外信号例如点击率、停留时长、DSL 评分等。因此实际项目中VLM 相关性分数更适合作为特征之一而不是唯一依据。2.3 评测指标要跟着变传统文本相关性常看 P10、NDCG10、MRR 等。引入 VLM 后我们还要关注图文一致性比如标题、描述和图片内容是否冲突Negative 样本的挖掘难度VLM 负样本不应只是“不相关文本”还要包含“视觉相关但语义不相关”等难例人工标注成本多模态标注比纯文本标注更复杂需要标注员同时看图和阅读文本。这些问题决定 VLM 不能简单套用文本模型的老路需要在数据、训练、评估、部署上做专门设计。3. 核心技术方案用 VLM 计算相关性分数3.1 整体思路在搜索相关性度量里最常用的 VLM 使用方式有两种双塔编码 向量相似度把 Query 和图文 Item 分别编码为向量通过余弦相似度或点积得到相关性分数。适合召回速度快可预计算 Item 侧向量。交叉编码器Cross-Encoder把 Query 文本和图片一起输入模型输出一个相关性分数。适合精排效果往往更好但推理成本高。实际工程中我们通常混合使用召回阶段用双塔 VLM 编码 Item 的图片和文本建立向量索引精排阶段对 Top 候选使用 Cross-Encoder 或融合模型做精细打分。下面用一个具体项目演示这套方案。3.2 选型建议以开源生态为例常用模型如下模型输入形式特点适用场景CLIPimage text通用图文对齐社区生态完善召回、多模态向量检索Chinese-CLIPimage chinese text中文效果往往更好中文搜索、电商SigLIPimage text使用 Sigmoid 损失训练更稳定大规模数据预训练BLIP-2image text生成可做图文问答或生成式相关性判断精排、难例分析如果项目以中文 Web 搜索为主建议优先尝试 Chinese-CLIP。如果你有较多样化的图文训练数据也可以从 CLIP/SigLIP 权重开始做领域微调。3.3 为什么相关性分数不能只看文本相似度在看代码之前先明确一个概念VLM 的相关性分数来自“图文空间的相似度”它和文本相似度最大的区别是文本相似度Query 和 Title/Description 的 token 共现或语义接近VLM 相似度Query 文本与图片内容是否语义一致同时也会兼顾文本侧。举例Query“黄色长裙”Item A标题“黄色连衣裙女夏”图片是黄色长裙但没有任何文本写“长裙” Item B标题“黄色连衣裙女夏”图片是一条蓝色牛仔裤。文本相似度模型可能同时给 A、B 打高分因为标题都包含“黄色”“连衣裙”但 VLM 会给 A 打高分给 B 打低分因为 B 的图片和 Query 的视觉语义完全不匹配。这就是 VLM 在相关性度量中最核心的增量价值。4. 环境准备与依赖安装4.1 运行环境本文代码基于 Linux 环境Ubuntu 20.04 或类似验证但 Windows/macOS 也可以运行只是大规模数据处理建议还是用 Linux 服务器。建议配置Python 3.8 或 3.10PyTorch 1.13 或 2.xCUDA 11.7 或更高如果使用 GPU内存建议 16G 以上。4.2 安装依赖创建虚拟环境并安装依赖python3 -m venv venv source venv/bin/activate pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install transformers pip install datasets pip install faiss-cpu faiss-gpu pip install open_clip_torch pip install scikit-learn pandas tqdm说明如果不使用 GPU可以把torch安装命令改为 CPU 版本open_clip_torch方便加载各类 CLIP 系列模型faiss用于大规模向量检索演示transformers用于加载 BLIP、SigLIP 等模型。如果你在离线环境部署需要提前下载模型权重然后通过本地路径加载。4.3 示例项目结构为了便于维护建议按下面结构组织代码vlm-search-relevance/ ├── data/ │ ├── queries.tsv │ ├── items.tsv │ └── image_pairs.tsv ├── models/ │ ├── encoder.py │ ├── train.py │ └── predict.py ├── index/ │ └── build_index.py ├── scripts/ │ ├── eval.py │ └── deploy_api.py └── README.md本文示例核心文件会分别说明路径方便对照。5. 实战基于 CLIP 的图文相关性召回与精排5.1 准备数据为了演示我们构造一个简单的商品搜索数据集。实际业务中数据通常来自商品库、内容库和用户行为日志。data/queries.tsvqid query 1 黄色长裙 女 夏季 2 白色纯棉T恤 男 3 北欧风实木餐桌 4 复古陶瓷茶杯 5 黑色运动鞋 透气data/items.tsvitem_id title image_path 10001 黄色连衣裙女夏 images/10001.jpg 10002 白色短袖T恤男 images/10002.jpg 10003 北欧简约实木餐桌 images/10003.jpg 10004 日式复古陶瓷杯子 images/10004.jpg 10005 男士黑色网面运动鞋 images/10005.jpg 10006 蓝色牛仔裤女 images/10006.jpg 10007 黄色半身裙女 images/10007.jpgimage_path指向图片文件。你可以从公开数据集如 Fashion-MNIST、Products-10K 或开源电商数据集中抽取图片也可以先用少量图片验证流程。5.2 加载 VLM 模型并计算向量下面我们使用open_clip_torch加载一个 CLIP 模型。这里以ViT-B/32和laion2b_s34b_b79k预训练权重为例。如果你的网络无法访问外网请提前下载权重到本地。文件路径models/encoder.pyimport torch import open_clip class ClipEncoder: def __init__(self, model_nameViT-B/32, pretrainedlaion2b_s34b_b79k, deviceNone): self.device device or (cuda if torch.cuda.is_available() else cpu) self.model, _, self.preprocess open_clip.create_model_and_transforms( model_namemodel_name, pretrainedpretrained, deviceself.device, ) self.tokenizer open_clip.get_tokenizer(model_name) self.model.eval() torch.no_grad() def encode_texts(self, texts: list[str]): tokens self.tokenizer(texts) tokens tokens.to(self.device) return self.model.encode_text(tokens) torch.no_grad() def encode_images(self, image_tensors: torch.Tensor): return self.model.encode_image(image_tensors) def preprocess_images(self, pil_images): import torchvision.transforms as transforms return torch.stack([self.preprocess(img) for img in pil_images]).to(self.device)需要注意open_clip的preprocess内部包含 Resize、CenterCrop、Normalize 等操作encode_texts返回的是 L2 归一化前的向量实际计算相似度时建议先做归一化也可以用cosine_similarity如果文本是中文建议使用中文微调后的 CLIP 模型否则效果会明显下降。5.3 计算 Query 与 Item 的相关性分数文件路径models/predict.pyimport torch import torch.nn.functional as F from PIL import Image from models.encoder import ClipEncoder encoder ClipEncoder() def load_image(path): return Image.open(path).convert(RGB) def relevance_score(query, image_path): image load_image(image_path) image_tensor encoder.preprocess_images([image]) text_vec encoder.encode_texts([query]) image_vec encoder.encode_images(image_tensor) # L2 归一化后计算余弦相似度 text_vec F.normalize(text_vec, dim-1) image_vec F.normalize(image_vec, dim-1) score (text_vec image_vec.T).item() return score if __name__ __main__: score relevance_score(黄色长裙 女 夏季, data/images/10001.jpg) print(relevance score:, score)预期输出是一个[-1, 1]之间的浮点数。分数越高说明 Query 和图片的相关性越强。这里解释几个关键点为什么先归一化再算点积CLIP 训练时采用对比学习归一化后的点积等价于余弦相似度取值范围稳定为什么只对图片编码不把标题也编码进去在实际业务中可以先跑“Query vs 图片”的相关性再跑“Query vs 标题文本”的相关性最后加权融合。这样更能区分图片和文本各自带来的信号如果同时有图片和标题可以把标题拼到 Query 中做交叉编码也可以分别计算后加权融合通常后者更可控。5.4 使用图像-文本对做相关性排序下面写一个更完整的排序脚本对多个候选 Item 计算相关性分数并输出 Top-N。文件路径scripts/sort_results.pyimport pandas as pd import torch.nn.functional as F from models.encoder import ClipEncoder from PIL import Image encoder ClipEncoder() def encode_images_from_paths(paths): images [Image.open(p).convert(RGB) for p in paths] tensors encoder.preprocess_images(images) vecs encoder.encode_images(tensors) return F.normalize(vecs, dim-1) def encode_query(query): vec encoder.encode_texts([query]) return F.normalize(vec, dim-1) def sort_items(query, item_df, top_n5): query_vec encode_query(query) image_paths item_df[image_path].tolist() image_vecs encode_images_from_paths(image_paths) scores (query_vec image_vecs.T).squeeze(0).cpu().tolist() item_df item_df.copy() item_df[score] scores return item_df.sort_values(score, ascendingFalse).head(top_n) if __name__ __main__: items pd.read_csv(data/items.tsv, sep\t) results sort_items(黄色长裙 女 夏季, items) print(results[[item_id, title, score]])运行后可以看到得分最高的 Item 应该是“黄色连衣裙女夏”或“黄色半身裙女”而不是“蓝色牛仔裤女”。从工程角度看这里每次都需要对候选图片重新编码如果候选集很大性能会很差。因此需要在召回阶段做“向量预计算 索引”。5.5 构建 FAISS 向量索引文件路径index/build_index.pyimport faiss import numpy as np import torch.nn.functional as F from models.encoder import ClipEncoder from PIL import Image import pandas as pd encoder ClipEncoder() def image_path_to_vector(path): img Image.open(path).convert(RGB) tensor encoder.preprocess_images([img]) vec encoder.encode_images(tensor) return F.normalize(vec, dim-1).cpu().numpy() # 读取 item 数据 items pd.read_csv(data/items.tsv, sep\t) image_paths items[image_path].tolist() vectors np.vstack([image_path_to_vector(p) for p in image_paths]).astype(float32) # 建立索引 dim vectors.shape[1] index faiss.IndexFlatIP(dim) # 内积配合归一化向量等价于余弦相似度 index.add(vectors) # 保存索引和 id 映射 faiss.write_index(index, index/items.index) items[[item_id, title, image_path]].to_csv(index/item_meta.tsv, sep\t, indexFalse) print(index size:, index.ntotal)查询时使用import faiss import numpy as np import torch.nn.functional as F from models.encoder import ClipEncoder import pandas as pd encoder ClipEncoder() index faiss.read_index(index/items.index) items pd.read_csv(index/item_meta.tsv, sep\t) query 黑色运动鞋 透气 query_vec F.normalize(encoder.encode_texts([query]), dim-1).cpu().numpy().astype(float32) k 5 scores, indices index.search(query_vec, k) for score, idx in zip(scores[0], indices[0]): print(items.iloc[idx][item_id], items.iloc[idx][title], round(score, 4))说明IndexFlatIP是全量暴力检索适合小规模 Demo生产环境数据量大时建议使用faiss.IndexIVFFlat或faiss.IndexIVFPQ向量索引只解决“候选召回”不能替代最终的排序模型。6. 用 VLM 精排交叉编码器与多特征融合6.1 为什么精排不使用双塔向量双塔模型把 Query 和 Item 分别编码速度快但交互不足。Cross-Encoder 将 Query 文本和图片一起输入模型内部进行交互通常能更好把握细粒度语义但也更慢。在 Web-Scale 搜索中折中做法是先用双塔 VLM 或文本召回缩小候选集到几百个再用轻量级 Cross-Encoder 或 VLM 融合模型对候选做精排。6.2 加载 BLIP-2 或使用图像文本匹配头以transformers加载 BLIP-2 为例可以用Blip2ForImageTextMatching或基于BlipProcessor实现一个图文匹配打分器。如果你的任务只是“相关性/不相关性”判断也可以把 VLM 当成一个二分类器使用。示例思路如下需要按实际模型版本调整from transformers import BlipProcessor, BlipForImageTextRetrieval from PIL import Image import torch processor BlipProcessor.from_pretrained(Salesforce/blip-itm-base-coco) model BlipForImageTextRetrieval.from_pretrained(Salesforce/blip-itm-base-coco) model.eval() def blip_itm_score(query, image_path): image Image.open(image_path).convert(RGB) inputs processor(imagesimage, textquery, return_tensorspt) with torch.no_grad(): outputs model(**inputs) # itm_score 越高图文匹配程度越高 itm_score torch.softmax(outputs.logits, dim-1)[:, 1].item() return itm_score print(blip_itm_score(黄色长裙 女 夏季, data/images/10001.jpg))注意BLIP 系列模型权重较大推理成本高生产环境需要做好性能评估。6.3 多特征融合排序实际搜索引擎不会只用 VLM 分数。我们可以把 VLM 相关性分数和传统文本特征、业务特征一起作为特征输入给 LGBM、RankNet 或深度排序模型。伪代码如下features { text_bm25: 12.3, text_embedding_cos: 0.81, vlm_image_cos: 0.76, vlm_itm_score: 0.92, ctr: 0.035, sales_rank: 5, }训练一个精排模型之后VLM 分数只是一个输入特征。这样既能利用 VLM 的视觉语义能力也能保留文本匹配和业务信号。7. 离线评估怎么判断相关性度量是否有效7.1 标注数据与指标在评估阶段我们需要准备一组人工标注数据。每条样本通常是query, item_id, image_path, title, labellabel 含义0不相关1部分相关2高度相关。评估指标可以选择P1、P5、P10NDCG10MRR图文一致率人工评估时判断返回图片是否与 Query 视觉一致。7.2 简单评估代码文件路径scripts/eval.pyimport pandas as pd import numpy as np from sklearn.metrics import ndcg_score # 假设 pred_scores 是模型预测的相关性分数true_labels 是人工标签 # 这里读入一个示例文件 eval_df pd.read_csv(data/eval_samples.tsv, sep\t) queries eval_df[query].unique() all_ndcg [] for q in queries: sub eval_df[eval_df[query] q].copy() if sub[label].sum() 0: continue y_true sub[label].values.reshape(1, -1) y_score sub[pred_score].values.reshape(1, -1) ndcg ndcg_score(y_true, y_score) all_ndcg.append(ndcg) print(NDCGall mean:, np.mean(all_ndcg))ndcg_score需要传入 2D 数组。上面这段代码是列表级评估的简化版实际生产中可以按 Session 或 Query 维度聚合。7.3 模型效果对比思路建议对比三组纯文本 BM25 / 文本向量基线纯 VLM 图片相关性分数文本 VLM 融合特征。只有当第三组指标显著高于前两组时才说明 VLM 在业务数据中产生了增量收益。8. 大规模 Web-Scale 部署实践8.1 向量召回分层架构在 Web-Scale 场景全部 Item 都实时过 VLM 是不现实的。推荐分层流程离线阶段对全量 Item 图片、标题分别编码得到 item_image_vector、item_text_vector离线建索引按业务维度分片建立 FAISS 或 Milvus 索引在线阶段Query 来时候先用轻量文本模型锁定候选再计算 Query 编码向量检索在图片向量索引和文本向量索引中分别检索合并 TopK精排阶段对合并后的候选集合调用 VLM ITM 模型或融合排序模型打分。8.2 特征与向量更新策略新增 Item实时生成图片向量、文本向量写入增量索引下架 Item异步删除向量标题/图片修改触发重新编码Query 侧向量不需要全量更新实时推理即可。8.3 推理性能优化VLM 模型推理开销通常较高可以从几个角度优化优化手段说明TensorRT / ONNX 导出固定 shape减少框架开销FP16 推理精度损失可控速度明显提升Batch 推理在线服务对多个候选合并成 Batch向量预计算Item 侧所有向量离线生成特征缓存高频 Query 缓存编码结果模型蒸馏用大 VLM 蒸馏出小模型部署成本更低如果必须在线使用 Cross-Encoder建议控制精排候选数量在 100 以内否则延迟会显著上升。8.4 简单 API 服务示例文件路径scripts/deploy_api.pyfrom flask import Flask, request, jsonify from models.encoder import ClipEncoder import torch.nn.functional as F from PIL import Image from io import BytesIO import requests app Flask(__name__) encoder ClipEncoder() app.route(/relevance, methods[POST]) def relevance(): data request.get_json() query data.get(query, ) image_url data.get(image_url, ) response requests.get(image_url, timeout3) img Image.open(BytesIO(response.content)).convert(RGB) image_tensor encoder.preprocess_images([img]) query_vec F.normalize(encoder.encode_texts([query]), dim-1) image_vec F.normalize(encoder.encode_images(image_tensor), dim-1) score (query_vec image_vec.T).item() return jsonify({query: query, score: score}) if __name__ __main__: app.run(host0.0.0.0, port8000)生产环境不要用 Flask 内置服务承载高并发建议配合 Gunicorn Gevent或者用 Triton Inference Server 部署模型。9. 常见问题与排查思路9.1 VLM 中文效果差问题现象常见原因解决思路中文 Query 和图片计算相似度分数偏低使用英文 CLIP 权重中文不在预训练分布中换 Chinese-CLIP或收集中文图文对做领域微调中文长文本编码不稳定分词器和模型对中文支持弱使用中文 tokenizer检查输入长度限制9.2 图片相关性分数普遍偏高或偏低问题现象常见原因解决思路所有分数都在 0.8 以上模型对当前数据分布过于钝感或 Item 图片风格太单一增加难负样本对图像做增强加入文本侧相关性特征分数分布方差很小图片预编码质量差或预处理不一致检查图片读取和预处理流程是否统一9.3 向量索引和在线编码不一致问题现象常见原因解决思路召回结果和离线评测差异大离线在线图片预处理不一致模型权重版本不一致固定预处理 pipeline建立模型权重版本管理9.4 显存不足 OOM问题现象常见原因解决思路批量推理时显存溢出Batch Size 过大模型参数量大调小 Batch开启 FP16使用梯度检查点推理时不适用换更小模型9.5 相关性模型上线后点击率下降问题现象常见原因解决思路离在线指标不一致排序特征缺失VLM 分数和业务目标不一致先做人工抽检保留旧策略做分层实验增加业务特征融合上面这些问题很多不是模型本身的问题而是数据、预处理、部署环境的一致性导致的。排查时建议按“数据 - 预处理 - 模型权重 - 推理环境 - 排序特征”的顺序逐层检查。10. 最佳实践与工程建议10.1 数据层面正样本不能只有标题完全匹配的数据要包含“图文语义一致但字面不一致”的样本否则 VLM 学不到视觉对齐能力负样本要同时包含“文本匹配但图片不匹配”和“图片匹配但文本不匹配”的难例人工标注时需要同时展示 Query、标题、图片三要素帮助标注员判断图文是否冲突。10.2 模型层面优先使用中文 VLM在线搜索场景对语言分布很敏感如果业务数据图片风格差异大例如工业品、服饰、家居建议做领域微调而不是直接使用通用权重不要只用一个 VLM 分数建议同时保留文本分数、图片分数和融合分数方便后续特征迭代。10.3 工程层面所有向量和特征都要做版本管理否则模型更新后难以回滚离线评估和在线服务必须使用同一套图片预处理逻辑上线前要跑一遍“人工抽检”在真实 Query 下肉眼检查 Top 结果是否图文一致监控相关性分数分布如果某类 Query 的分数分布发生剧烈变化要及时告警。10.4 生产环境注意事项涉及线上排序变更时强烈建议在测试环境或小流量验证保留旧模型作为回滚版本先看相关性指标再看点击和转化对新特征做 Shapley 或增益分析确认其增量价值对数据访问、模型推理、索引更新做好权限控制和审计日志。11. 总结与下一步本文从相关性度量的痛点出发介绍了 VLM 在 Web-Scale 搜索中的应用链路从 CLIP/Chinese-CLIP 编码、向量召回、ITM 精排到离线评估与在线部署。核心收获可以概括为三点VLM 能解决传统文本模型无法感知的“图文一致性”问题实际应用时不要全量跑大模型要用“双塔召回 交叉精排 特征融合”的分层方案离线评估和在线一致性比模型本身更影响最终效果。下一步建议按这个顺序推进先准备一份小规模图文标注数据验证 VLM 在当前业务上是否有区分度如果有效再构建离线向量索引并设计融合排序实验最后逐步扩大流量观察相关性、人工抽检、业务转化指标。动手实践时建议从最简版本开始用 CLIP 对 1000 条 Item 图片建索引用 50 个真实 Query 做相关性排序肉眼检查结果。这个流程跑通后再逐步扩展成 Web-Scale 的完整架构。如果本文对你有帮助可以收藏备用后续遇到图文相关性、多模态召回或精排问题时拿出来对照排查。
返回列表