Elastic
Jina AI
Modelli
API
keyboard_arrow_down
Reader
Converti qualsiasi URL in Markdown per un migliore ancoraggio dei LLM.
Embeddings
Embeddings multimodali e multilingue.
Reranker
Reranker per massimizzare la pertinenza dei risultati di ricerca.
MCP
terminal
CLI
article
llms.txt
smart_toy
Agenti
data_object
Schema
menu_book
Documenti
Login
login
Comprendere il Codice
È una Spiegabilità Significativa?
Perché Potrebbe Emergere l'Allineamento Locale?
Analisi Teorica
Conclusione
Blog tecnico
gennaio 07, 2025

Allineamento Contrastivo Globale Testo-Immagine e Allineamento Locale Token-Patch

CLIP può visualizzare le similitudini token-patch, tuttavia, si tratta più di un trucco di interpretabilità post-hoc che di una "attenzione" robusta o ufficiale del modello. Ecco perché.
Han Xiao • 6 minuti letti

Durante gli esperimenti con modelli in stile ColPali, uno dei nostri ingegneri ha creato una visualizzazione utilizzando il nostro modello jina-clip-v2 recentemente rilasciato. Ha mappato la similarità tra gli embedding dei token e gli embedding delle patch per determinate coppie immagine-testo, creando sovrapposizioni di heatmap che hanno prodotto alcuni spunti visivi interessanti.

Sfortunatamente, questa è solo una visualizzazione euristica - non un meccanismo esplicito o garantito. Mentre l'allineamento contrastivo globale in stile CLIP può (e spesso lo fa) creare incidentalmente allineamenti locali approssimativi tra patch e token, questo è un effetto collaterale non intenzionale piuttosto che un obiettivo deliberato del modello. Lasciami spiegare perché.

tagComprendere il Codice

Google Colab

Analizziamo cosa fa il codice ad alto livello. Nota che jina-clip-v2 in realtà non espone alcuna API per accedere agli embedding a livello di token o patch di default - questa visualizzazione ha richiesto alcune modifiche post-hoc per funzionare.

Calcolare gli embedding a livello di parola

Impostando model.text_model.output_tokens = True, chiamando text_model(x=...,)[1] restituirà un secondo elemento (batch_size, seq_len, embed_dim) per gli embedding dei token. Quindi prende una frase in input, la tokenizza con il tokenizer Jina CLIP, e poi raggruppa i token delle sottoparole in "parole" facendo la media degli embedding dei token corrispondenti. Rileva l'inizio di una nuova parola controllando se la stringa del token inizia con il carattere _ (tipico nei tokenizer basati su SentencePiece). Produce una lista di embedding a livello di parola e una lista di parole (così che "Cane" sia un embedding, "e" sia un embedding, ecc.).

Calcolare gli embedding a livello di patch

Per la torre dell'immagine, vision_model(..., return_all_features=True) restituirà (batch_size, n_patches+1, embed_dim), dove il primo token è il token [CLS]. Da questo, il codice estrae gli embedding per ogni patch (cioè, i token patch del vision transformer). Quindi ridimensiona questi embedding delle patch in una griglia 2D, patch_side × patch_side, che viene poi upsamplata per corrispondere alla risoluzione dell'immagine originale.

Visualizzare la similarità parola-patch

Il calcolo della similarità e la successiva generazione della heatmap sono tecniche di interpretabilità "post-hoc" standard: si seleziona un embedding del testo, si calcola la similarità del coseno con ogni embedding della patch e poi si genera una heatmap che mostra quali patch hanno la più alta similarità con quello specifico embedding del token. Infine, scorre ciascun token nella frase, evidenzia quel token in grassetto a sinistra e sovrappone la heatmap basata sulla similarità sull'immagine originale a destra. Tutti i frame vengono compilati in una GIF animata.

tagÈ una Spiegabilità Significativa?

Da un punto di vista di puro codice, sì, la logica è coerente e produrrà una heatmap per ogni token. Otterrai una serie di frame che evidenziano le similarità delle patch, quindi lo script "fa quello che promette".

Guardando gli esempi sopra, vediamo che parole come moon e branches sembrano allinearsi bene con le loro patch visive corrispondenti nell'immagine originale. Ma ecco la domanda chiave: è un allineamento significativo o stiamo solo vedendo una coincidenza fortunata?

Questa è una domanda più profonda. Per comprendere le avvertenze, ricorda come viene addestrato CLIP:

