E5-V项目介绍
背景简介
E5-V是一种基于多模态大语言模型(MLLMs)的通用嵌入框架,重点在于有效地跨越不同输入类型之间的模态差异。这个模型是通过在lmms-lab/llama3-llava-next-8b基础上微调得来的,展现了即使在不进行进一步微调的情况下,在多模态嵌入中依然能达到卓越的性能。
项目核心
E5-V的主要创新之一在于它所提出的单一模态训练方法。在这种方法中,模型仅在文本对上进行训练。结果显示,这种单一模态训练方法相比于传统的多模态训练方法能够提供更好的性能表现。
具体应用
在实际应用中,E5-V被设计为能够处理文本与图像两种不同类型的输入,并能有效生成相应的嵌入。这种能力使得E5-V在涉及不同模态融合的任务中有着广泛的应用前景。
示例代码
通过一个简单的Python代码示例,可以展示E5-V处理图像和文本输入的过程:
import torch
import torch.nn.functional as F
import requests
from PIL import Image
from transformers import AutoTokenizer
from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration
llama3_template = '<|start_header_id|>user<|end_header_id|>\n\n{}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n \n'
processor = LlavaNextProcessor.from_pretrained('royokong/e5-v')
model = LlavaNextForConditionalGeneration.from_pretrained('royokong/e5-v', torch_dtype=torch.float16).cuda()
img_prompt = llama3_template.format('<image>\nSummary above image in one word: ')
text_prompt = llama3_template.format('<sent>\nSummary above sentence in one word: ')
urls = ['https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/American_Eskimo_Dog.jpg/360px-American_Eskimo_Dog.jpg',
'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Felis_catus-cat_on_snow.jpg/179px-Felis_catus-cat_on_snow.jpg']
images = [Image.open(requests.get(url, stream=True).raw) for url in urls]
texts = ['A dog sitting in the grass.',
'A cat standing in the snow.']
text_inputs = processor([text_prompt.replace('<sent>', text) for text in texts], return_tensors="pt", padding=True).to('cuda')
img_inputs = processor([img_prompt]*len(images), images, return_tensors="pt", padding=True).to('cuda')
with torch.no_grad():
text_embs = model(**text_inputs, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
img_embs = model(**img_inputs, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
text_embs = F.normalize(text_embs, dim=-1)
img_embs = F.normalize(img_embs, dim=-1)
print(text_embs @ img_embs.t())
进一步信息
更多的细节和技术说明可以通过E5-V的GitHub页面找到。在这个页面上,感兴趣的读者可以深入了解模型的构建和训练方法,以及如何在实际项目中应用这个多模态嵌入框架。