Notizia
Modelli
Prodotti
keyboard_arrow_down
Lettore
Leggi gli URL e cerca sul web per ottenere LLM più approfonditi.
Incorporamenti
Incorporamenti multilingue multimodali di livello mondiale.
Riclassificazione
Recupero neurale di livello mondiale per massimizzare la pertinenza della ricerca.
Ricerca profonda
Cerca, leggi e ragiona finché non trovi la risposta migliore.
Di più
keyboard_arrow_down
Classificatore
Classificazione zero-shot e few-shot per immagini e testo.
Segmentatore
Tagliare il testo lungo in blocchi ed effettuare la tokenizzazione.

Documentazione API
Generazione automatica di codice per il tuo IDE o LLM di Copilot
open_in_new


Azienda
keyboard_arrow_down
Chi siamo
Contatta le vendite
Programma di stagista
Unisciti a noi
open_in_new
Scarica il logo
open_in_new
Termini & Condizioni


Login
login
Il Contesto Lungo è Davvero Utile?
Problemi con gli Embedding a Contesto Lungo
Contesto Lungo vs. Troncamento
Segmentazione del testo per migliori prestazioni di recupero
Il Late Chunking Risolve il Problema del Contesto
Fare Chunking o No?
Conclusioni: Quando Usare Cosa?
Conclusione
Blog tecnico
dicembre 04, 2024

C'è Ancora Bisogno del Chunking Quando i Modelli Long-Context Possono Fare Tutto?

Confronto delle prestazioni dei modelli di embedding a contesto lungo con diverse strategie di suddivisione per trovare l'approccio ottimale per le tue esigenze.
Alex C-G
Michael Günther
Alex C-G, Michael Günther • 13 minuti letti

Nell'ottobre 2023, abbiamo introdotto jina-embeddings-v2, la prima famiglia di modelli di embedding open-source in grado di gestire input fino a 8.192 token. Basandoci su questo, quest'anno abbiamo lanciato jina-embeddings-v3, offrendo lo stesso ampio supporto per gli input con ulteriori miglioramenti.

Jina Embeddings v3: A Frontier Multilingual Embedding Model
jina-embeddings-v3 is a frontier multilingual text embedding model with 570M parameters and 8192 token-length, outperforming the latest proprietary embeddings from OpenAI and Cohere on MTEB.
Jina AI

In questo articolo approfondiremo gli embedding con contesto lungo e risponderemo ad alcune domande: Quando è pratico consolidare un volume così grande di testo in un singolo vettore? La segmentazione migliora il recupero e, in caso affermativo, come? Come possiamo preservare il contesto da diverse parti di un documento mentre segmentiamo il testo?

Per rispondere a queste domande, confronteremo diversi metodi per generare gli embedding:

  • Embedding con contesto lungo (codifica fino a 8.192 token in un documento) vs contesto breve (cioè troncamento a 192 token).
  • Nessun chunking vs. chunking naive vs. late chunking.
  • Diverse dimensioni dei chunk sia con chunking naive che con late chunking.

tagIl Contesto Lungo è Davvero Utile?

Con la capacità di codificare fino a dieci pagine di testo in un singolo embedding, i modelli di embedding con contesto lungo aprono possibilità per la rappresentazione di testi su larga scala. Ma è davvero utile? Secondo molte persone... no.

Fonti: Citazione di Nils Reimer nel podcast How AI Is Built, tweet di brainlag, commento di egorfine su Hacker News, commento di andy99 su Hacker News

Affronteremo tutte queste preoccupazioni con un'indagine dettagliata sulle capacità del contesto lungo, quando il contesto lungo è utile e quando dovresti (e non dovresti) usarlo. Ma prima, ascoltiamo questi scettici e guardiamo alcuni dei problemi che i modelli di embedding con contesto lungo devono affrontare.

tagProblemi con gli Embedding a Contesto Lungo

Immaginiamo di costruire un sistema di ricerca documenti per articoli, come quelli del nostro blog Jina AI. A volte un singolo articolo può coprire più argomenti, come il report sulla nostra visita alla conferenza ICML 2024, che contiene:

  • Un'introduzione, che cattura informazioni generali su ICML (numero di partecipanti, luogo, scopo, ecc).
  • La presentazione del nostro lavoro (jina-clip-v1).
  • Riassunti di altri interessanti paper di ricerca presentati all'ICML.

