Elastic
Jina AI
Modelli
API
keyboard_arrow_down
Lettore
Leggi gli URL e cerca sul web per ottenere LLM più approfonditi.
Incorporamenti
Incorporamenti multimodali multilingue.
Riclassificazione
Strumento di riordinamento per massimizzare la pertinenza dei risultati di ricerca.
Elastic Inference Service
Esegui i modelli Jina in modo nativo all'interno di Elasticsearch.
MCP terminalCLIarticlellms.txtsmart_toyAgentidata_objectSchemamenu_bookDocumenti



Login
login
Selezione del testo tramite ottimizzazione submodulare
Passaggio al Reranking tramite ottimizzazione submodulare
Conclusioni
star
In primo piano
Blog tecnico
luglio 14, 2025

Ottimizzazione submodulare per la selezione di testo, il Reranking di passaggi e l'ingegneria del contesto

Mentre altri si affidano all'ottimizzazione dei Prompt e sperano per il meglio, dovresti imparare l'ottimizzazione submodulare che fornisce un framework basato su principi con garanzie teoriche per una migliore ingegneria del contesto.
Han Xiao • 11 minuti letti
GitHub - jina-ai/submodular-optimization: Submodular optimization for diverse query generation
Submodular optimization for diverse query generation - jina-ai/submodular-optimization
GitHubjina-ai

Tutte le implementazioni della serie sulla submodularità sono disponibili in questo repository Github.

Dopo il mio precedente articolo sull' ottimizzazione submodulare per query fan-out in DeepResearch, ho ricevuto un ottimo feedback che chiedeva un approfondimento sulla submodularità e le sue applicazioni nel information retrieval e nella ricerca agentica. Oggi introdurrò altre due applicazioni dell'ottimizzazione submodulare: la selezione del testo e il riordinamento dei passaggi. Entrambe affrontano la stessa sfida principale: la selezione ottimale del sottoinsieme, che ogni sistema simile a DeepResearch deve risolvere.

I documenti del mondo reale contengono ridondanza semantica: non tutte le frasi hanno la stessa importanza per il ragionamento di un LLM. Immagina di avere un documento lungo e di dover estrarre le informazioni più rappresentative rimanendo entro un limite di token. Questa è la selezione del testo: scegliere contenuti che catturino l'essenza del documento nel rispetto dei vincoli di cardinalità. Vogliamo selezioni che siano ortogonali tra loro, riducendo al minimo le informazioni condivise e massimizzando la copertura totale. Questo si applica a più livelli: selezionare frasi da documenti o token da frasi. Si può anche pensare alla selezione del testo come ottimizzazione o compressione del contesto. Riduciamo il consumo di token dell'LLM preservando al contempo la ricchezza semantica necessaria per il ragionamento.

Un'illustrazione della selezione del testo da un documento riducendo al minimo le informazioni condivise e massimizzando la copertura totale.

Il riordinamento dei passaggi ordina i passaggi candidati in base alla loro rilevanza semantica per una query utente. In Jina AI, abbiamo creato dei Reranker specializzati per questo (jina-reranker-m0, jina-reranker-v2-multilingual-base), anche se i nostri modelli di Embeddings possono anche risolvere il problema. Ma ecco la limitazione: la maggior parte dei Reranker, compresi i nostri, funzionano in modo puntuale. Punteggiano le singole coppie (query, document) in modo indipendente. Non considerano le informazioni condivise tra i passaggi: se il passaggio 1 e il passaggio 7 ottengono entrambi un punteggio elevato ma contengono informazioni per lo più identiche, non sarebbe sufficiente selezionarne solo uno?

Un'illustrazione dell'attività di riordinamento dei passaggi. Mentre la selezione del testo ottimizza per la pura diversità all'interno di un documento, il riordinamento dei passaggi deve bilanciare la diversità rispetto alla rilevanza della query.

In DeepResearch, questo diventa cruciale. Quando gli agenti chiamano strumenti di ricerca e raccolgono frammenti web, dobbiamo determinare quali frammenti meritano prezioso spazio nella finestra di contesto per il passaggio di ragionamento successivo. La selezione segue lo stesso principio "ridurre al minimo la sovrapposizione, massimizzare la copertura" della selezione del testo, ma con un obiettivo aggiuntivo: la rilevanza per la query originale deve avere la priorità.

