模型介绍
内容详情
替代品
模型简介
该模型采用文档截图嵌入(DSE)方法,以原始视觉格式捕获文档,保留所有信息(如文本、图像和布局),避免繁琐的解析和潜在的信息丢失。旨在为文本、PDF文档、网页和幻灯片检索提供通用的嵌入模型。
模型特点
原始视觉格式处理
直接处理文档截图,保留原始布局、文本和图像信息
灵活的表示维度
支持调整输出嵌入维度以平衡效果与效率
灵活的输入尺寸
可根据GPU资源调整输入图像尺寸
多语言支持
支持英文和法文文档处理
模型能力
文档截图嵌入
密集向量检索
跨模态文档理解
多语言文档处理
使用案例
文档检索
学术论文检索
通过论文截图检索相关文献
在ViDoRE排行榜上实现85.8的nDCG@5
企业文档管理
快速检索PDF、PPT等企业文档
跨模态搜索
图文混合检索
同时处理文档中的文本和视觉信息进行检索
language:
- 英文
- 法文 license: apache-2.0 library_name: Tevatron tags:
- vidore datasets:
- Tevatron/docmatix-ir
- HuggingFaceM4/Docmatix
- Tevatron/msmarco-passage-aug
- vidore/colpali_train_set
- Tevatron/wiki-ss-nq base_model:
- Qwen/Qwen2-VL-2B-Instruct pipeline_tag: 视觉文档检索
DSE-QWen2-2b-MRL-V1
DSE-QWen2-2b-MRL-V1 是一个双编码器模型,专为将文档截图编码为密集向量以实现文档检索而设计。 文档截图嵌入(DSE)方法以原始视觉格式捕获文档,保留所有信息,如文本、图像和布局,从而避免繁琐的解析和潜在的信息丢失。 DSE 旨在为文本、PDF 文档、网页和幻灯片检索提供一个通用的嵌入模型。
例如,DSE-QWen2-2b-MRL-V1 在 ViDoRE 排行榜上实现了 85.8 的 nDCG@5。
注意:
如果输入图像较大,QWen 视觉编码器可能会占用较高的 GPU 内存。根据 GPU 资源调整 'resized_height':680 , 'resized_width':680
(见下文)以适应显存。
如何使用模型
为了支持更好的效果与效率权衡,此检查点训练支持:
- 灵活的表示维度。
- 灵活的输入图像尺寸。
加载模型和处理器
import torch
from transformers import AutoProcessor, Qwen2VLForConditionalGeneration
from qwen_vl_utils import process_vision_info
min_pixels = 1*28*28
max_pixels = 2560*28*28
processor = AutoProcessor.from_pretrained("MrLight/dse-qwen2-2b-mrl-v1", min_pixels=min_pixels, max_pixels=max_pixels)
model = Qwen2VLForConditionalGeneration.from_pretrained('MrLight/dse-qwen2-2b-mrl-v1', attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16).to('cuda:0').eval()
processor.tokenizer.padding_side = "left"
model.padding_side = "left"
def get_embedding(last_hidden_state: torch.Tensor, dimension: int) -> torch.Tensor:
reps = last_hidden_state[:, -1]
reps = torch.nn.functional.normalize(reps[:, :dimension], p=2, dim=-1)
return reps
编码文本查询
from PIL import Image
queries = ["我们在哪里可以看到羊驼?", "LLaMA AI 模型是什么?"]
query_messages = []
for query in queries:
message = [
{
'role': 'user',
'content': [
{'type': 'image', 'image': Image.new('RGB', (28, 28)), 'resized_height':1 , 'resized_width':1}, # 需要一个虚拟图像以便处理。
{'type': 'text', 'text': f'查询: {query}'},
]
}
]
query_messages.append(message)
query_texts = [
processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True) + "<|endoftext|>"
for msg in query_messages
]
query_image_inputs, query_video_inputs = process_vision_info(query_messages)
query_inputs = processor(text=query_texts, images=query_image_inputs, videos=query_video_inputs, padding='longest', return_tensors='pt').to('cuda:0')
cache_position = torch.arange(0, len(query_texts))
query_inputs = model.prepare_inputs_for_generation(**query_inputs, cache_position=cache_position, use_cache=False)
with torch.no_grad():
output = model(**query_inputs, return_dict=True, output_hidden_states=True)
query_embeddings = get_embedding(output.hidden_states[-1], 1536) # 调整维度以权衡效率,例如 512
编码文档截图
import requests
from io import BytesIO
# 图像 URL
url1 = "https://huggingface.co/Tevatron/dse-phi3-docmatix-v2/resolve/main/animal-llama.png"
url2 = "https://huggingface.co/Tevatron/dse-phi3-docmatix-v2/resolve/main/meta-llama.png"
# 下载并打开图像
response1 = requests.get(url1)
response2 = requests.get(url2)
doc_image1 = Image.open(BytesIO(response1.content))
doc_image2 = Image.open(BytesIO(response2.content))
doc_images = [doc_image1, doc_image2]
doc_messages = []
for doc in doc_images:
message = [
{
'role': 'user',
'content': [
{'type': 'image', 'image': doc}, #'resized_height':680 , 'resized_width':680} # 调整图像尺寸以权衡效率
{'type': 'text', 'text': '这张图片展示了什么?'}
]
}
]
doc_messages.append(message)
doc_texts = [
processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True) + "<|endoftext|>"
for msg in doc_messages
]
doc_image_inputs, doc_video_inputs = process_vision_info(doc_messages)
doc_inputs = processor(text=doc_texts, images=doc_image_inputs, videos=doc_video_inputs, padding='longest', return_tensors='pt').to('cuda:0')
cache_position = torch.arange(0, len(doc_texts))
doc_inputs = model.prepare_inputs_for_generation(**doc_inputs, cache_position=cache_position, use_cache=False)
with torch.no_grad():
output = model(**doc_inputs, return_dict=True, output_hidden_states=True)
doc_embeddings = get_embedding(output.hidden_states[-1], 1536) # 调整维度以权衡效率,例如 512
计算相似度
from torch.nn.functional import cosine_similarity
num_queries = query_embeddings.size(0)
num_passages = doc_embeddings.size(0)
for i in range(num_queries):
query_embedding = query_embeddings[i].unsqueeze(0)
similarities = cosine_similarity(query_embedding, doc_embeddings)
print(f"查询 {i+1} 的相似度: {similarities.cpu().float().numpy()}")
编码文档文本
此 DSE 检查点通过 Tevatron/msmarco-passage-aug
进行了预热,因此模型也可以有效地将文档编码为文本输入。
doc_texts = [
"羊驼(学名:Lama glama)是一种驯化的南美洲骆驼科动物,自前哥伦布时代以来被安第斯文化广泛用作肉用和驮畜。",
"Llama(Large Language Model Meta AI 的缩写,曾用名 LLaMA)是 Meta AI 自 2023 年 2 月起发布的一系列自回归大语言模型(LLMs)。最新版本是 2024 年 7 月发布的 Llama 3.1。"
]
doc_messages = []
for doc in doc_texts:
message = [
{
'role': 'user',
'content': [
{'type': 'image', 'image': Image.new('RGB', (28, 28)), 'resized_height':1 , 'resized_width':1}, # 需要一个虚拟图像以便处理。
{'type': 'text', 'text': f'文档: {doc}'}
]
}
]
doc_messages.append(message)
doc_texts = [
processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True) + "<|endoftext|>"
for msg in doc_messages
]
doc_image_inputs, doc_video_inputs = process_vision_info(doc_messages)
doc_inputs = processor(text=doc_texts, images=doc_image_inputs, videos=doc_video_inputs, padding='longest', return_tensors='pt').to('cuda:0')
cache_position = torch.arange(0, len(doc_texts))
doc_inputs = model.prepare_inputs_for_generation(**doc_inputs, cache_position=cache_position, use_cache=False)
with torch.no_grad():
output = model(**doc_inputs, return_dict=True, output_hidden_states=True)
doc_embeddings = get_embedding(output.hidden_states[-1], 1536) # 调整维度以权衡效率,例如 512
for i in range(num_queries):
query_embedding = query_embeddings[i].unsqueeze(0)
similarities = cosine_similarity(query_embedding, doc_embeddings)
print(f"查询 {i+1} 的相似度: {similarities.cpu().float().numpy()}")
引用
如果您发现此检查点有帮助,请考虑引用 QWen2、Docmatix、ViDoRE 和我们的 DSE 工作。
Codebert Base
CodeBERT是一个面向编程语言与自然语言的预训练模型,基于RoBERTa架构,支持代码搜索和代码生成文档等功能。
多模态融合
C
microsoft
1.6M
248
Llama 4 Scout 17B 16E Instruct
其他
Llama 4 Scout是Meta开发的多模态AI模型,采用混合专家架构,支持12种语言的文本和图像交互,具有17B激活参数和109B总参数。
多模态融合
Transformers

