许可证: MIT
数据集:
- TIGER-Lab/MMEB-train
语言:
- 英语
评估指标:
- 召回率
基础模型:
- llava-hf/llava-onevision-qwen2-7b-ov-hf
任务类型: 图像文本到文本
库名称: transformers
突破模态壁垒:基于多模态大模型的通用嵌入学习
顾天城*,
杨凯程*,
冯子勇,
王兴俊,
张彦钊,
龙定坤,
陈英达,
蔡卫东,
邓健康
项目主页 | 论文 | 代码库
UniME以336×336图像分辨率训练,在MMEB排行榜上位列榜首。(截图时间为2025年5月6日UTC+8 08:00)
核心亮点
为增强多模态大模型的嵌入能力,我们提出文本判别知识蒸馏方法。训练过程解耦大模型的LLM组件,通过提示语"用一词总结上述句子"处理文本,并基于批量相似度分布的KL散度对齐学生模型(MLLM)与教师模型(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
pip install transformers==4.49.0
import torch
from PIL import Image
from torch.nn import functional as F
from transformers import AutoProcessor, LlavaOnevisionForConditionalGeneration
def appply_chat_template(image=None, text=None):
if image != None:
conversation_image = [{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "用一词总结上图:\n"},
],
}]
elif text!= None:
conversation_image = [{
"role": "user",
"content": [
{"type": "text", "text": f"{text}\n用一词总结上述句子:\n"},
],
}]
return conversation_image
base_model_path="DeepGlint-AI/UniME-LLaVA-OneVision-7B"
text = "一名男子正在过马路,旁边停着一辆红色轿车。"
image_path = "figures/demo.png"
input_image = [Image.open(image_path)]
transform = AutoProcessor.from_pretrained(base_model_path, trust_remote_code=True)
model = LlavaOnevisionForConditionalGeneration.from_pretrained(base_model_path,device_map="cuda", trust_remote_code=True, torch_dtype=torch.float16)
transform.tokenizer.padding_side = "left"
transform.tokenizer.padding = True
inputs_text = transform.apply_chat_template([appply_chat_template(text = text)],
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
padding=True).to("cuda")
inputs_image = transform.apply_chat_template([appply_chat_template(image = input_image)],
add_generation_prompt=True,
tokenize=True,
return_dict=True,
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.item())
实验结果
多样化检索
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},
}