Molti ricercatori riconoscono la crescente importanza dell'ingegneria del contesto, in cui dobbiamo costruire, ottimizzare e "impacchettare le finestre di contesto nel modo giusto" (da Andrej Karpathy) per costruire flussi di lavoro agentici più efficaci. Tuttavia, molti semplicemente usano i Prompt dell'LLM per risolvere questi problemi "in modo soft", senza garanzie, senza fondamento teorico, con un'efficacia discutibile. Possiamo fare molto meglio.

In questo articolo, mostrerò che sia la selezione del testo che il riordinamento dei passaggi cedono all'ottimizzazione submodulare, che fornisce soluzioni rigorose. Se non hai familiarità con le funzioni submodulari, pensa ai "rendimenti decrescenti". Iniziamo con un insieme vuoto e aggiungiamo in modo incrementale testo o passaggi selezionati. Ogni aggiunta fornisce valore, ma il beneficio marginale diminuisce, catturando l'intuizione che le selezioni diverse e non ridondanti sono più preziose. Formalmente, una funzione fff è submodulare se per qualsiasi insieme A⊆BA \subseteq BA⊆B e elemento i∉Bi \notin Bi∈/B:

f(A∪i)−f(A)≥f(B∪i)−f(B)f(A \cup {i}) - f(A) \geq f(B \cup {i}) - f(B)f(A∪i)−f(A)≥f(B∪i)−f(B)

Questa formulazione cattura perfettamente la nostra intuizione: vogliamo che gli elementi selezionati coprano collettivamente lo spazio semantico dell'intero documento; man mano che selezioniamo più unità, è meno probabile che ogni nuova unità copra lo spazio semantico precedentemente scoperto.

tagSelezione del testo tramite ottimizzazione submodulare

0:00
/1:04

Utilizzato per la prima volta jina-embeddings-v4la funzionalità multi-vettore per estrarre gli Embeddings a livello di token da un passaggio, quindi l'ottimizzazione submodulare applicata per selezionare i token che forniscono la migliore copertura, infine chiamare il tokenizer e convertire le selezioni in stringhe nelle loro posizioni org. Pensalo come una forma di "compressione": puoi regolare il cursore top-k per impostare diverse "velocità di compressione". Riesci ancora a capire il testo compresso?

Google Colab

Implementazione della selezione del testo con ottimizzazione submodulare.

Iniziamo risolvendo il problema della selezione del testo, poiché è essenziale per comprendere la submodularità e funge da passo preliminare per il passaggio al reranking. Il problema è il seguente:

Dato un documento DDD con nnn elementi (token o frasi), vogliamo selezionare un sottoinsieme S⊆1,2,…,nS \subseteq {1, 2, \ldots, n}S⊆1,2,…,n con ∣S∣=k|S| = k∣S∣=k che massimizza la funzione di copertura:

f(S)=∑i=1nmax⁡j∈Ssimijf(S) = \sum_{i=1}^{n} \max_{j \in S} \text{sim}_{ij}f(S)=i=1∑n​j∈Smax​simij​

dove simij\text{sim}_{ij}simij​ rappresenta la similarità coseno tra gli 向量模型 dell'elemento iii e jjj. Si noti che la funzione di copertura fff è submodulare perché soddisfa la proprietà dei rendimenti decrescenti. L'operazione max assicura che stiamo misurando quanto bene ciascun elemento è rappresentato dall'unità selezionata più vicina, evitando di contare due volte le informazioni ridondanti.

tagOttieni 向量模型 a livello di token/passaggio

Per la selezione a livello di token, sfruttiamo la nuova funzionalità di 向量模型 multi-vettore di jina-embeddings-v4. Impostando return_multivector=True viene restituito un 向量模型 per token, consentendo la nostra selezione a livello di sottoparola.

Per la selezione a livello di passaggio, dividiamo semplicemente i documenti per punteggiatura o nuove righe e incorporiamo ogni passaggio in modo indipendente. In alternativa, si può anche chiamare la nostra API con late chunking per ottenere 向量模型 di passaggio contestuali, il che generalmente porta a prestazioni migliori nelle attività a valle.

Late Chunking nei modelli di 向量模型 a contesto lungo
La suddivisione in chunk di documenti lunghi preservando le informazioni contestuali è impegnativa. Introduciamo il "Late Chunking" che sfrutta i modelli di 向量模型 a contesto lungo per generare 向量模型 di chunk contestuali per migliori applicazioni di recupero.
Jina AIMichael Günther, Han Xiao

Vale la pena notare che, poiché stiamo misurando la similarità semantica all'interno di un insieme omogeneo di elementi, tutti con lo stesso ruolo funzionale piuttosto che confrontare elementi eterogenei come query rispetto a documenti (come vedremo nel passaggio al reranking), invochiamo jina-embeddings-v4 con l'adattatore LoRA text-matching abilitato.