支持多种语言
L
meta-llama
817.62k
844
Unixcoder Base
Apache-2.0
UniXcoder是一个统一的多模态预训练模型,利用代码注释和抽象语法树等多模态数据预训练代码表示。
多模态融合
Transformers

英语
U
microsoft
347.45k
51
TITAN
TITAN是一个多模态全切片基础模型,通过视觉自监督学习和视觉-语言对齐进行预训练,用于病理学图像分析。
多模态融合
Safetensors
英语
T
MahmoodLab
213.39k
37
Qwen2.5 Omni 7B
其他
Qwen2.5-Omni 是一个端到端的多模态模型,能够感知文本、图像、音频和视频等多种模态,并以流式方式生成文本和自然语音响应。
多模态融合
Transformers

英语
Q
Qwen
206.20k
1,522
Minicpm O 2 6
MiniCPM-o 2.6是一款手机端运行的GPT-4o级多模态大模型,支持视觉、语音与直播流处理
多模态融合
Transformers

其他
M
openbmb
178.38k
1,117
Llama 4 Scout 17B 16E Instruct
其他
Llama 4 Scout是Meta推出的17B参数/16专家混合的多模态AI模型,支持12种语言和图像理解,具有行业领先性能。
多模态融合
Transformers

支持多种语言
L
chutesai
173.52k
2
Qwen2.5 Omni 3B
其他
Qwen2.5-Omni是一款端到端多模态模型,能够感知文本、图像、音频和视频等多种模态信息,并以流式方式同步生成文本和自然语音响应。
多模态融合
Transformers

英语
Q
Qwen
48.07k
219
One Align
MIT
Q-Align是一个多任务视觉评估模型,专注于图像质量评估(IQA)、美学评估(IAA)和视频质量评估(VQA),在ICML2024上发表。
多模态融合
Transformers

O
q-future
39.48k
25
Biomedvlp BioViL T
MIT
BioViL-T是一个专注于分析胸部X光片和放射学报告的视觉语言模型,通过时序多模态预训练提升性能。
多模态融合
Transformers

英语
B
microsoft
26.39k
35
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers

支持多种语言
L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers

英语
C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统
中文
R
uer
2,694
98
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文