Diagramma del modello JINA-CLIP-V2 che mostra le fasi dall'input all'output per l'elaborazione del testo in inglese e multilingue.
Jina-CLIP v2 combina un encoder di testo (Jina XLM-RoBERTa, 561M parametri) e un encoder visivo (EVA02-L14, 304M parametri). Ogni quadrato colorato a destra rappresenta una frase completa o un'immagine nel batch - non singoli token o patch.
  • CLIP usa un allineamento contrastivo globale tra un'intera immagine e un intero pezzo di testo. Durante l'addestramento, l'encoder dell'immagine produce un singolo vettore (rappresentazione aggregata), e l'encoder del testo produce un altro singolo vettore; CLIP viene addestrato in modo che questi corrispondano per coppie testo-immagine corrispondenti e non corrispondano in caso contrario.
  • Non c'è supervisione esplicita a livello di 'la patch X corrisponde al token Y'. Il modello non è direttamente addestrato a evidenziare "questa regione dell'immagine è il cane, quella regione è il gatto," ecc. Invece, viene insegnato che l'intera rappresentazione dell'immagine dovrebbe corrispondere all'intera rappresentazione del testo.
  • Poiché l'architettura di CLIP è un Vision Transformer sul lato immagine e un transformer del testo sul lato testo—entrambi formano encoder separati—non c'è un modulo di cross-attention che allinei nativamente le patch ai token. Invece, si ottiene una self-attention puramente in ciascuna torre, più una proiezione finale per gli embedding globali dell'immagine o del testo.

In breve, questa è una visualizzazione euristica. Il fatto che un dato embedding di patch possa essere vicino o lontano da un particolare embedding di token è in qualche modo emergente. È più un trucco di interpretabilità post-hoc che un'"attenzione" robusta o ufficiale del modello.

tagPerché Potrebbe Emergere l'Allineamento Locale?

Quindi perché potremmo a volte notare allineamenti locali a livello parola-patch? Ecco il punto: anche se CLIP è addestrato su un obiettivo contrastivo globale immagine-testo, usa comunque self-attention (negli encoder di immagini basati su ViT) e layer transformer (per il testo). All'interno di questi layer di self-attention, diverse parti delle rappresentazioni dell'immagine possono interagire tra loro, proprio come fanno le parole nelle rappresentazioni del testo. Attraverso l'addestramento su enormi dataset di immagini-testo, il modello sviluppa naturalmente strutture latenti interne che lo aiutano a far corrispondere le immagini complessive alle loro descrizioni testuali corrispondenti.

L'allineamento locale può apparire in queste rappresentazioni latenti per almeno due ragioni:

  1. Modelli di co-occorrenza: Se un modello vede molte immagini di "cani" accanto a molte immagini di "gatti" (spesso etichettate o descritte con queste parole), può imparare caratteristiche latenti che corrispondono approssimativamente a questi concetti. Quindi l'embedding per "cane" potrebbe diventare vicino a patch locali che rappresentano una forma o una texture simile a quella di un cane. Questo non è supervisionato esplicitamente a livello di patch, ma emerge dall'associazione ripetuta tra coppie di immagini/testo di cani.
  2. Self-attention: Nei Vision Transformers, i patch prestano attenzione l'uno all'altro. I patch distintivi (come il muso di un cane) possono finire per avere una "firma" latente coerente, poiché il modello sta cercando di produrre una singola rappresentazione globalmente accurata dell'intera scena. Se questo aiuta a minimizzare la perdita contrastiva complessiva, verrà rafforzato.

tagAnalisi Teorica

L'obiettivo di apprendimento contrastivo di CLIP mira a massimizzare la similarità del coseno tra coppie immagine-testo corrispondenti mentre la minimizza per le coppie non corrispondenti. Assumiamo che gli encoder di testo e immagine producano rispettivamente embedding di token e patch:

ui=1M∑m=1Mui,m,vi=1K∑k=1Kvi,k\mathbf{u}_i = \frac{1}{M} \sum_{m=1}^M \mathbf{u}_{i,m}, \quad \mathbf{v}_i = \frac{1}{K} \sum_{k=1}^K \mathbf{v}_{i,k}ui​=M1​m=1∑M​ui,m​,vi​=K1​k=1∑K​vi,k​

La similarità globale può essere rappresentata come un aggregato di similarità locali:

sim(ui,vi)=1MK∑m=1M∑k=1Kui,m⊤vi,k\text{sim}(\mathbf{u}_i, \mathbf{v}_i) = \frac{1}{MK} \sum_{m=1}^M \sum_{k=1}^K \mathbf{u}_{i,m}^\top \mathbf{v}_{i,k}sim(ui​,vi​)=MK1​m=1∑M​k=1∑K​ui,m⊤​vi,k​

