Google ha recentemente rilasciato Gemini Embedding 2, il loro primo modello di embedding nativamente multimodale. Testo, immagini, video, audio, documenti, tutti mappati in un unico spazio vettoriale a 3072 dimensioni. Questo fa parte di una tendenza più ampia verso i modelli di embedding omni: modelli unificati che gestiscono tutte le modalità in un'unica architettura, da jina-embeddings-v4 a Omni-Embed-Nemotron fino a Omni-5.

Ciò che ha attirato la nostra attenzione è stato l'audio. La maggior parte delle persone sente "embedding multimodale" e pensa alle immagini, forse ai video. L'audio è la modalità dimenticata: più difficile da raccogliere, più difficile da etichettare e con meno persone che ci lavorano. In Jina AI abbiamo esplorato esattamente questo problema, costruendo piccoli modelli di embedding audio (con meno di 1,2 miliardi di parametri) come parte del nostro lavoro verso gli embedding omni. Il rilascio di Gemini Embedding 2 è un buon momento per condividere ciò che abbiamo imparato lungo il percorso.
Embedding audio
Un embedding audio è una rappresentazione vettoriale a lunghezza fissa di una clip audio. Data una forma d'onda grezza, il modello produce un vettore denso (tipicamente da 768 a 3072 dimensioni) che cattura il contenuto semantico del suono. Due clip con significato simile producono embedding simili, e una clip audio si posiziona vicino alla sua descrizione testuale nello spazio di embedding condiviso. Questo è un tassello del puzzle degli embedding omni: una volta che si possono incorporare audio insieme a testo e immagini nello stesso spazio vettoriale, si sblocca il recupero cross-modale tra tutte le modalità.
L'approccio dominante dal 2022 è il Contrastive Language-Audio Pretraining (CLAP), che estende CLIP all'audio. LAION-CLAP ha scalato questo metodo con 630.000 coppie e la fusione delle caratteristiche. La variante più forte (Elizalde et al., 2023) è stata addestrata su 4,6 milioni di coppie utilizzando un codificatore audio su 22 diverse attività audio abbinato a un decodificatore autoregressivo, ottenendo 42.0 cvR@5 su AudioCaps con 250 milioni di parametri.
Noi seguiamo una strada diversa: trasformare gli LLM multimodali che già comprendono l'audio in modelli di embedding.
Architettura
In primo luogo, cosa entra e cosa esce. L'input è l'audio grezzo: una forma d'onda decodificata da qualsiasi formato standard (WAV, MP3, FLAC) e ricampionata a 16kHz mono. Il codificatore audio converte questa forma d'onda in uno spettrogramma log-mel a 128 bin, quindi la elabora in una sequenza di token di caratteristiche a circa 150 token al secondo. Una clip di 10 secondi diventa circa 1.500 token. La lunghezza massima dell'input è di 30 secondi; l'audio più lungo deve essere suddiviso in blocchi. L'output è un singolo vettore denso (l'embedding), tipicamente da 896 a 3584 dimensioni a seconda della dimensione del backbone dell' LLM.
Partiamo da Qwen2.5-Omni, un LLM multimodale con comprensione nativa dell'audio. Tre componenti: un codificatore audio (~0,6-0,8 miliardi di parametri) che converte le forme d'onda in vettori di caratteristiche tramite una proiezione lineare da ~4,5 milioni, un backbone LLM (0,5-7 miliardi di parametri) che elabora sia le caratteristiche audio che i token di testo con ogni strato transformer che aggiunge ~0,2 miliardi di parametri, e uno strato di pooling che esegue il mean-pooling dell'ultimo stato nascosto in un singolo vettore di embedding. Entrambe le modalità condividono lo stesso backbone LLM, quindi sono già approssimativamente allineate dal pre-addestramento.