Jina 向量模型 v4: 向量模型 universali per il recupero multimodale multilingue
Jina 向量模型 v4 è un modello di 向量模型 universale da 3,8 miliardi di parametri per il recupero multimodale e multilingue che supporta sia output di 向量模型 singolo che multi-vettore.
Jina AIJina AI

Da jina-embeddings-v3, i nostri modelli di 向量模型 sono stati dotati di LoRA ottimizzato per le attività. Leggi di più sui LoRA disponibili nei nostri 向量模型 v4.

tagAlgoritmo greedy pigro

Come nell'articolo precedente, utilizziamo l'algoritmo greedy pigro per risolvere il problema di ottimizzazione. Per le funzioni submodulari monotone, questo algoritmo raggiunge una garanzia di approssimazione (1−1/e)≈0.632(1 - 1/e) \approx 0.632(1−1/e)≈0.632, un limite che è dimostrabilmente stretto. L'ottimizzazione greedy pigra sfrutta due proprietà fondamentali delle funzioni submodulari: i rendimenti decrescenti e la conservazione dell'ordinamento relativo tra i guadagni marginali tra le iterazioni. L'algoritmo funziona come segue:

  1. Inizializzazione: calcola i guadagni marginali iniziali per tutti gli elementi e memorizzali in una coda di priorità
  2. Valutazione pigra: a ogni iterazione, estrai l'elemento con il guadagno memorizzato nella cache più alto
  3. Validazione: se il guadagno di questo elemento è stato calcolato nell'iterazione corrente, selezionalo immediatamente
  4. Ricalcolo: altrimenti, ricalcola il suo guadagno marginale corrente e reinseriscilo nella coda

Questo algoritmo greedy pigro riduce notevolmente il sovraccarico computazionale, soprattutto quando i guadagni marginali mostrano una notevole varianza tra gli elementi.

tagPassaggio al Reranking tramite ottimizzazione submodulare

Google Colab

L'attività di passaggio al reranking estende la selezione del testo aggiungendo un nuovo obiettivo: il sottoinsieme selezionato deve essere rilevante per la query specificata. Mentre la selezione del testo ottimizza la pura diversità all'interno di un documento, il passaggio al reranking deve bilanciare la diversità rispetto alla rilevanza della query. Ecco le notazioni chiave:

  • S⊆{1,2,…,P}S \subseteq \{1, 2, \ldots, P\}S⊆{1,2,…,P} è il sottoinsieme selezionato di indici di passaggio dal set di candidati di PPP passaggi, tutti i contenuti o i ricordi nel sistema DeepResearch in un dato passaggio. SSS rappresenta il sottoinsieme selezionato che vogliamo trasferire al passaggio di ragionamento successivo. Abbiamo QQQ query e PPP passaggi candidati. Nella ricerca tradizionale, ∣Q∣=1|Q|=1∣Q∣=1, ma in DeepResearch, dove le query vengono frequentemente riformulate e generate, potremmo avere più query a portata di mano.
  • sijs_{ij}sij​ è la similarità tra i passaggi iii e jjj. Questo utilizza la similarità coseno di jina-embeddings-v4 con task="text-matching" LoRA abilitato per tutti i passaggi come abbiamo fatto nell'attività di selezione del testo.
  • rqir_{qi}rqi​ è il punteggio di rilevanza tra la query qqq e il passaggio iii. Questo viene calcolato come similarità coseno usando jina-embeddings-v4 con task="retrieval", prompt_name="query" per le query e task="retrieval", prompt_name="passage" per i passaggi, abilitando il LoRA di recupero asimmetrico e producendo 向量模型 eterogenei.

Ora possiamo formularlo usando due diverse funzioni submodulari, ciascuna delle quali cattura un distinto compromesso tra rilevanza e diversità.

tagFormulazione della posizione della struttura

Ogni passaggio viene "coperto" dal suo passaggio selezionato più simile, ponderato in base a quanto è rilevante quel passaggio selezionato per ciascuna query. Questa formulazione seleziona i passaggi che sono sia rilevanti per la query SIA rappresentativi di molti altri passaggi.

fFL(S)=∑q=1Q∑i=1Pmax⁡j∈Srqj⋅sijf_{FL}(S) = \sum_{q=1}^{Q} \sum_{i=1}^{P} \max_{j \in S} r_{qj} \cdot s_{ij}fFL​(S)=q=1∑Q​i=1∑P​j∈Smax​rqj​⋅sij​