Se creiamo un solo embedding per questo articolo, quell'embedding rappresenta una miscela di tre argomenti disparati:

Figura 1: Quando si fa l'embedding di un documento che copre più argomenti, il vettore risultante rappresenta una miscela di tutti i paragrafi, potenzialmente perdendo le informazioni distinte e specifiche contenute in ogni singolo paragrafo.

Questo porta a diversi problemi:

  • Diluizione della Rappresentazione: Mentre tutti gli argomenti in un dato testo potrebbero essere correlati, solo uno potrebbe essere rilevante per la query di ricerca dell'utente. Tuttavia, un singolo embedding (in questo caso, quello dell'intero post del blog) è solo un punto nello spazio vettoriale. Man mano che più testo viene aggiunto all'input del modello, l'embedding si sposta per catturare l'argomento generale dell'articolo, rendendolo meno efficace nel rappresentare il contenuto trattato in specifici paragrafi.
  • Capacità Limitata: I modelli di embedding producono vettori di dimensione fissa, indipendentemente dalla lunghezza dell'input. Man mano che viene aggiunto più contenuto all'input, diventa più difficile per il modello rappresentare tutte queste informazioni nel vettore. Pensalo come scalare un'immagine a 16×16 pixel — Se ridimensioni l'immagine di qualcosa di semplice, come una mela, puoi ancora ricavare significato dall'immagine scalata. Scalare una mappa stradale di Berlino? Non proprio.
  • Perdita di Informazioni: In alcuni casi, anche i modelli di embedding con contesto lungo raggiungono i loro limiti; Molti modelli supportano la codifica del testo fino a 8.192 token. I documenti più lunghi devono essere troncati prima dell'embedding, portando a una perdita di informazioni. Se l'informazione rilevante per l'utente si trova alla fine del documento, non verrà catturata affatto dall'embedding.
  • Potresti Aver Bisogno della Segmentazione del Testo: Alcune applicazioni richiedono embedding per segmenti specifici del testo ma non per l'intero documento, come identificare il passaggio rilevante in un testo.

tagContesto Lungo vs. Troncamento

Per vedere se il contesto lungo è effettivamente utile, diamo un'occhiata alle prestazioni di due scenari di recupero:

  • Codifica di documenti fino a 8.192 token (circa 10 pagine di testo).
  • Troncamento dei documenti a 192 token e codifica fino a quel punto.

Confronteremo i risultati utilizzandojina-embeddings-v3 con la metrica di recupero nDCG@10. Abbiamo testato i seguenti dataset:

Dataset Descrizione Esempio di Query Esempio di Documento Lunghezza Media Documento (caratteri)
NFCorpus Un dataset di recupero di testi medici completi con 3.244 query e documenti principalmente da PubMed. "Using Diet to Treat Asthma and Eczema" "Statin Use and Breast Cancer Survival: A Nationwide Cohort Study from Finland Recent studies have suggested that [...]" 326.753
QMSum Un dataset di riepilogo di riunioni basato su query che richiede il riepilogo di segmenti rilevanti delle riunioni. "The professor was the one to raise the issue and suggested that a knowledge engineering trick [...]" "Project Manager: Is that alright now ? {vocalsound} Okay . Sorry ? Okay , everybody all set to start the meeting ? [...]" 37.445
NarrativeQA Dataset QA con lunghe storie e relative domande su contenuti specifici. "What kind of business Sophia owned in Paris?" "The Project Gutenberg EBook of The Old Wives' Tale, by Arnold Bennett\n\nThis eBook is for the use of anyone anywhere [...]" 53.336
2WikiMultihopQA Un dataset QA multi-hop con fino a 5 passaggi di ragionamento, progettato con template per evitare scorciatoie. "What is the award that the composer of song The Seeker (The Who Song) earned?" "Passage 1:\nMargaret, Countess of Brienne\nMarguerite d'Enghien (born 1365 - d. after 1394), was the ruling suo jure [...]" 30.854
SummScreenFD Un dataset di riassunti di sceneggiature con trascrizioni di serie TV e riassunti che richiedono l'integrazione di trame disperse. "Penny gets a new chair, which Sheldon enjoys until he finds out that she picked it up from [...]" "[EXT. LAS VEGAS CITY (STOCK) - NIGHT]\n[EXT. ABERNATHY RESIDENCE - DRIVEWAY -- NIGHT]\n(The lamp post light over the [...]" 1.613