L'obiettivo dell'addestramento è la perdita contrastiva InfoNCE. Ogni modalità viene codificata indipendentemente, la perdita viene calcolata in entrambe le direzioni e mediata:
def training_step(audio_batch, text_batch):
audio_embeds = model.encode_audio(audio_batch) # [B, D]
text_embeds = model.encode_text(text_batch) # [B, D]
audio_embeds = F.normalize(audio_embeds, dim=-1)
text_embeds = F.normalize(text_embeds, dim=-1)
sim = audio_embeds @ text_embeds.T / temperature # [B, B]
labels = torch.arange(len(sim), device=sim.device)
loss = (F.cross_entropy(sim, labels) +
F.cross_entropy(sim.T, labels)) / 2
return loss
Dati di addestramento
Cinque dataset di coppie audio-testo, per un totale di 181.000 campioni:
| Dataset | Campioni | Descrizione |
|---|---|---|
| AudioSetStrong | 108K | Eventi etichettati temporalmente, didascalie generate da GPT (sottoset di AudioSet) |
| FSD50K | 41K | Eventi sonori etichettati da esseri umani, 200 classi |
| Clotho | 19K | Didascalie audio, descrizioni dettagliate |
| UrbanSound8K | 9K | Classificazione dei suoni urbani |
| MACS | 4K | Scene acustiche urbane |
CLAP ha utilizzato l'intero AudioSet (oltre 2 milioni di audio) più altre fonti per un totale di 4,6 milioni di coppie. Noi utilizziamo solo AudioSetStrong (~100.000). Partire da un MLLM pre-addestrato riduce drasticamente i dati necessari.
def load_sample(audio_path, caption):
waveform, sr = torchaudio.load(audio_path)
waveform = torchaudio.transforms.Resample(sr, 16000)(waveform)
audio_inputs = processor.feature_extractor(
waveform, sampling_rate=16000, return_tensors="pt"
)
text_inputs = processor.tokenizer(caption, padding=True, return_tensors="pt")
return audio_inputs, text_inputs
Quattro approcci
Obiettivo: un modello di embedding audio sotto 1,2 miliardi di parametri che superi CLAP.
Finetuning completo del modello. Qwen2.5-Omni-7B su coppie audio-testo: AudioCaps T2A cvR@5 = 63.2, Clotho T2A = 39.2. Questo è il limite superiore, ma 7B non è distribuibile. Tevatron 2.0 ha effettuato il finetuning in modo simile solo su AudioCaps (61.2 ma solo 11.9 su Clotho, mostrando una scarsa generalizzazione dall'addestramento su un singolo dataset). ColQwen-Omni ha effettuato il finetuning su compiti di documenti visivi senza dati audio, ottenendo 37.4 attraverso il trasferimento cross-modale.
Layer pruning. Rimozione dei livelli transformer dal modello 7B. Ogni livello è di circa 0,2 miliardi, quindi un modello a 10 livelli ha un totale di circa 3,5 miliardi.

| Livelli | Parametri | AudioCaps T2A cvR@5 | Clotho T2A cvR@5 |
|---|---|---|---|
| 20 | 5.8B | 63.2 | 39.2 |
| 10 | 3.5B | 58.2 | 36.5 |
| 5 | 2.3B | 56.0 | 36.0 |
La dimensione del batch (32, 64, 128) non ha fatto alcuna differenza significativa. Batch più grandi aiutano inizialmente ma possono degradare in seguito: il batch 128 ha raggiunto 31.3 NDCG a 2.000 step su Clotho ma è sceso a 29.3 a 10.000 step.
Trasferimento di modalità solo testo. Finetuning solo su coppie di testo (MultiNLI, SNLI, FEVER, SciFact), facendo affidamento sull'allineamento cross-modale pre-addestrato. Ha funzionato sul modello completo 7B (AudioCaps 46.1, superando il 42.0 di CLAP) ma è fallito completamente sul modello a 10 livelli potato (cvR@5 = 5.9). I collegamenti cross-modali sono distribuiti su tutta la rete e non sopravvivono al pruning.
Combinazione di moduli. La svolta: prendere un codificatore audio da un modello e un piccolo LLM da un altro, anche tra famiglie di modelli diverse. Qwen2.5-Omni si addestra in tre fasi: (1) codificatori audio/visione con LLM congelato, (2) tutti i parametri sbloccati, (3) contesto a 32K. Combiniamo moduli di diverse fasi:
| Configurazione | Codificatore Audio | LLM | Parametri |
|---|---|---|---|
| M1 | Qwen3-Omni (0.6B, pre-fase-1) | Qwen2.5-0.5B | 1.1B |
| M2 | Qwen3-Omni (0.6B, pre-fase-1) | Qwen2.5-3B | 3.6B |
| M3 | Qwen2.5-Omni-3B (0.8B, post-fase-3) | Qwen2.5-3B | 3.8B |
| M4 | Qwen2.5-Omni-3B (completo) | 3B completo | 3.8B |
Dettaglio di implementazione: Qwen3-Omni utilizza Qwen3OmniMoePreTrainedModel mentre Qwen3 standalone utilizza Qwen3ForCausalLM. Inizializziamo un guscio del modello Omni con dimensioni corrispondenti e copiamo i pesi nelle posizioni corrispondenti.

Valutazione
Valutare gli embedding audio riguarda fondamentalmente la qualità del recupero: data una query testuale, il modello può trovare la clip audio corretta? La sfida principale è che il concetto di "corretto" dipende dal dataset. AudioCaps ha descrizioni concrete ("un uomo che parla seguito dalla chiusura di una porta"), mentre Clotho ha didascalie astratte ("un'atmosfera tranquilla con un rombo lontano"). Un modello che memorizza le caratteristiche audio a livello superficiale andrà bene su AudioCaps ma faticherà su Clotho. Ci interessa soprattutto la generalizzazione tra diversi stili di descrizione.
CV-Recall@5 (cvR@5): per ogni query testuale, verifica se un clip audio corretto appare nei primi 5 risultati. Punteggio binario mediato su tutte le query. Metrica standard nel recupero audio di MTEB.
def evaluate_cvr_at_k(model, dataset, k=5):
audio_embeds = model.encode_audio(dataset.audio_clips)
text_embeds = model.encode_text(dataset.text_queries)
sim = F.normalize(audio_embeds) @ F.normalize(text_embeds).T
hits = 0
for i in range(len(dataset.text_queries)):
top_k = sim[:, i].argsort(descending=True)[:k]
if dataset.ground_truth[i] in top_k:
hits += 1
return hits / len(dataset.text_queries)
Tre dataset di valutazione da MTEB: AudioCaps (derivato da video, didascalie umane), AudioSetStrong (etichettato temporalmente, descrizioni GPT), Clotho (didascalie diverse e astratte). CLAP ha utilizzato l'intero AudioSet (2M+) mentre noi abbiamo usato AudioSetStrong (~100K), il che spiega in parte il vantaggio di CLAP su quel benchmark.

Applicazioni
I vettori di embedding audio stanno diventando rilevanti al di là del recupero tradizionale. Nei sistemi agentici, i vettori di embedding audio consentono l'instradamento dell'intento: un agente che riceve un input vocale può creare un embedding dell'audio e indirizzarlo allo strumento o al sotto-agente corretto in base alla somiglianza semantica, senza attendere la trascrizione completa. La classificazione degli eventi sonori alimenta il monitoraggio in tempo reale in contesti industriali, l'automazione della casa intelligente e i sistemi di sicurezza. Nei flussi di lavoro degli agenti multimodali, i vettori di embedding audio consentono agli agenti di cercare, confrontare e ragionare sui contenuti audio allo stesso modo in cui gestiscono già testo e immagini. Le applicazioni musicali e multimediali li utilizzano per la ricerca per somiglianza, il rilevamento del copyright e la raccomandazione di contenuti. Man mano che le interfacce vocali diventano la modalità di interazione predefinita per gli agenti AI, i vettori di embedding audio compatti che vengono eseguiti sul dispositivo diventano critici per applicazioni a bassa latenza e che preservano la privacy.
Conclusioni
Partire da un MLLM pre-addestrato è la leva principale. Fornisce l'allineamento cross-modale, un forte codificatore di testo e un capace codificatore audio in un unico pacchetto. La combinazione di moduli è la direzione più promettente: mescolare codificatori audio e LLM da diversi modelli e fasi di addestramento apre uno spazio di progettazione appena esplorato. I nostri modelli dominano AudioCaps ma eguagliano CLAP solo su Clotho, le cui descrizioni astratte espongono debolezze che AudioCaps non rileva. Il trasferimento cross-modale non sopravvive alla compressione del modello.
Questo lavoro è un passo verso il modello di embedding omni: un singolo modello che trasforma in vettori di embedding testo, immagini, audio, video e documenti in uno spazio di recupero unificato. L'approccio della combinazione di moduli mostra che è possibile avviare nuove modalità in modo efficiente riutilizzando componenti pre-addestrati. I passi successivi includono architetture MoE con meno di 500M parametri di attivazione, combinando la combinazione di moduli con il trasferimento di modalità e scalando i dati con WavCaps, MusicCaps e dataset vocali.