L'interazione moltiplicativa tra la rilevanza della query (rqjr_{qj}rqj​) e la similarità del passaggio (sijs_{ij}sij​) crea "hub", passaggi che svolgono un duplice scopo sia come risposte rilevanti sia come rappresentanti diversi. Un passaggio altamente rilevante può coprire molti passaggi simili, mentre un passaggio meno rilevante fornisce copertura solo se non esiste un rappresentante migliore.

tagFormulazione della copertura satura

Per ogni passaggio, ricevi un credito pari al minimo tra la sua rilevanza per la query o quanto è ben coperto dal tuo miglior rappresentante selezionato. Ciò incoraggia a selezionare i passaggi che possono "saturare" la rilevanza di molti altri passaggi.

fSC(S)=∑q=1Q∑i=1Pmin⁡(rqi,max⁡j∈Ssij)f_{SC}(S) = \sum_{q=1}^{Q} \sum_{i=1}^{P} \min(r_{qi}, \max_{j \in S} s_{ij})fSC​(S)=q=1∑Q​i=1∑P​min(rqi​,j∈Smax​sij​)

L'operazione min crea un limite massimo di rilevanza: non puoi ottenere più credito di copertura della rilevanza intrinseca di un passaggio per la query. Questa formulazione è più conservativa, prevenendo la sovra-selezione di passaggi diversi ma irrilevanti.

Entrambe le funzioni sono monotone e submodulari, consentendo lo stesso algoritmo greedy pigro con garanzie di approssimazione (1−1/e)(1-1/e)(1−1/e).

tagRisultati degli esperimenti

Nella nostra implementazione, utilizziamo Jina Reader per recuperare il testo semplice dai nostri precedenti post del blog e valutare diverse query utilizzando il passaggio al reranking. Consiglio vivamente ai lettori di sperimentare con il nostro notebook Google Colab utilizzando i propri articoli: i contenuti con cui hanno più familiarità forniranno le informazioni più significative.

Nei nostri esperimenti, selezioniamo i primi 10 passaggi di ciascun documento. Si noti che tutti e tre gli algoritmi, solo la rilevanza della query, la posizione della struttura e la copertura satura, mostrano la monotonicità: la selezione di un kkk più grande non modifica la classifica dei primi k−1k-1k−1 elementi. Ad esempio, quando si confrontano k=9k=9k=9, k=10k=10k=10 o k=11k=11k=11, i primi 9 passaggi rimangono identici in tutti i valori. I risultati sono mostrati di seguito.

Ecco alcune osservazioni chiave. Innanzitutto, gli algoritmi di ottimizzazione submodulare seguono vagamente i punteggi di rilevanza della query, ma introducono riordinamenti strategici: i passaggi "si spostano su e giù" nelle classifiche. Questo comportamento è in linea con le nostre aspettative, poiché questi algoritmi ottimizzano per la minimizzazione della ridondanza piuttosto che per la pura rilevanza. Le classifiche risultanti dimostrano una forte qualità.

Alcuni lettori potrebbero notare che nel primo, secondo e quarto esempio, i risultati dell'ottimizzazione submodulare sembrano "saturarsi" precocemente, producendo semplicemente passaggi ordinati 0, 1, 2, ecc. Questo non è un fallimento algoritmico, ma rivela una delle caratteristiche più preziose dell'ottimizzazione submodulare che nessun **reranker** esistente è in grado di promettere.

Per comprendere meglio questo comportamento di saturazione, tracciamo i valori della funzione submodulare per tutte le possibili dimensioni dell'insieme kkk da 1 al numero massimo di passaggi nel documento. Ciò rivela la proprietà dei rendimenti decrescenti in azione.

Document=https://jina.ai/news/submodular-optimization-for-diverse-query-generation-in-deepresearch Query="what is diminishing return". The red dashed lines mark the practical saturation points. Beyond these points, the marginal gains become negligible.
Document=https://jina.ai/news/jina-embeddings-v4-universal-embeddings-for-multimodal-multilingual-retrieval Query="how many lora adapters v4 has". The red dashed lines mark the practical saturation points. Beyond these points, the marginal gains become negligible.

I grafici sopra mostrano come le funzioni Facility Location e Saturated Coverage si comportano man mano che aumentiamo la dimensione della selezione. Entrambe mostrano il classico modello submodulare:

  • Crescita iniziale rapida: i guadagni più consistenti si verificano nelle prime selezioni
  • Rendimenti decrescenti: ogni passaggio aggiuntivo fornisce un beneficio marginale progressivamente inferiore
  • Altopiano di saturazione: i valori della funzione si appiattiscono, indicando un beneficio minimo da ulteriori aggiunte

