Views
No views yet
Tevatron/dse-phi35-vidore-ft, is trained using 1/10 of the Tevatron/docmatix-ir dataset, a variant of HuggingFaceM4/Docmatix specifically adapted for training PDF retrievers with Vision Language Models in open-domain question answering scenarios. For more information on dataset filtering and hard negative mining, refer to the docmatix-ir dataset page.
Followed by finetuning on the (vidore)[https://huggingface.co/datasets/vidore/colpali_train_set] training set. The checkpoint is warmed up by text retrieval and webpage retrieval.1import torch
2from transformers import AutoProcessor, AutoModelForCausalLM
3
4processor = AutoProcessor.from_pretrained('MrLight/dse-phi35-vidore-ft', trust_remote_code=True)
5model = AutoModelForCausalLM.from_pretrained('MrLight/dse-phi35-vidore-ft', trust_remote_code=True, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16, use_cache=False).to('cuda:0')
6
7def get_embedding(last_hidden_state: torch.Tensor, attention_mask: torch.Tensor) -> torch.Tensor:
8 sequence_lengths = attention_mask.sum(dim=1) - 1
9 bs = last_hidden_state.shape[0]
10 reps = last_hidden_state[torch.arange(bs, device=last_hidden_state.device), sequence_lengths]
11 reps = torch.nn.functional.normalize(reps, p=2, dim=-1)
12 return reps1queries = ["query: Where can we see Llama?</s>", "query: What is LLaMA model?</s>"]
2query_inputs = processor(queries, return_tensors="pt", padding="longest", max_length=128, truncation=True).to('cuda:0')
3with torch.no_grad():
4 output = model(**query_inputs, return_dict=True, output_hidden_states=True)
5query_embeddings = get_embedding(output.hidden_states[-1], query_inputs["attention_mask"])1from PIL import Image
2import requests
3from io import BytesIO
4
5# URLs of the images
6url1 = "https://huggingface.co/Tevatron/dse-phi3-docmatix-v2/resolve/main/animal-llama.png"
7url2 = "https://huggingface.co/Tevatron/dse-phi3-docmatix-v2/resolve/main/meta-llama.png"
8
9# Download and open images
10response1 = requests.get(url1)
11response2 = requests.get(url2)
12
13passage_image1 = Image.open(BytesIO(response1.content)).resize((1344, 1344))
14passage_image2 = Image.open(BytesIO(response2.content)).resize((1344, 1344))
15
16passage_images = [passage_image1, passage_image2]
17passage_prompts = ["<|image_1|>\nWhat is shown in this image?</s>", "<|image_2|>\nWhat is shown in this image?</s>"]
18
19# Process inputs and get embeddings
20passage_inputs = processor(passage_prompts, images=passage_images, return_tensors="pt", padding="longest", max_length=4096, truncation=True).to('cuda:0')
21passage_inputs['input_ids'] = passage_inputs['input_ids'].squeeze(0)
22passage_inputs['attention_mask'] = passage_inputs['attention_mask'].squeeze(0)
23passage_inputs['image_sizes'] = passage_inputs['image_sizes'].squeeze(0)
24with torch.no_grad():
25 output = model(**passage_inputs, return_dict=True, output_hidden_states=True)
26doc_embeddings = get_embedding(output.hidden_states[-1], passage_inputs["attention_mask"])
271from torch.nn.functional import cosine_similarity
2num_queries = query_embeddings.size(0)
3num_passages = doc_embeddings.size(0)
4
5for i in range(num_queries):
6 query_embedding = query_embeddings[i].unsqueeze(0)
7 similarities = cosine_similarity(query_embedding, doc_embeddings)
8 print(f"Similarities for Query {i+1}: {similarities.cpu().float().numpy()}")Tevatron/msmarco-passage-aug, thus the model can also effectively encode document as text input.1passage_prompts = [
2 "The llama (/ˈlɑːmə/; Spanish pronunciation: [ˈʎama] or [ˈʝama]) (Lama glama) is a domesticated South American camelid, widely used as a meat and pack animal by Andean cultures since the pre-Columbian era.</s>",
3 "Llama (acronym for Large Language Model Meta AI, and formerly stylized as LLaMA) is a family of autoregressive large language models (LLMs) released by Meta AI starting in February 2023.[2][3] The latest version is Llama 3.1, released in July 2024.[4]</s>"
4]
5
6passage_inputs = processor(passage_prompts, images=None, return_tensors="pt", padding="longest", max_length=4096, truncation=True).to('cuda:0')
7with torch.no_grad():
8 output = model(**passage_inputs, return_dict=True, output_hidden_states=True)
9doc_embeddings = get_embedding(output.hidden_states[-1], passage_inputs["attention_mask"])
10
11for i in range(num_queries):
12 query_embedding = query_embeddings[i].unsqueeze(0)
13 similarities = cosine_similarity(query_embedding, doc_embeddings)
14 print(f"Similarities for Query {i+1}: {similarities.cpu().float().numpy()}")