许可证: mit
数据集:
- TIGER-Lab/MMEB-train
语言:
- 英文
评估指标:
- 召回率
基础模型:
- llava-hf/llava-v1.6-mistral-7b-hf
管道标签: 图像文本到文本
库名称: transformers
突破模态壁垒:基于多模态大模型的通用嵌入学习
顾天骋*,
杨凯程*,
冯子勇,
王兴俊,
张彦钊,
龙定坤,
陈英达,
蔡卫东,
邓健康
🏡 项目主页 | 📄 论文 | 💻 GitHub
UniME采用336×336图像分辨率训练,在MMEB排行榜上位列第一。(截图时间为2025年5月6日UTC+8上午8点)
💡 亮点
为增强多模态大模型的嵌入能力,我们提出文本判别知识蒸馏方法。训练过程包括解耦多模态大模型的LLM组件,并使用提示语"用一词概括上述句子"处理文本,然后通过KL散度对齐学生模型(多模态大模型)与教师模型(NV-Embed V2)在批次相似度分布上的嵌入。值得注意的是,此过程中仅微调LLM组件,其余参数全部冻结。
随后,我们提出基于困难负样本增强的指令调优方法,通过提升视觉敏感性、强化跨模态对齐和增强指令跟随能力来优化多模态系统。其核心包含两项创新:采用相似度阈值的假阴性过滤机制消除误导样本,以及自动选择top-k相似但不匹配样本的困难负采样策略以增加训练难度。
🧭 快速开始
git clone https://github.com/deepglint/UniME.git
cd UniME
conda create -n uniME python=3.10 -y
conda activate uniME
pip install -r requirements.txt
import torch
from PIL import Image
from torch.nn import functional as F
from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration
base_model_path="DeepGlint-AI/UniME-LLaVA-1.6-7B"
img_prompt = "[INST] <image>\n用一词概括上图: [/INST]"
text_prompt = "[INST] <sent>\n用一词概括上文: [/INST]"
text = "一名男子正在过马路,旁边停着一辆红色汽车。"
image_path = "figures/demo.png"
input_texts = text_prompt.replace('<sent>', text)
input_image_prompt = img_prompt
input_image = [Image.open(image_path)]
transform = LlavaNextProcessor.from_pretrained(base_model_path)
model = LlavaNextForConditionalGeneration.from_pretrained(base_model_path, device_map="cuda", torch_dtype=torch.float16, low_cpu_mem_usage=True)
transform.tokenizer.padding_side = "left"
transform.tokenizer.padding = True
inputs_text = transform(text=input_texts,
images=None,
return_tensors="pt",
padding=True)
for key in inputs_text: inputs_text[key] = inputs_text[key].to("cuda")
inputs_image = transform(text=input_image_prompt,
images=input_image,
return_tensors="pt",
padding=True).to("cuda")
with torch.no_grad():
emb_text = model(**inputs_text, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
emb_image = model(**inputs_image, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
emb_text = F.normalize(emb_text, dim=-1)
emb_image = F.normalize(emb_image, dim=-1)
Score = emb_image @ emb_text.T
print("相似度得分: ", Score)
🔢 实验结果
多样化检索
MMEB评测
📖 引用
若此项目对您的研究有所帮助,请使用以下BibTeX条目引用。
@misc{gu2025breakingmodalitybarrieruniversal,
title={突破模态壁垒:基于多模态大模型的通用嵌入学习},
author={顾天骋 and 杨凯程 and 冯子勇 and 王兴俊 and 张彦钊 and 龙定坤 and 陈英达 and 蔡卫东 and 邓健康},
year={2025},
eprint={2504.17432},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2504.17432},
}