
Aggiornamento: Il 31 agosto 2024, abbiamo rilasciato la seconda versione di Jina-ColBERT, con prestazioni migliorate, supporto multilingue per 89 lingue e dimensioni di output flessibili. Consulta il post di rilascio per maggiori dettagli.
Venerdì scorso, il rilascio del modello ColBERT da parte di Jina AI su Hugging Face ha suscitato notevole entusiasmo nella comunità AI, in particolare su Twitter/X. Mentre molti hanno familiarità con il rivoluzionario modello BERT, il fermento intorno a ColBERT ha lasciato alcuni a chiedersi: Cosa rende ColBERT così speciale nel affollato campo delle tecnologie di recupero informazioni? Perché la comunità AI è entusiasta del ColBERT con lunghezza 8192? Questo articolo si addentra nelle complessità di ColBERT e ColBERTv2, evidenziando il loro design, i miglioramenti e la sorprendente efficacia dell'interazione tardiva di ColBERT.

tagCos'è ColBERT?
Il nome "ColBERT" sta per Contextualized Late Interaction over BERT, un modello che nasce dall'Università di Stanford, che sfrutta la profonda comprensione linguistica di BERT introducendo un nuovo meccanismo di interazione. Questo meccanismo, noto come interazione tardiva, permette un recupero efficiente e preciso elaborando query e documenti separatamente fino alle fasi finali del processo di recupero. In particolare, esistono due versioni del modello:
- ColBERT: Il modello iniziale è stato ideato da Omar Khattab e Matei Zaharia, presentando un approccio innovativo al recupero di informazioni attraverso l'articolo "ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT". Il loro lavoro è stato pubblicato a SIGIR 2020.

L'articolo originale di ColBERT che introduce l'"interazione tardiva".
- ColBERTv2: Basandosi sul lavoro fondamentale, Omar Khattab ha continuato la sua ricerca, collaborando con Barlas Oguz, Matei Zaharia e Michael S. Bernstein per introdurre "ColBERTv2: Effective and Efficient Retrieval via Lightweight Late Interaction", presentato a SIGIR 2021. Questa nuova iterazione di ColBERT ha affrontato le limitazioni precedenti e ha introdotto miglioramenti chiave, come la supervisione denoised e la compressione residua, migliorando sia l'efficacia del recupero del modello che la sua efficienza di archiviazione.