Come possiamo vedere, codificare più di 192 token può portare a notevoli miglioramenti delle prestazioni:

Figura 2: Confronto tra le prestazioni dell'embedding con contesto lungo e dell'embedding di testo breve

Tuttavia, su alcuni dataset vediamo miglioramenti maggiori rispetto ad altri:

  • Per NFCorpus, il troncamento fa a malapena differenza. Questo perché i titoli e gli abstract sono proprio all'inizio dei documenti, e questi sono altamente rilevanti per le tipiche ricerche degli utenti. Che sia troncato o meno, i dati più pertinenti rimangono entro il limite di token.
  • QMSum e NarrativeQA sono considerati compiti di "comprensione della lettura", dove gli utenti tipicamente cercano fatti specifici all'interno di un testo. Questi fatti sono spesso incorporati in dettagli sparsi in tutto il documento e possono cadere al di fuori del limite troncato di 192 token. Ad esempio, nel documento NarrativeQA Percival Keene, la risposta alla domanda "Chi è il bullo che ruba il pranzo di Percival?" si trova ben oltre questo limite. Similmente, in 2WikiMultiHopQA, le informazioni rilevanti sono disperse in tutto il documento, richiedendo ai modelli di navigare e sintetizzare conoscenze da più sezioni per rispondere efficacemente alle query.
  • SummScreenFD è un compito mirato a identificare la sceneggiatura corrispondente a un dato riassunto. Poiché il riassunto comprende informazioni distribuite in tutta la sceneggiatura, codificare più testo migliora l'accuratezza nel far corrispondere il riassunto alla sceneggiatura corretta.

tagSegmentazione del testo per migliori prestazioni di recupero

💡
Andando avanti, discutiamo tre concetti simili. Per evitare confusione, li riferiamo come segue:
• Segmentazione: Rilevamento di segnali di confine in un testo di input, per esempio, frasi o un numero fisso di token.
• Chunking ingenuo: Suddivisione del testo in chunks basata sui segnali di segmentazione, prima di codificarlo.
• Late chunking: Codifica del documento prima e poi segmentazione (preservando il contesto tra i chunks).

Invece di incorporare un intero documento in un unico vettore, possiamo utilizzare vari metodi per prima segmentare il documento assegnando segnali di confine:

Figura 3: Applicazione dei metodi di chunking "a dimensione fissa", "basato su frasi" e "semantico" a un passaggio di testo

Alcuni metodi comuni includono:

  • Segmentazione per dimensione fissa: Il documento viene diviso in segmenti di un numero fisso di token, determinato dal tokenizer del modello di embedding. Questo assicura che la tokenizzazione dei segmenti corrisponda alla tokenizzazione dell'intero documento (segmentare per un numero specifico di caratteri potrebbe portare a una tokenizzazione diversa).
  • Segmentazione per frase: Il documento viene segmentato in frasi, e ogni chunk consiste in n numero di frasi.
  • Segmentazione per semantica: Ogni segmento corrisponde a più frasi e un modello di embedding determina la similarità delle frasi consecutive. Le frasi con alte similarità di embedding vengono assegnate allo stesso chunk.
💡
Puoi facilmente eseguire la segmentazione con Jina Segmenter, la nostra API gratuita per segmentare testi lunghi in chunks e tokenizzazione basata sulla struttura del documento.

Per semplicità, in questo articolo utilizziamo la segmentazione a dimensione fissa.

tagRecupero di documenti utilizzando il chunking ingenuo

Una volta eseguita la segmentazione a dimensione fissa, possiamo ingenuamente suddividere il documento secondo quei segmenti:

Figura 4: Chunking ingenuo basato sui segnali di confine rilevati durante la segmentazione.

Usando jina-embeddings-v3, codifichiamo ogni chunk in un embedding che cattura accuratamente la sua semantica, poi memorizziamo questi embedding in un database vettoriale.

Durante l'esecuzione, il modello codifica la query dell'utente in un vettore di query. Lo confrontiamo con il nostro database vettoriale di embedding dei chunk per trovare il chunk con la più alta similarità del coseno, e poi restituiamo il documento corrispondente all'utente:

Figura 5: Recupero dei documenti implementato con chunking ingenuo: (1) I documenti nella collezione vengono divisi in chunk basati su segnali di confine, (2) il modello di embedding codifica tutti i chunk e memorizza gli embedding risultanti in un database, (3) quando arriva una query, il modello di embedding la codifica e il database determina il chunk più simile. Alla fine identifichiamo il documento rilevante dall'ID del documento memorizzato per il chunk nel database e lo restituiamo all'utente.

tagProblemi con il Chunking Ingenuo

Figura 6: Quando si suddivide un testo in frasi, i riferimenti a parti precedenti del testo non possono essere risolti.

Mentre il chunking ingenuo affronta alcune delle limitazioni dei modelli di embedding a lungo contesto, presenta anche degli svantaggi:

  • Perdita del Quadro Generale: Per quanto riguarda il recupero dei documenti, più embedding di chunk più piccoli potrebbero non riuscire a catturare l'argomento generale del documento. È come non riuscire a vedere la foresta a causa degli alberi.
  • Problema del Contesto Mancante: I chunk non possono essere interpretati accuratamente poiché mancano le informazioni contestuali, come illustrato nella Figura 6.
  • Efficienza: Più chunk richiedono più spazio di archiviazione e aumentano il tempo di recupero.

tagIl Late Chunking Risolve il Problema del Contesto

💡
Per risolvere il problema del contesto mancante, abbiamo introdotto un nuovo metodo chiamato "late chunking", descritto nei nostri precedenti post sul blog: parte I, parte II, parte III, paper di ricerca.

Il late chunking funziona in due passaggi principali:

  1. Prima, utilizza le capacità di lungo contesto del modello per codificare l'intero documento in embedding di token. Questo preserva il contesto completo del documento.
  2. Poi, crea gli embedding dei chunk applicando il mean pooling a specifiche sequenze di embedding di token, corrispondenti ai segnali di confine identificati durante la segmentazione.
Figura 7: Late chunking vs chunking ingenuo.

Il vantaggio principale di questo approccio è che gli embedding dei token sono contestualizzati - significa che catturano naturalmente riferimenti e relazioni con altre parti del documento. Poiché il processo di embedding avviene prima del chunking, ogni chunk mantiene la consapevolezza del contesto più ampio del documento, risolvendo il problema del contesto mancante che affligge gli approcci di chunking ingenuo.

Per documenti che superano la dimensione massima di input del modello, possiamo utilizzare il "long late chunking":

  1. Prima, dividiamo il documento in "macro-chunk" sovrapposti. Ogni macro-chunk è dimensionato per rientrare nella lunghezza massima del contesto del modello (per esempio, 8.192 token).
  2. Il modello elabora questi macro-chunk per creare gli embedding dei token.
  3. Una volta ottenuti gli embedding dei token, procediamo con il late chunking standard - applicando il mean pooling per creare gli embedding finali dei chunk.

Questo approccio ci permette di gestire documenti di qualsiasi lunghezza mantenendo i benefici del late chunking. Pensalo come un processo in due fasi: prima rendere il documento digeribile per il modello, poi applicare la procedura normale di late chunking.

In breve:

  • Chunking ingenuo: Segmentare il documento in piccoli chunk, poi codificare ogni chunk separatamente.
  • Late chunking: Codificare l'intero documento in una volta per creare gli embedding dei token, poi creare gli embedding dei chunk raggruppando gli embedding dei token basati sui confini dei segmenti.
  • Long late chunking: Dividere documenti grandi in macro-chunk sovrapposti che si adattano alla finestra di contesto del modello, codificarli per ottenere gli embedding dei token, poi applicare il late chunking normalmente.

