ARTICLE DETAIL

资讯详情

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

FlagEmbedding BGE-VL 实战指南:基于 MegaPairs 大规模数据合成的通用多模态检索模型

FlagEmbedding BGE-VL 实战指南:基于 MegaPairs 大规模数据合成的通用多模态检索模型 FlagEmbedding BGE-VL 实战指南基于 MegaPairs 大规模数据合成的通用多模态检索模型【免费下载链接】FlagEmbeddingRetrieval and Retrieval-augmented LLMs项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding导读本文围绕 FlagEmbedding 仓库中 BGE-VL 的完整技术脉络展开系统讲解 MegaPairs 数据合成方法、BGE-VL-CLIP 与 BGE-VL-MLLM 两类模型的推理用法、MegaPairs 数据集字段结构以及基于 Faiss 的 CIRCO / FashionIQ 零样本组合图像检索评测流程。读完本文你将掌握直接用transformers加载 BGE-VL 完成图文查询到图像候选的检索打分以及复用仓库提供的评测脚本复现基准指标并能理解其训练数据与模型能力之间的对应关系。项目背景MegaPairs 与 BGE-VL 系列BGE-VL 是 FlagEmbedding 中面向通用多模态检索universal multimodal retrieval的模型系列其配套论文为MegaPairs: Massive Data Synthesis For Universal Multimodal RetrievalarXiv: 2412.14475。核心思路是用一种名为MegaPairs的数据合成方法利用开放域图像构造大规模heterogeneous KNN triplets异构 KNN 三元组从而为组合图像检索Composed Image Retrieval, CIR与多模态嵌入提供训练数据。MegaPairs 数据集包含超过2600 万条三元组并据此训练出两条模型线BGE-VL-CLIP基于 CLIP 架构的检索模型提供BGE-VL-base与BGE-VL-large两个规模。BGE-VL-MLLM多模态大语言模型路线提供BGE-VL-MLLM-S1与BGE-VL-MLLM-S2。其中 S1 仅在 MegaPairs 上训练在 CIRCO 基准上相对此前最优方法在 mAP5 上提升了8.1%S2 在 S1 基础上于 MMEB 训练集上继续微调一个 epoch在更广的多模态嵌入任务上表现更佳。模型与数据的时间线依据 README 的 News 与 Release Plan时间事项2024-12-19发布论文 MegaPairs2024-12-27发布 BGE-VL-CLIP 的 base / large 模型2025-03-04发布 BGE-VL-MLLM-S1 / S22025-04-02模型同步上架 WiseModel2025-04-13发布 MegaPairs 数据集图像统一缩放至 512×512 以压缩体积README 中标注的 Release Plan 显示论文、两类模型、MegaPairs 数据集与评测代码均已发布微调Fine-tuning代码仍在规划中因此当前仓库对该模块提供的可运行能力以推理与评测为主。BGE-VL-CLIP 模型使用环境与依赖官方代码在transformers4.45.2上验证良好并推荐该版本。仓库内 retrieval_demo.ipynb 给出了最小依赖集合pip install numpy torch transformers faiss-cpu pillow加载模型时必须设置trust_remote_codeTrue因为模型依赖仓库内的自定义代码即 modeling_MMRet_CLIP.py 这一套 CLIP 兼容实现。组合检索推理示例BGE-VL-CLIP 的典型用法是将参考图像 修改指令文本编码为查询向量再与候选图像向量做内积打分import torch from transformers import AutoModel MODEL_NAME BAAI/BGE-VL-base # 或 BAAI/BGE-VL-large model AutoModel.from_pretrained(MODEL_NAME, trust_remote_codeTrue) # 必须设置 trust_remote_codeTrue model.set_processor(MODEL_NAME) model.eval() with torch.no_grad(): query model.encode( images ./assets/cir_query.png, text Make the background dark, as if the camera has taken the photo at night ) candidates model.encode( images [./assets/cir_candi_1.png, ./assets/cir_candi_2.png] ) scores query candidates.T print(scores)底层实现解析上述encode调用链可以从 modeling_MMRet_CLIP.py 的源码中逐层印证set_processor通过CLIPProcessor.from_pretrained初始化图文处理器modeling_MMRet_CLIP.py#L1163-L1164。data_process根据输入组合分发到三种模式modeling_MMRet_CLIP.py#L1282-L1307仅文本 →text模式仅图像 →images模式支持单张路径或路径列表自动打开并转为 RGB图像 文本 →multimodal模式要求二者类型一致同为 str 或同为同长度 list。encode依据模式调用encode_image/encode_text/encode_multimodalmodeling_MMRet_CLIP.py#L1309-L1316。关键点encode_multimodal将get_text_features与get_image_features的输出直接向量相加后再做 L2 归一化modeling_MMRet_CLIP.py#L1273-L1280这正是组合查询嵌入的构造方式也解释了为什么查询与候选共享同一个向量空间、可以直接用内积/余弦相似度打分。模型本体仍是标准 CLIP 双塔结构CLIPTextModel因果掩码文本编码器 EOS pooling与CLIPVisionModelViT 编码器 CLS pooling分别经过text_projection/visual_projection映射到公共嵌入空间见 CLIPModel 定义。BGE-VL-MLLM 模型使用BGE-VL-MLLM 是类 LLM 的检索模型推理流程比 CLIP 版本更接近大模型范式需要显式做数据预处理、取最后一层最后一个 token 的隐状态作为句向量并自行归一化。import torch from transformers import AutoModel from PIL import Image MODEL_NAME BAAI/BGE-VL-MLLM-S1 model AutoModel.from_pretrained(MODEL_NAME, trust_remote_codeTrue) model.eval() model.cuda() with torch.no_grad(): model.set_processor(MODEL_NAME) query_inputs model.data_process( textMake the background dark, as if the camera has taken the photo at night, images./assets/cir_query.png, q_or_cq, task_instructionRetrieve the target image that best meets the combined criteria by using both the provided image and the image retrieval instructions: ) candidate_inputs model.data_process( images[./assets/cir_candi_1.png, ./assets/cir_candi_2.png], q_or_cc, ) query_embs model(**query_inputs, output_hidden_statesTrue)[:, -1, :] candi_embs model(**candidate_inputs, output_hidden_statesTrue)[:, -1, :] query_embs torch.nn.functional.normalize(query_embs, dim-1) candi_embs torch.nn.functional.normalize(candi_embs, dim-1) scores torch.matmul(query_embs, candi_embs.T) print(scores)与 CLIP 版本相比MLLM 版本有三个必须注意的差异点q_or_c参数查询q与候选c走不同的预处理分支查询一侧还可以通过task_instruction注入任务指令模板嵌入提取方式通过model(**inputs, output_hidden_statesTrue)[:, -1, :]取序列最后一个位置的隐状态而不是调用封装的encode显式归一化query_embs与candi_embs需各自执行normalize(dim-1)后再做矩阵乘法得到相似度矩阵。MegaPairs 数据集结构与使用建议MegaPairs 数据集已在 Hugging Face 发布JUNJIE99/MegaPairs包含超过 2600 万条训练样本面向组合图像检索与通用多模态检索。每条样本由四个字段构成Dataset Card 说明字段类型说明q_imgstr查询图像的本地文件路径q_textlist与查询图像相关的多条文本描述训练时可随机抽取其中一条t_imgstr目标图像路径作为q_img与q_text组合的正例hnslist难负样本图像路径列表是与查询在视觉或语义上相近的干扰项关于难负样本的使用README 给出了明确的实践建议训练时至少包含一个难负样本hns[0]即查询图像自身是必须包含的负样本官方实验采用的配置是每个查询使用 4 个难负样本。此外数据集的图像原始尺寸较大为减少上传时间、提升可访问性发布版统一将图像缩放为512×512。鉴于多数视觉语言模型如 CLIP本身使用更小的输入分辨率这一缩放对性能影响很小。数据集图片源自 Recap-DataComp-1BCC BY 4.0 协议。零样本评测CIRCO 与 FashionIQ仓库在 research/BGE_VL/eval 目录下提供了完整的评测代码、测试数据与结果样例评测管线遵循编码 → Faiss 索引 → 检索 → 评估的标准流程。评测入口与参数flag_mmret.py 定义了Flag_mmret封装类其构造函数支持以下参数参数默认值说明model_nameNone待评测的 BGE-VL 模型名normlizedTrue是否对嵌入做 L2 归一化pooling_methodcls池化方式use_fp16True是否使用 FP16 推理内存优化image_dirNone图像文件所在目录封装类内部基于AutoModel/AutoTokenizer/CLIPImageProcessor组装模型并支持单卡或DataParallel多卡推理。其encode_queries与encode_corpus按query_type/corpus_type分发到三类编码函数encode_text仅文本走get_text_featuresencode_image仅图像走get_image_featuresencode_mm_it图 文组合查询将文本与图像特征向量相加后再归一化flag_mmret.py#L156-L161与模型源码中的encode_multimodal语义一致。数据加载方面flag_dataset.py 提供MMIT_Dataset图文对、Image_Dataset纯图像以及对应的 Collator负责图片读取、RGB 转换、CLIPImageProcessor预处理与批处理组装。命令行参数HfArgumentParser评测脚本通过HfArgumentParser解析Args配置类见 eval_Circo.py完整参数如下参数默认值说明model_nameBAAI/BGE-VL-large模型名称result_save_path./eval/mmret_large_circo.json结果保存路径image_dirYOUR_COCO_IMAGE_DIRECTORY图像所在目录需替换为 COCO 实际路径fp16False推理是否使用 FP16max_query_length64查询最大长度max_passage_length77候选passage最大长度batch_size256推理批大小index_factoryFlatFaiss 索引工厂字符串k100检索邻居数save_embeddingFalse是否将嵌入保存为 memmapload_embeddingFalse是否从 memmap 加载嵌入save_pathembeddings.memmap嵌入保存路径index与search两个核心函数分别完成全量语料编码 Faiss 建索引可选落盘与查询编码 索引检索eval_Circo.py#L70-L159。实现细节值得注意Faiss 索引使用METRIC_INNER_PRODUCT内积度量配合归一化向量即为余弦相似度当检测到 CUDA 时通过index_cpu_to_all_gpus将索引克隆到全部 GPU并以 FP16 存储向量以节省显存写入前会把嵌入强制转为float32Faiss 只接受 float32。结果仅保留每个查询的 top-50 候选并写入 JSON。CIRCO 评测cd research/BGE_VL/eval python eval_Circo.py --model_name BAAI/BGE-VL-large \ --image_dir YOUR_COCO_IMAGE_DIRECTORY \ --result_save_path ./eval/results/mmret_large_circo.json脚本从./eval/data/circo_query.jsonl与./eval/data/circo_corpus.jsonl加载查询与语料查询以mm_it图 文方式编码语料以image方式编码。仓库已附带两套参考结果mmret_base_circo.json 与 mmret_large_circo.json可对照验证本地复现的输出格式。FashionIQ 评测eval_fashioniq.py 依次在 shirt、dress、toptee 三个任务子集上执行同样的索引 检索流程并对每个任务计算 MRR 与 Recall 指标cutoffs 覆盖 1/5/10/20/50/100最后打印三任务的 Recall10 / Recall50 及整体均值。其evaluate函数eval_fashioniq.py#L162-L198实现了标准的 MRR 与 Recall 计算逻辑。运行前需要将image_dir替换为 FashionIQ 图像目录并准备对应的三个 jsonl 数据文件shirt / dress / toptee 各有 query_val 与 corpus 两份。cd research/BGE_VL/eval python eval_fashioniq.py --model_name BAAI/BGE-VL-large \ --image_dir YOUR_FASHIONIQ_IMAGE_DIRECTORY模型性能与数据规模的关系依据 Model Performance 一节README 报告的结论包括零样本组合图像检索CIRCOBGE-VL-base 仅约 1.49 亿参数即超越了此前所有模型含参数规模大 50 倍的模型BGE-VL-MLLM 相对此前最优提升 8.1%。零样本 MMEBBGE-VL-MLLM 尽管只按 ImageText-to-Image 范式训练仍在 Massive Multimodal Embedding Benchmark 上取得领先体现 MegaPairs 的泛化能力。下游微调后的 MMEB在 MMEB 的 OOD分布外子集上比此前最优高 7.1%。可扩展性与效率BGE-VL-base 的性能随训练数据量增加而提升仅用 0.5M 训练样本的 BGE-VL-base就显著优于采用相同 CLIP-base 骨干、但用了 36.7M 样本训练的 MagicLens。上述数字均以 README 与论文表述为准作为对该方案能力的客观描述如需用于正式引用建议直接查阅论文原文与对应模型卡。许可与引用MegaPairs 的标注数据与 BGE-VL 模型均以MIT License发布数据集的图像源自 Recap-DataComp-1BCC BY 4.0使用时需同时遵循两者的协议条款。若在研究中使用了该工作README 提供了标准 BibTeX 引用zhou2024megapairs。仓库中对应源码的进一步阅读入口包括modeling_MMRet_CLIP.pyCLIP 实现与组合编码逻辑、eval/flag_mmret.py评测封装、eval/flag_dataset.py数据加载以及 retrieval_demo.ipynb端到端演示。【免费下载链接】FlagEmbeddingRetrieval and Retrieval-augmented LLMs项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表