Contriever: differenze tra le versioni

Da Wiki AI.
(Creata pagina con "Modello di recupero dell'informazione sviluppato da Meta AI che utilizza l'apprendimento contrastivo per creare rappresentazioni dense di testi senza necessità di supervisione. È progettato per superare le limitazioni dei precedenti modelli che richiedevano dati annotati manualmente. === Funzionamento === Il funzionamento di Contriever si basa su alcuni principi chiave: '''1. Architettura di base''' Contriever utilizza un'architettura transformer (simile a BERT) con...")
 
Nessun oggetto della modifica
Riga 102: Riga 102:
</syntaxhighlight>
</syntaxhighlight>


[[Categoria:Information Retrieval]]
[[Categoria:Modello]]
[[Categoria:Modelli di Machine Learning]]
[[Categoria:Intelligenza Artificiale]]

Versione delle 13:32, 24 nov 2024

Modello di recupero dell'informazione sviluppato da Meta AI che utilizza l'apprendimento contrastivo per creare rappresentazioni dense di testi senza necessità di supervisione. È progettato per superare le limitazioni dei precedenti modelli che richiedevano dati annotati manualmente.

Funzionamento

Il funzionamento di Contriever si basa su alcuni principi chiave:

1. Architettura di base Contriever utilizza un'architettura transformer (simile a BERT) con alcune modifiche cruciali:

  • Un encoder che processa sia le query che i documenti
  • Un layer di pooling che calcola la media dei token per ottenere un embedding del testo
  • Una normalizzazione L2 degli embedding finali

2. Processo di addestramento Durante l'addestramento, Contriever opera su batch di testi (tipicamente 1024 o più passaggi) nel seguente modo:

  • Prende un passaggio di testo originale: "La Torre Eiffel è stata costruita nel 1889"
  • Crea una variante sintetica come query: "Quando è stata costruita la Torre Eiffel?"
  • Usa altri passaggi nel batch come esempi negativi: "Il Colosseo si trova a Roma", "La Statua della Libertà è a New York"

Per ogni batch:

Testo originale Query sintetica Negativi
La Torre Eiffel è stata costruita nel 1889 Quando è stata costruita la Torre Eiffel? Il Colosseo si trova a Roma
Parigi è la capitale della Francia Qual è la capitale della Francia? Tokyo è la città più popolosa del mondo

3. Creazione degli embedding Per ogni testo, Contriever:

  1. Tokenizza il testo
  2. Passa i token attraverso il transformer
  3. Applica mean pooling sugli output del transformer
  4. Normalizza il vettore risultante

Esempio di processo: "La Torre Eiffel è stata costruita nel 1889" → [0.2, -0.3, 0.1, ..., 0.4] (vettore 768-dimensionale)

4. Calcolo della similarità La similarità tra query e documento viene calcolata usando la similarità del coseno:

5. Funzione di perdita Durante l'addestramento, Contriever ottimizza la funzione InfoNCE:

dove τ è un parametro di temperatura (tipicamente 0.05).

6. Processo di retrieval Durante l'utilizzo:

  1. La query viene codificata nell'embedding q
  2. Ogni documento della collezione viene codificato in un embedding d
  3. Si calcola la similarità tra q e tutti i d
  4. Si restituiscono i k documenti più simili

Esempio pratico:

Query Documento più simile Similarità
Quando fu costruita la Torre Eiffel? La Torre Eiffel è stata costruita nel 1889 0.82
Chi ha inventato la lampadina? Thomas Edison inventò la lampadina nel 1879 0.75

7. Ottimizzazioni Contriever implementa diverse ottimizzazioni:

  • Batch di grandi dimensioni per migliore convergenza
  • Normalizzazione degli embedding per stabilità numerica
  • Cache degli embedding per efficienza computazionale
  • Temperature scaling per bilanciare l'apprendimento

Le prestazioni di Contriever sono particolarmente notevoli in scenari zero-shot, dove supera modelli supervisionati tradizionali su vari benchmark di recupero dell'informazione.

Implementazione

Un esempio semplificato di utilizzo con Hugging Face:

from transformers import AutoModel, AutoTokenizer

# Caricamento del modello
tokenizer = AutoTokenizer.from_pretrained('facebook/contriever')
model = AutoModel.from_pretrained('facebook/contriever')

# Codifica del testo
def encode_text(text):
   inputs = tokenizer(text, return_tensors='pt', truncation=True)
   outputs = model(**inputs)
   embeddings = outputs.last_hidden_state.mean(dim=1)
   return embeddings

# Esempio di utilizzo
query = "Quando fu costruita la Torre Eiffel?"
doc = "La Torre Eiffel è stata costruita nel 1889"

query_emb = encode_text(query)
doc_emb = encode_text(doc)

# Calcolo similarità
similarity = torch.cosine_similarity(query_emb, doc_emb)