ColBERTv2 aggiunge la supervisione denoised e la compressione residua per migliorare la qualità dei dati di training e ridurre l'occupazione di spazio.
tagComprendere il Design di ColBERT
Dato che l'architettura di ColBERTv2 rimane molto simile a quella del ColBERT originale, con le sue innovazioni chiave che ruotano attorno alle tecniche di training e ai meccanismi di compressione, approfondiremo prima gli aspetti fondamentali del ColBERT originale.
tagCos'è l'interazione tardiva in ColBERT?
"Interazione" si riferisce al processo di valutazione della rilevanza tra una query e un documento confrontando le loro rappresentazioni.
"Interazione tardiva" è l'essenza di ColBERT. Il termine deriva dall'architettura del modello e dalla strategia di elaborazione, dove l'interazione tra le rappresentazioni della query e del documento avviene tardi nel processo, dopo che entrambi sono stati codificati indipendentemente. Questo contrasta con i modelli a "interazione precoce", dove gli embedding di query e documenti interagiscono nelle fasi iniziali, tipicamente prima o durante la loro codifica da parte del modello.
Interaction Type | Models |
---|---|
Early Interaction | BERT, ANCE, DPR, Sentence-BERT, DRMM, KNRM, Conv-KNRM, etc. |
Late Interaction | ColBERT, ColBERTv2 |
L'interazione precoce può aumentare la complessità computazionale poiché richiede di considerare tutte le possibili coppie query-documento, rendendola meno efficiente per applicazioni su larga scala.
I modelli a interazione tardiva come ColBERT ottimizzano l'efficienza e la scalabilità permettendo il pre-calcolo delle rappresentazioni dei documenti e impiegando un passaggio di interazione più leggero alla fine, che si concentra sulle rappresentazioni già codificate. Questa scelta di design consente tempi di recupero più rapidi e richieste computazionali ridotte, rendendolo più adatto per l'elaborazione di grandi collezioni di documenti.
tagNessuna interazione: similarità del coseno tra gli embedding di documenti e query
Molti database vettoriali pratici e soluzioni di ricerca neurale dipendono dal rapido matching della similarità del coseno tra gli embedding di documenti e query. Sebbene sia attraente per la sua semplicità ed efficienza computazionale, questo metodo, spesso definito come "nessuna interazione" o "non basato sull'interazione" si è dimostrato meno performante rispetto ai modelli che incorporano qualche forma di interazione tra query e documenti.
Il limite principale dell'approccio "nessuna interazione" risiede nella sua incapacità di catturare le sfumature complesse e le relazioni tra i termini della query e del documento. Il recupero delle informazioni, nel suo nucleo, riguarda la comprensione e il matching dell'intento dietro una query con il contenuto di un documento. Questo processo spesso richiede una comprensione profonda e contestuale dei termini coinvolti, qualcosa che gli embedding singoli e aggregati per documenti e query faticano a fornire.
tagCodificatori di query e documenti in ColBERT
La strategia di codifica di ColBERT si basa sul modello BERT, noto per la sua profonda comprensione contestuale del linguaggio. Il modello genera rappresentazioni vettoriali dense per ogni token in una query o documento, creando rispettivamente un insieme di embedding contestualizzati per una query e un insieme per un documento. Questo facilita un confronto sfumato dei loro embedding durante la fase di interazione tardiva.
tagCodificatore di query di ColBERT
Per una query con token , il processo inizia tokenizzando in token WordPiece basati su BERT e anteponendo un token speciale [Q]
. Questo token [Q]
, posizionato subito dopo il token [CLS]
di BERT, segnala l'inizio di una query.
Se la query è più corta di un numero predefinito di token , viene riempita con token [mask]
fino a ; altrimenti, viene troncata ai primi token. La sequenza riempita viene quindi passata attraverso BERT, seguita da una CNN (Rete Neurale Convoluzionale) e normalizzazione. L'output è un insieme di vettori di embedding indicati come di seguito:
tagCodificatore di documenti di ColBERT
Analogamente, per un documento con token , un token [D]
viene anteposto per indicare l'inizio di un documento. Questa sequenza, senza necessità di riempimento, subisce lo stesso processo, risultando in un insieme di vettori di embedding indicati come di seguito:
L'uso dei token [mask]
per il riempimento delle query (definito come augmentation della query nell'articolo) garantisce una lunghezza uniforme per tutte le query, facilitando l'elaborazione in batch. I token [Q]
e [D]
marcano esplicitamente l'inizio di query e documenti, rispettivamente, aiutando il modello a distinguere tra i due tipi di input.
tagConfronto tra ColBERT e cross-encoder
I cross-encoder elaborano coppie di query e documenti insieme, rendendoli molto accurati ma meno efficienti per compiti su larga scala a causa del costo computazionale di valutare ogni possibile coppia. Eccellono in scenari specifici dove è necessario il punteggio preciso di coppie di frasi, come nei compiti di similarità semantica o nel confronto dettagliato dei contenuti. Tuttavia, questo design limita la loro applicabilità in situazioni che richiedono un recupero rapido da grandi dataset, dove sono fondamentali gli embedding pre-calcolati e i calcoli efficienti della similarità.
Al contrario, il modello di interazione tardiva di ColBERT permette il pre-calcolo degli embedding dei documenti, accelerando significativamente il processo di recupero senza compromettere la profondità dell'analisi semantica. Questo metodo, sebbene apparentemente controintuitivo rispetto all'approccio diretto dei cross-encoder, offre una soluzione scalabile per compiti di recupero di informazioni in tempo reale e su larga scala. Rappresenta un compromesso strategico tra efficienza computazionale e qualità della modellazione dell'interazione.
tagTrovare i migliori K documenti usando ColBERT
Una volta che abbiamo gli embedding per la query e i documenti, trovare i K documenti più rilevanti diventa semplice (ma non semplice come calcolare il coseno di due vettori).
Le operazioni chiave includono un prodotto scalare in batch per calcolare le similarità termine per termine, max-pooling sui termini del documento per trovare la similarità più alta per ogni termine della query, e somma sui termini della query per derivare il punteggio totale del documento, seguita dall'ordinamento dei documenti basato su questi punteggi. Il codice pseudo PyTorch è descritto di seguito:
import torch
def compute_relevance_scores(query_embeddings, document_embeddings, k):
"""
Compute relevance scores for top-k documents given a query.
:param query_embeddings: Tensor representing the query embeddings, shape: [num_query_terms, embedding_dim]
:param document_embeddings: Tensor representing embeddings for k documents, shape: [k, max_doc_length, embedding_dim]
:param k: Number of top documents to re-rank
:return: Sorted document indices based on their relevance scores
"""
# Ensure document_embeddings is a 3D tensor: [k, max_doc_length, embedding_dim]
# Pad the k documents to their maximum length for batch operations
# Note: Assuming document_embeddings is already padded and moved to GPU
# Compute batch dot-product of Eq (query embeddings) and D (document embeddings)
# Resulting shape: [k, num_query_terms, max_doc_length]
scores = torch.matmul(query_embeddings.unsqueeze(0), document_embeddings.transpose(1, 2))
# Apply max-pooling across document terms (dim=2) to find the max similarity per query term
# Shape after max-pool: [k, num_query_terms]
max_scores_per_query_term = scores.max(dim=2).values
# Sum the scores across query terms to get the total score for each document
# Shape after sum: [k]
total_scores = max_scores_per_query_term.sum(dim=1)
# Sort the documents based on their total scores
sorted_indices = total_scores.argsort(descending=True)
return sorted_indices
Nota che questa procedura viene utilizzata sia durante l'addestramento che durante il re-ranking in fase di inferenza. Il modello ColBERT viene addestrato utilizzando una loss di ranking a coppie, dove i dati di addestramento consistono in triple , dove rappresenta una query, è un documento rilevante (positivo) per la query, e è un documento non rilevante (negativo). Il modello mira ad apprendere rappresentazioni tali che il punteggio di similarità tra e sia più alto del punteggio tra q e .
L'obiettivo dell'addestramento può essere matematicamente rappresentato come la minimizzazione della seguente funzione di loss:
, dove denota il punteggio di similarità calcolato da ColBERT tra una query e un documento . Questo punteggio si ottiene aggregando i punteggi di max-similarità degli embedding che corrispondono meglio tra la query e il documento, seguendo il pattern di interazione tardiva descritto nell'architettura del modello. Questo approccio assicura che il modello sia addestrato a distinguere tra documenti rilevanti e irrilevanti per una data query, incoraggiando un margine maggiore nei punteggi di similarità per coppie di documenti positivi e negativi.
tagSupervisione denoised in ColBERTv2
La supervisione denoised in ColBERTv2 raffina il processo di addestramento originale selezionando negativi impegnativi e sfruttando un cross-encoder per la distillazione. Questo metodo sofisticato di miglioramento della qualità dei dati di addestramento coinvolge diversi passaggi:
- Addestramento Iniziale: Utilizzo delle triple ufficiali dal dataset MS MARCO, comprendenti una query, un documento rilevante e un documento non rilevante.
- Indicizzazione e Recupero: Impiego della compressione di ColBERTv2 per indicizzare i passaggi di addestramento, seguito dal recupero dei passaggi top-k per ogni query.
- Reranking con Cross-Encoder: Miglioramento della selezione dei passaggi attraverso il reranking mediante un cross-encoder MiniLM, distillando i suoi punteggi in ColBERTv2.
- Formazione delle Tuple di Addestramento: Generazione di tuple w-way per l'addestramento, incorporando passaggi sia ad alto che a basso ranking per creare esempi impegnativi.
- Raffinamento Iterativo: Ripetizione del processo per migliorare continuamente la selezione dei negativi difficili, migliorando così le prestazioni del modello.
Nota, questo processo rappresenta un miglioramento sofisticato del regime di addestramento di ColBERT piuttosto che un cambiamento fondamentale della sua architettura.
tagIperparametri di ColBERT
Di seguito sono riassunti gli iperparametri di ColBERT:
Hyperparameter | Best Choice | Reason |
---|---|---|
Learning Rate | 3 x 10^{-6} | Selezionato per il fine-tuning per garantire aggiornamenti del modello stabili ed efficaci. |
Batch Size | 32 | Bilancia l'efficienza computazionale e la capacità di catturare informazioni sufficienti per aggiornamento. |
Number of Embeddings per Query (Nq) | 32 | Fissato per garantire una dimensione di rappresentazione consistente tra le query, facilitando l'elaborazione efficiente. |
Embedding Dimension (m) | 128 | Ha dimostrato di fornire un buon equilibrio tra potere di rappresentazione ed efficienza computazionale. |
Training Iterations | 200k (MS MARCO), 125k (TREC CAR) | Scelto per garantire un apprendimento approfondito evitando l'overfitting, con aggiustamenti basati sulle caratteristiche del dataset. |
Bytes per Dimension in Embeddings | 4 (re-ranking), 2 (end-to-end ranking) | Compromesso tra precisione ed efficienza dello spazio, considerando il contesto applicativo (re-ranking vs. end-to-end). |
Vector-Similarity Function | Cosine (re-ranking), (Squared) L2 (end-to-end) | Selezionata in base alle prestazioni e all'efficienza nei rispettivi contesti di recupero. |
FAISS Index Partitions (P) | 2000 | Determina la granularità del partizionamento dello spazio di ricerca, influenzando l'efficienza della ricerca. |
Nearest Partitions Searched (p) | 10 | Bilancia l'ampiezza della ricerca con l'efficienza computazionale. |
Sub-vectors per Embedding (s) | 16 | Influisce sulla granularità della quantizzazione, influenzando sia la velocità di ricerca che l'uso della memoria. |
Index Representation per Dimension | 16-bit values | Scelto per la seconda fase del recupero end-to-end per gestire il compromesso tra accuratezza e spazio. |
Number of Layers in Encoders | 12-layer BERT | Equilibrio ottimale tra profondità della comprensione contestuale ed efficienza computazionale. |
Max Query Length | 128 | Il numero massimo di token elaborati dall'encoder della query. Questo viene esteso nel modello Jina-ColBERT. |
Max Document Length | 512 | Il numero massimo di token elaborati dall'encoder del documento. Questo viene esteso a 8192 nel modello Jina-ColBERT. |
tagLa strategia di indicizzazione di ColBERT
A differenza degli approcci basati sulla rappresentazione che codificano ogni documento in un unico vettore di embedding, ColBERT codifica documenti (e query) in insiemi di embedding, con ogni token in un documento che ha il proprio embedding. Questo approccio significa intrinsecamente che per documenti più lunghi, verranno memorizzati più embedding, che è un punto dolente del ColBERT originale, successivamente risolto da ColBERTv2.
La chiave per gestire questo efficacemente risiede nell'uso di database vettoriali da parte di ColBERT (es. FAISS) per l'indicizzazione e il recupero, e nel suo dettagliato processo di indicizzazione progettato per gestire efficientemente grandi volumi di dati. Il paper originale di ColBERT menziona diverse strategie per migliorare l'efficienza dell'indicizzazione e del recupero, tra cui:
- Indicizzazione Offline: Le rappresentazioni dei documenti vengono calcolate offline, permettendo il pre-calcolo e l'archiviazione degli embedding dei documenti. Questo processo sfrutta l'elaborazione batch e l'accelerazione GPU per gestire efficientemente grandi collezioni di documenti.
- Archiviazione degli Embedding: Gli embedding dei documenti possono essere memorizzati utilizzando valori a 32-bit o 16-bit per ogni dimensione, offrendo un compromesso tra precisione e requisiti di archiviazione. Questa flessibilità permette a ColBERT di mantenere un equilibrio tra efficacia (in termini di prestazioni di recupero) ed efficienza (in termini di costi di archiviazione e computazionali).
L'introduzione della compressione residua in ColBERTv2, che è un approccio innovativo non presente nel ColBERT originale, gioca un ruolo chiave nella riduzione dell'impronta di spazio del modello di 6-10 volte mantenendo la qualità. Questa tecnica comprime ulteriormente gli embedding catturando e memorizzando efficacemente solo le differenze da un set di centroidi di riferimento fissi.
tagEfficacia ed Efficienza di ColBERT
Si potrebbe inizialmente presumere che incorporare la comprensione contestuale profonda di BERT nella ricerca richiederebbe intrinsecamente risorse computazionali significative, rendendo tale approccio meno fattibile per applicazioni in tempo reale a causa dell'alta latenza e dei costi computazionali. Tuttavia, ColBERT sfida e rovescia questa assunzione attraverso il suo uso innovativo del meccanismo di interazione tardiva. Ecco alcuni punti degni di nota:
- Guadagni Significativi in Efficienza: ColBERT ottiene una riduzione di ordini di grandezza nei costi computazionali (FLOPs) e nella latenza rispetto ai modelli di ranking tradizionali basati su BERT. Nello specifico, per una data dimensione del modello (es. encoder transformer a 12 strati "base"), ColBERT non solo eguaglia ma in alcuni casi supera l'efficacia dei modelli basati su BERT con richieste computazionali drasticamente inferiori. Per esempio, a una profondità di re-ranking di k=10, BERT richiede quasi 180× più FLOPs di ColBERT; questo divario si allarga con l'aumentare di k, raggiungendo 13900× a k=1000 e persino 23000× a k=2000.
- Migliore Recall e MRR@10 nel Recupero End-to-End: Contrariamente all'intuizione iniziale che un'interazione più profonda tra le rappresentazioni di query e documento (come visto nei modelli di interazione precoce) sarebbe necessaria per prestazioni di recupero elevate, la configurazione di recupero end-to-end di ColBERT dimostra un'efficacia superiore. Per esempio, il suo Recall@50 supera il Recall@1000 del BM25 ufficiale e quasi tutti i Recall@200 degli altri modelli, sottolineando la notevole capacità del modello di recuperare documenti rilevanti da una vasta collezione senza confronto diretto di ogni coppia query-documento.
- Praticità per Applicazioni Real-World: I risultati sperimentali sottolineano l'applicabilità pratica di ColBERT per scenari del mondo reale. Il suo throughput di indicizzazione e l'efficienza della memoria lo rendono adatto per indicizzare grandi collezioni di documenti come MS MARCO in poche ore, mantenendo un'alta efficacia con un'impronta di spazio gestibile. Queste qualità evidenziano l'idoneità di ColBERT per il deployment in ambienti di produzione dove sono fondamentali sia le prestazioni che l'efficienza computazionale.
- Scalabilità con la Dimensione della Collezione di Documenti: Forse la conclusione più sorprendente è la scalabilità e l'efficienza di ColBERT nel gestire collezioni di documenti su larga scala. L'architettura permette il pre-calcolo degli embedding dei documenti e sfrutta l'elaborazione batch efficiente per l'interazione query-documento, permettendo al sistema di scalare efficacemente con la dimensione della collezione di documenti. Questa scalabilità è controintuitiva considerando la complessità e la profondità di comprensione richieste per un recupero efficace dei documenti, mostrando l'approccio innovativo di ColBERT nel bilanciare efficienza computazionale ed efficacia del recupero.
tagUtilizzo di jina-colbert-v1-en: un modello ColBERTv2 con lunghezza 8192
Jina-ColBERT è progettato per un recupero sia veloce che accurato, supportando lunghezze di contesto più lunghe fino a 8192, sfruttando i progressi di JinaBERT, che permette l'elaborazione di sequenze più lunghe grazie ai miglioramenti della sua architettura.
[D],[CLS]
all'inizio.
tagI miglioramenti di Jina rispetto al ColBERT originale
Il principale progresso di Jina-ColBERT è il suo backbone, jina-bert-v2-base-en
, che permette l'elaborazione di contesti significativamente più lunghi (fino a 8192 token) rispetto al ColBERT originale che usa bert-base-uncased
. Questa capacità è cruciale per gestire documenti con contenuto esteso, fornendo risultati di ricerca più dettagliati e contestuali.
tagConfronto delle prestazioni di jina-colbert-v1-en vs. ColBERTv2
Abbiamo valutato jina-colbert-v1-en sui dataset BEIR e sul nuovo benchmark LoCo che favorisce il contesto lungo, testandolo contro l'implementazione originale di ColBERTv2 e i modelli basati su non-interazione
modello jina-embeddings-v2-base-en.Dataset | ColBERTv2 | jina-colbert-v1-en | jina-embeddings-v2-base-en |
---|---|---|---|
Arguana | 46.5 | 49.4 | 44.0 |
Climate-Fever | 18.1 | 19.6 | 23.5 |
DBPedia | 45.2 | 41.3 | 35.1 |
FEVER | 78.8 | 79.5 | 72.3 |
FiQA | 35.4 | 36.8 | 41.6 |
HotpotQA | 67.5 | 65.9 | 61.4 |
NFCorpus | 33.7 | 33.8 | 32.5 |
NQ | 56.1 | 54.9 | 60.4 |
Quora | 85.5 | 82.3 | 88.2 |
SCIDOCS | 15.4 | 16.9 | 19.9 |
SciFact | 68.9 | 70.1 | 66.7 |
TREC-COVID | 72.6 | 75.0 | 65.9 |
Webis-touch2020 | 26.0 | 27.0 | 26.2 |
LoCo | 74.3 | 83.7 | 85.4 |
Average | 51.7 | 52.6 | 51.6 |
Questa tabella dimostra le prestazioni superiori di jina-colbert-v1-en, specialmente in scenari che richiedono lunghezze di contesto più lunghe rispetto al ColBERTv2 originale. Da notare che jina-embeddings-v2-base-en utilizza più dati di addestramento, mentre jina-colbert-v1-en usa solo MSMARCO, il che può giustificare le buone prestazioni di jina-embeddings-v2-base-en su alcuni task.
tagEsempio di utilizzo di jina-colbert-v1-en
Questo snippet illustra il processo di indicizzazione con Jina-ColBERT, mostrando il suo supporto per documenti lunghi.
from colbert import Indexer
from colbert.infra import Run, RunConfig, ColBERTConfig
n_gpu: int = 1 # Set your number of available GPUs
experiment: str = "" # Name of the folder where the logs and created indices will be stored
index_name: str = "" # The name of your index, i.e. the name of your vector database
if __name__ == "__main__":
with Run().context(RunConfig(nranks=n_gpu, experiment=experiment)):
config = ColBERTConfig(
doc_maxlen=8192 # Our model supports 8k context length for indexing long documents
)
indexer = Indexer(
checkpoint="jinaai/jina-colbert-v1-en",
config=config,
)
documents = [
"ColBERT is an efficient and effective passage retrieval model.",
"Jina-ColBERT is a ColBERT-style model but based on JinaBERT so it can support both 8k context length.",
"JinaBERT is a BERT architecture that supports the symmetric bidirectional variant of ALiBi to allow longer sequence length.",
"Jina-ColBERT model is trained on MSMARCO passage ranking dataset, following a very similar training procedure with ColBERTv2.",
"Jina-ColBERT achieves the competitive retrieval performance with ColBERTv2.",
"Jina is an easier way to build neural search systems.",
"You can use Jina-ColBERT to build neural search systems with ease.",
# Add more documents here to ensure the clustering work correctly
]
indexer.index(name=index_name, collection=documents)
tagUtilizzare jina-colbert-v1-en in RAGatouille
RAGatouille è una nuova libreria Python che facilita l'uso di metodi di recupero avanzati all'interno delle pipeline RAG. È progettata per essere modulare e facilmente integrabile, permettendo agli utenti di sfruttare la ricerca all'avanguardia in modo continuo. L'obiettivo principale di RAGatouille è semplificare l'applicazione di modelli complessi come ColBERT nelle pipeline RAG, rendendoli accessibili agli sviluppatori senza la necessità di una profonda esperienza nella ricerca sottostante. Grazie a Benjamin Clavié, ora puoi utilizzare facilmente jina-colbert-v1-en:
from ragatouille import RAGPretrainedModel
# Get your model & collection of big documents ready
RAG = RAGPretrainedModel.from_pretrained("jinaai/jina-colbert-v1-en")
my_documents = [
"very long document1",
"very long document2",
# ... more documents
]
# And create an index with them at full length!
RAG.index(collection=my_documents,
index_name="the_biggest_index",
max_document_length=8190,)
# or encode them in-memory with no truncation, up to your model's max length
RAG.encode(my_documents)
Per informazioni più dettagliate e per esplorare ulteriormente Jina-ColBERT, puoi visitare la pagina Hugging Face.
tagConclusione
ColBERT rappresenta un significativo passo avanti nel campo del recupero delle informazioni. Abilitando lunghezze di contesto più lunghe con Jina-ColBERT e mantenendo la compatibilità con l'approccio ColBERT all'interazione tardiva, offre una potente alternativa per gli sviluppatori che cercano di implementare funzionalità di ricerca all'avanguardia.
Insieme alla libreria RAGatouille, che semplifica l'integrazione di modelli di recupero complessi nelle pipeline RAG, gli sviluppatori possono ora sfruttare la potenza del recupero avanzato con facilità, ottimizzando i loro flussi di lavoro e migliorando le loro applicazioni. La sinergia tra Jina-ColBERT e RAGatouille illustra un notevole passo avanti nel rendere i modelli di ricerca AI avanzati accessibili ed efficienti per l'uso pratico.