Quando specifiche coppie token-patch si verificano frequentemente nei dati di training, il modello rafforza la loro similarità attraverso aggiornamenti graduali del gradiente:

Δum∗∝∑c=1Cvk∗(c),Δvk∗∝∑c=1Cum∗(c)\Delta \mathbf{u}_{m^*} \propto \sum_{c=1}^C \mathbf{v}_{k^*}^{(c)}, \quad \Delta \mathbf{v}_{k^*} \propto \sum_{c=1}^C \mathbf{u}_{m^*}^{(c)}Δum∗​∝c=1∑C​vk∗(c)​,Δvk∗​∝c=1∑C​um∗(c)​

, dove CCC è il numero di co-occorrenze. Questo porta a un aumento significativo di um∗⊤vk∗\mathbf{u}_{m^*}^\top \mathbf{v}_{k^*}um∗⊤​vk∗​, promuovendo un allineamento locale più forte per queste coppie. Tuttavia, la perdita contrastiva distribuisce gli aggiornamenti del gradiente tra tutte le coppie token-patch, limitando la forza degli aggiornamenti per qualsiasi coppia specifica:

∂L∂um∝−∑k=1Kvk⋅(exp⁡(u⊤v/τ)∑j=1Nexp⁡(u⊤vj/τ))\frac{\partial \mathcal{L}}{\partial \mathbf{u}_{m}} \propto -\sum_{k=1}^K \mathbf{v}_k \cdot \left( \frac{\exp(\mathbf{u}^\top \mathbf{v} / \tau)}{\sum_{j=1}^N \exp(\mathbf{u}^\top \mathbf{v}_j / \tau)} \right)∂um​∂L​∝−k=1∑K​vk​⋅(∑j=1N​exp(u⊤vj​/τ)exp(u⊤v/τ)​)

Questo impedisce un significativo rafforzamento delle similarità individuali token-patch.

tagConclusione

Le visualizzazioni token-patch di CLIP sfruttano un allineamento incidentale ed emergente tra le rappresentazioni di testo e immagine. Questo allineamento, sebbene intrigante, deriva dall'addestramento contrastivo globale di CLIP e manca della robustezza strutturale necessaria per una spiegabilità precisa e affidabile. Le visualizzazioni risultanti mostrano spesso rumore e inconsistenza, limitando la loro utilità per applicazioni interpretative approfondite.

What is ColBERT and Late Interaction and Why They Matter in Search?
Jina AI's ColBERT on Hugging Face has set Twitter abuzz, bringing a fresh perspective to search with its 8192-token capability. This article unpacks the nuances of ColBERT and ColBERTv2, showcasing their innovative designs and why their late interaction feature is a game-changer for search.
Jina AIHan Xiao

I modelli a interazione tardiva come ColBERT e ColPali affrontano queste limitazioni incorporando architetturalmente allineamenti espliciti e dettagliati tra token di testo e patch di immagini. Elaborando le modalità in modo indipendente ed eseguendo calcoli di similarità mirati in una fase successiva, questi modelli garantiscono che ogni token di testo sia significativamente associato alle regioni dell'immagine pertinenti.

Categorie:
Blog tecnico
rss_feed

Per saperne di più
marzo 11, 2026 • 7 minuti letti
Bootstrapping Audio Embeddings from Multimodal LLMs
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
marzo 06, 2026 • 6 minuti letti
Identifying Embedding Models from Raw Numerical Values
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
settembre 09, 2025 • 11 minuti letti
Multimodal Embeddings in Llama.cpp and GGUF
Andrei Ungureanu
Alex C-G
Cartoon llama in the center of a white background, emitting laser-like beams from its eyes. The illustration creates a playfu
Lingua / tema attuale
Search Foundation
Reader
Embeddings
Reranker
Ottieni la chiave API Jina
Limite di velocità
Chi siamo
Notizie
Scarica il logo Jina
open_in_new
Scarica il logo Elastic
open_in_new
Stato dell'API
Elastic © 2026.SicurezzaTermini & CondizioniPrivacyGestisci i cookieNon vendere né condividere le mie informazioni personali
Questo sito web e tutti i contenuti, software, prodotti e servizi ad esso associati sono destinati esclusivamente all'uso professionale. Non è previsto né raccomandato alcun utilizzo da parte dei consumatori.