qwen-palm / README.md
yuri-no's picture
Update README.md
15d98a1 verified
metadata
library_name: transformers
language:
  - it

Model Card for Model ID

Model Details

This repository only contains the adapter of the fine-tuned model! You should have access to the base model in order to load it correctly.

Model Description

  • Developed by: Yuri Noviello
  • Language(s) (NLP): Italian
  • Finetuned from model: Qwen/Qwen2-1.5B

Evaluation

Benchmark Results on MIRACL-ita-ArgosTranslate dev split

Model MRR@10 Recall@100 nDCG@10
minerva-argos 66.45 94.51 61.77
minerva-palm 65.32 94.38 60.74
qwen-argos 73.47 96.98 69.04
qwen-palm 73.16 97.21 69.12
gemma-argos 73.05 96.42 69.05
gemma-palm 72.56 96.33 68.87

Benchmark Results on MIRACL-ita-PaLM dev split

Model MRR@10 Recall@100 nDCG@10
minerva-argos 67.93 96.39 64.04
minerva-palm 67.73 96.49 63.81
qwen-argos 74.95 97.96 71.29
qwen-palm 74.54 98.04 70.56
gemma-argos 75.80 98.43 71.95
gemma-palm 75.30 98.10 71.87

Benchmark Results on Shitao/MLDR test split

Model MRR@10 Recall@100 nDCG@10
minerva-argos 36.04 67.50 38.75
minerva-palm 36.55 68.00 38.91
qwen-argos 40.19 70.50 42.68
qwen-palm 40.87 69.00 43.94
gemma-argos 37.19 75.00 39.78
gemma-palm 40.75 74.50 43.46

How to Use

import torch
import torch.nn.functional as F

from torch import Tensor
from transformers import AutoTokenizer, AutoModel


def last_token_pool(last_hidden_states: Tensor,
                 attention_mask: Tensor) -> Tensor:
    left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
    if left_padding:
        return last_hidden_states[:, -1]
    else:
        sequence_lengths = attention_mask.sum(dim=1) - 1
        batch_size = last_hidden_states.shape[0]
        return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]


def get_detailed_instruct(task_description: str, query: str) -> str:
    return f'{task_description}\nQuery: {query}'



model = AutoModel.from_pretrained('yuri-no/qwen-palm', torch_dtype=torch.bfloat16).to('cuda')
tokenizer = AutoTokenizer.from_pretrained('yuri-no/qwen-palm')

# Each query must come with a one-sentence instruction that describes the task
task = 'Given a search query, retrieve relevant passages that answer the query'
queries = [
    get_detailed_instruct(task, 'In che anno il Napoli ha vinto il suo terzo scudetto?'),
    get_detailed_instruct(task, 'Quali sono le migliori Università italiane?'),
]
# No need to add instruction for retrieval documents
documents = [
    "Dopo un'attesa durata 33 anni, il Napoli è Campione d'Italia per la terza volta. Per la certezza aritmetica serviva che non perdesse fuori casa con l'Udinese ed è bastato un pareggio per 1-1, avvenuto con il brivido del gol bianconero firmato da Lovric e poi con il pareggio di Osimhen al 52'. La partita di giovedì 4 maggio 2023, trasmessa anche sui maxi-schermi dello Stadio Maradona, è diventata così così in una grande festa per tutto il popolo napoletano e una pagina indimenticabile nella storia del calcio italiano.",
    "L’Università di Bologna si conferma ancora una volta tra le migliori d’Italia. Stando a un’analisi delle più autorevoli classifiche universitarie i cui risultati sono stati pubblicati dalla piattaforma di apprendimento Preply, la quale ha esaminato le classifiche accademiche di U.S. News in collaborazione con l'istituto di analisi Clarivate, sono stati analizzati i dieci corsi di laurea più popolari nelle principali città universitarie italiane.",
    "Il Decreto Legislativo 7 marzo 2005 n. 82 Codice dell'Amministrazione digitale, definisce le pubblicazioni contenute su supporti informatici valide e rilevanti a tutti gli effetti di legge in quanto la riproduzione è effettuata in modo tale da garantire la conformità dei documenti agli atti originali. Cio' al fine di rendere possibile l'esonero della produzione ed esibizione del formato originale su supporto cartaceo quando richiesto ad ogni effetto di legge."
]
input_texts = queries + documents

max_length = 512
# Tokenize the input texts
batch_dict = tokenizer(input_texts, max_length=max_length, padding=True, truncation=True, return_tensors='pt').to('cuda')

outputs = model(**batch_dict)
embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])

# normalize embeddings
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100

print(scores.tolist())
# [[55.5, 28.75, 18.0],
#  [24.75, 62.0, 19.375]]