Per una descrizione più estesa dell'idea, dai un'occhiata al nostro paper o ai post del blog menzionati sopra.

Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models
Many use cases require retrieving smaller portions of text, and dense vector-based retrieval systems often perform better with shorter text segments, as the semantics are less likely to be over-compressed in the embeddings. Consequently, practitioners often split text documents into smaller chunks and encode them separately. However, chunk embeddings created in this way can lose contextual information from surrounding chunks, resulting in sub-optimal representations. In this paper, we introduce a novel method called late chunking, which leverages long context embedding models to first embed all tokens of the long text, with chunking applied after the transformer model and just before mean pooling - hence the term late in its naming. The resulting chunk embeddings capture the full contextual information, leading to superior results across various retrieval tasks. The method is generic enough to be applied to a wide range of long-context embedding models and works without additional training. To further increase the effectiveness of late chunking, we propose a dedicated fine-tuning approach for embedding models.
arXiv.orgMichael Günther

tagFare Chunking o No?

Abbiamo già visto che l'embedding a lungo contesto generalmente supera gli embedding di testi più brevi, e abbiamo dato una panoramica delle strategie di chunking sia ingenuo che tardivo. La domanda ora è: Il chunking è migliore dell'embedding a lungo contesto?

Per condurre un confronto equo, tronchiamo i valori di testo alla lunghezza massima della sequenza del modello (8.192 token) prima di iniziare a segmentarli. Usiamo una segmentazione a dimensione fissa con 64 token per segmento (sia per la segmentazione ingenua che per il late chunking). Confrontiamo tre scenari:

  • Nessuna segmentazione: Codifichiamo ogni testo in un singolo embedding. Questo porta agli stessi punteggi dell'esperimento precedente (vedi Figura 2), ma li includiamo qui per un migliore confronto.
  • Chunking ingenuo: Segmentiamo i testi, poi applichiamo il chunking ingenuo basato sui segnali di confine.
  • Late chunking: Segmentiamo i testi, poi usiamo il late chunking per determinare gli embedding.

Sia per il late chunking che per la segmentazione ingenua, utilizziamo il recupero dei chunk per determinare il documento rilevante (come mostrato nella Figura 5, precedentemente in questo post).

I risultati non mostrano un chiaro vincitore:

Figura 8: Nessun chunking vs chunking ingenuo vs late chunking
  • Per il recupero dei fatti, il chunking ingenuo funziona meglio: Per i dataset QMSum, NarrativeQA e 2WikiMultiHopQA, il modello deve identificare i passaggi rilevanti nel documento. Qui, il chunking ingenuo è chiaramente migliore rispetto alla codifica di tutto in un singolo embedding, poiché probabilmente solo pochi chunk includono informazioni rilevanti, e tali chunk le catturano molto meglio di un singolo embedding dell'intero documento.
  • Il chunking tardivo funziona meglio con documenti coerenti e contesto rilevante: Per documenti che trattano un argomento coerente dove gli utenti cercano temi generali piuttosto che fatti specifici (come in NFCorpus), il chunking tardivo ha prestazioni leggermente migliori rispetto al non chunking, poiché bilancia il contesto dell'intero documento con i dettagli locali. Tuttavia, mentre il chunking tardivo generalmente si comporta meglio del chunking ingenuo preservando il contesto, questo vantaggio può diventare uno svantaggio quando si cercano fatti isolati all'interno di documenti contenenti per lo più informazioni irrilevanti - come si vede nelle regressioni delle prestazioni per NarrativeQA e 2WikiMultiHopQA, dove il contesto aggiunto diventa più distraente che utile.

tagLa Dimensione dei Chunk Fa la Differenza?

L'efficacia dei metodi di chunking dipende davvero dal dataset, evidenziando come la struttura del contenuto giochi un ruolo cruciale:

Figura 9: Confronto delle dimensioni dei chunk con chunking ingenuo e tardivo.

Come possiamo vedere, il chunking tardivo generalmente supera il chunking ingenuo con chunk di dimensioni minori, poiché i chunk ingenui più piccoli sono troppo ridotti per contenere molto contesto, mentre i chunk tardivi più piccoli mantengono il contesto dell'intero documento, rendendoli più significativi semanticamente. L'eccezione è il dataset NarrativeQA dove c'è semplicemente così tanto contesto irrilevante che il chunking tardivo perde terreno. Con chunk di dimensioni maggiori, il chunking ingenuo mostra un notevole miglioramento (occasionalmente superando il chunking tardivo) grazie all'aumento del contesto, mentre le prestazioni del chunking tardivo diminuiscono gradualmente.

tagConclusioni: Quando Usare Cosa?