Oltre questi punti, i guadagni marginali diventano trascurabili. Questo spiega perché i nostri precedenti esperimenti di classificazione hanno mostrato un ordinamento sequenziale (0, 1, 2, ...) - gli algoritmi hanno correttamente identificato che i passaggi aggiuntivi contribuiscono con un valore minimo.

Questo comportamento manifesta direttamente la proprietà matematica della submodularità. I rendimenti marginali decrescenti che osserviamo non sono artefatti algoritmici, ma caratteristiche fondamentali delle funzioni di copertura. Quando il valore della funzione si stabilizza, abbiamo raggiunto il punto in cui:

Δi(S)=f(S∪{i})−f(S)≈0\Delta_i(S) = f(S \cup \{i\}) - f(S) \approx 0Δi​(S)=f(S∪{i})−f(S)≈0

per tutti i passaggi rimanenti i∉Si \notin Si∈/S.

tagConclusioni

L'ingegneria del contesto è emersa come una parola d'ordine nell'IA, è spesso acclamata come un cambiamento di paradigma verso la costruzione di sistemi agentici che curano le informazioni più rilevanti per riempire la finestra di contesto di un **LLM**, e questo spesso inizia con il recupero di dati esterni tramite RAG.

La selezione del testo e il **reranking** dei passaggi sono componenti integrali dell'ingegneria del contesto, in particolare nei processi di selezione della base di conoscenza, recupero e compressione del contesto. Il **reranking** dei passaggi quindi perfeziona questo riordinando i testi selezionati in base alla rilevanza della query per garantire che l'**LLM** riceva prima le informazioni più utili, evitando sovraccarichi e migliorando la qualità dell'output.

L'ottimizzazione submodulare offre tre vantaggi interessanti rispetto agli approcci tradizionali per la selezione del testo e il **reranking** dei passaggi:

tagRigore teorico con efficienza computazionale

A differenza dei metodi euristici, l'ottimizzazione submodulare fornisce garanzie dimostrabili. L'algoritmo greedy pigro viene eseguito in tempo O(nklog⁡n)O(nk \log n)O(nklogn)—rispetto alle combinazioni (nk)\binom{n}{k}(kn​) per la ricerca esaustiva—ottenendo al contempo un'approssimazione (1−1/e)≈0.632(1-1/e) \approx 0.632(1−1/e)≈0.632 alla soluzione ottimale. Ciò significa che la nostra soluzione è matematicamente garantita per essere almeno il 63% valida quanto la migliore selezione teoricamente possibile. Nessuna euristica basata su **prompt** può promettere questo livello di garanzia delle prestazioni.

tagCriteri di arresto intelligenti

Il comportamento di saturazione che abbiamo osservato fornisce un meccanismo di arresto automatico: quando i guadagni marginali si avvicinano allo zero, sappiamo di dover smettere di aggiungere elementi. Questa capacità è irraggiungibile con i **reranker** pointwise o listwise esistenti, che operano in modo indipendente su ciascun elemento senza comprendere i rendimenti decrescenti a livello di insieme. La funzione stessa ci dice quando abbiamo acquisito una copertura sufficiente.

tagEstensione multi-query

Il framework si estende naturalmente a scenari multi-query, comuni in DeepResearch dove le query vengono frequentemente riscritte e riformulate. Le stesse basi teoriche e gli algoritmi greedy pigri si applicano perfettamente. Gli approcci basati su **prompt** mancano di questa estensibilità sistematica, spesso richiedendo soluzioni ad hoc per ogni nuovo scenario.

Questi vantaggi derivano dalle basi matematiche della submodularità piuttosto che da trucchi ingegneristici. Mentre altri si affidano alla messa a punto del **prompt** e sperano in buoni risultati, dovresti imparare l'ottimizzazione submodulare che fornisce un framework basato su principi con garanzie formali: un vantaggio cruciale quando si costruisce un'ingegneria del contesto affidabile e scalabile.

Categorie:
star
In primo piano
Blog tecnico
rss_feed

Per saperne di più
marzo 11, 2026 • 7 minuti letti
Bootstrapping di embedding audio da LLM multimodali
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
Identificare i modelli di embedding a partire da valori numerici grezzi
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
settembre 09, 2025 • 11 minuti letti
Modelli di Embedding Multimodali in Llama.cpp e 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
Lettore
Incorporamenti
Riclassificazione
Ottieni la chiave API Jina
Limite di velocità
Chi siamo
Notizia
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.