Contriever: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 1: | Riga 1: | ||
Modello di recupero dell'informazione sviluppato da Meta AI (vedi [[Unsupervised Dense Information Retrieval with Contrastive Learning]]) 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. | Modello di recupero dell'informazione sviluppato da [[Meta AI]] (vedi [[Unsupervised Dense Information Retrieval with Contrastive Learning]]) 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 === | === Funzionamento === | ||
| Riga 5: | Riga 7: | ||
'''1. Architettura di base''' | '''1. Architettura di base''' | ||
Contriever utilizza un'architettura transformer (simile a BERT) con alcune modifiche | |||
Contriever utilizza un'architettura transformer (simile a BERT) con alcune iportanti modifiche: | |||
* Un encoder che processa sia le query che i documenti | * 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 | * Un layer di pooling che calcola la media dei token per ottenere un embedding del testo | ||
| Riga 11: | Riga 14: | ||
'''2. Processo di addestramento''' | '''2. Processo di addestramento''' | ||
Durante l'addestramento, Contriever opera su batch di testi (tipicamente 1024 o più passaggi) nel seguente modo: | 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" | * Prende un passaggio di testo originale: "La Torre Eiffel è stata costruita nel 1889" | ||
| Riga 26: | Riga 30: | ||
'''3. Creazione degli embedding''' | '''3. Creazione degli embedding''' | ||
Per ogni testo, Contriever: | Per ogni testo, Contriever: | ||
# Tokenizza il testo | # Tokenizza il testo | ||
Versione delle 09:37, 25 nov 2024
Modello di recupero dell'informazione sviluppato da Meta AI (vedi Unsupervised Dense Information Retrieval with Contrastive Learning) 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 iportanti modifiche:
- 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:
- Tokenizza il testo
- Passa i token attraverso il transformer
- Applica mean pooling sugli output del transformer
- 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:
- La query viene codificata nell'embedding q
- Ogni documento della collezione viene codificato in un embedding d
- Si calcola la similarità tra q e tutti i d
- 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)