In questo post, abbiamo esaminato diversi tipi di task di recupero documenti per capire meglio quando utilizzare la segmentazione e quando il chunking tardivo è utile. Quindi, cosa abbiamo imparato?

tagQuando Dovrei Usare l'Embedding con Contesto Lungo?

In generale, non danneggia l'accuratezza del recupero includere quanto più testo possibile dei tuoi documenti nell'input del tuo modello di embedding. Tuttavia, i modelli di embedding con contesto lungo spesso si concentrano sull'inizio dei documenti, poiché contengono contenuti come titoli e introduzione che sono più importanti per giudicare la rilevanza, ma i modelli potrebbero perdere contenuti nella parte centrale del documento.

tagQuando Dovrei Usare il Chunking Ingenuo?

Quando i documenti coprono molteplici aspetti, o le query degli utenti mirano a informazioni specifiche all'interno di un documento, il chunking generalmente migliora le prestazioni di recupero.

Alla fine, le decisioni sulla segmentazione dipendono da fattori come la necessità di mostrare testo parziale agli utenti (ad esempio come Google presenta i passaggi rilevanti nelle anteprime dei risultati di ricerca), che rende la segmentazione essenziale, o vincoli di calcolo e memoria, dove la segmentazione può essere meno favorevole a causa dell'aumento del sovraccarico di recupero e dell'utilizzo delle risorse.

tagQuando Dovrei Usare il Chunking Tardivo?

Codificando l'intero documento prima di creare i chunk, il chunking tardivo risolve il problema dei segmenti di testo che perdono il loro significato a causa del contesto mancante. Questo funziona particolarmente bene con documenti coerenti, dove ogni parte è correlata al tutto. I nostri esperimenti mostrano che il chunking tardivo è particolarmente efficace quando si divide il testo in chunk più piccoli, come dimostrato nel nostro paper. Tuttavia, c'è un'avvertenza: se parti del documento non sono correlate tra loro, includere questo contesto più ampio può effettivamente peggiorare le prestazioni di recupero, poiché aggiunge rumore agli embedding.

tagConclusione

La scelta tra embedding con contesto lungo, chunking ingenuo e chunking tardivo dipende dai requisiti specifici del tuo task di recupero. Gli embedding con contesto lungo sono preziosi per documenti coerenti con query generali, mentre il chunking eccelle nei casi in cui gli utenti cercano fatti o informazioni specifiche all'interno di un documento. Il chunking tardivo migliora ulteriormente il recupero mantenendo la coerenza contestuale all'interno di segmenti più piccoli. In definitiva, comprendere i tuoi dati e gli obiettivi di recupero guiderà l'approccio ottimale, bilanciando accuratezza, efficienza e rilevanza contestuale.

Se stai esplorando queste strategie, considera di provare jina-embeddings-v3—le sue avanzate capacità di contesto lungo, chunking tardivo e flessibilità lo rendono un'eccellente scelta per diversi scenari di recupero.

Jina Embeddings v3: Un Modello di Embedding Multilingue all'Avanguardia
jina-embeddings-v3 è un modello di embedding testuale multilingue all'avanguardia con 570M parametri e lunghezza di token di 8192, che supera gli ultimi embedding proprietari di OpenAI e Cohere su MTEB.
Jina AI
Categorie:
Blog tecnico
rss_feed
Uffici
location_on
Sunnyvale, California
710 Lakeway Dr, Ste 200, Sunnyvale, CA 94085, Stati Uniti
location_on
Berlino, Germania (sede centrale)
Prinzessinnenstraße 19-20, 10969 Berlino, Germania
location_on
Pechino, Cina
Livello 5, Edificio 6, No.48 Haidian West St. Pechino, Cina
location_on
Shenzen, Cina
402 Piano 4, Fu'an Technology Building, Shenzhen, Cina
Fondazione di ricerca
Lettore
Incorporamenti
Riclassificazione
Ricerca profonda
Classificatore
Segmentatore
Documentazione API
Ottieni la chiave API Jina
Limite di velocità
Stato dell'API
Azienda
Chi siamo
Contatta le vendite
Sala stampa
Programma di stagista
Unisciti a noi
open_in_new
Scarica il logo
open_in_new
Termini
Sicurezza
Termini & Condizioni
Privacy
Gestisci i cookie
email
Jina AI © 2020-2025.