Aujourd'hui, nous sommes ravis de présenter Jina ColBERT v2 (jina-colbert-v2), un modèle avancé de recherche à interaction tardive basé sur l'architecture ColBERT. Ce nouveau modèle de langage améliore les performances de jina-colbert-v1-en et ajoute le support multilingue ainsi que des dimensions de sortie dynamiques.
Cette nouvelle version met en avant les fonctionnalités suivantes :
- Performances de recherche supérieures par rapport au ColBERT-v2 original (+6,5 %) et à notre version précédente, jina-colbert-v1-en (+5,4 %).
- Support multilingue pour 89 langues, offrant de solides performances dans les principales langues mondiales.
- Tailles d'embedding de sortie contrôlables par l'utilisateur grâce à l'apprentissage de représentation Matryoshka, permettant aux utilisateurs d'équilibrer flexiblement entre efficacité et précision.
tagRésumé Technique de jina-colbert-v2
Le rapport technique complet est disponible sur arXiv :

jina-colbert-v2 | jina-colbert-v1-en | Original ColBERTv2 | |
---|---|---|---|
Moyenne de 14 tâches BEIR en anglais |
0.521 | 0.494 | 0.489 |
Multilingue | 89 langues | Anglais uniquement | Anglais uniquement |
Dimensions de sortie | 128, 96, ou 64 | 128 fixe | 128 fixe |
Longueur max. requête | 32 tokens | 32 tokens | 32 tokens |
Longueur max. document | 8192 tokens | 8192 tokens | 512 tokens |
Paramètres | 560M | 137M | 110M |
Taille du modèle | 1.1GB | 550MB | 438MB |
tagEmbedding Asymétrique dans ColBERT
ColBERT s'appuie sur l'architecture BERT en ajoutant une interaction tardive et un encodage asymétrique requête-document.

La nature asymétrique de ColBERT signifie que lors de l'utilisation de modèles comme jina-colbert-v2 ou jina-colbert-v1-en, vous devez spécifier si vous intégrez une requête, un document, ou les deux (à des fins de reclassement). Cette flexibilité supplémentaire améliore les performances par rapport aux modèles d'embedding homogènes dans les tâches de recherche.
tagSupport Multilingue Pour Plus de 89 Langues
Jina ColBERT v2 dispose de capacités multilingues étendues, conçues pour répondre aux exigences des applications modernes de recherche d'information et d'IA globalisées. Le corpus d'entraînement de jina-colbert-v2 intègre 89 langues, avec des étapes d'entraînement supplémentaires pour les principales langues internationales, notamment l'arabe, le chinois, l'anglais, le français, l'allemand, le japonais, le russe et l'espagnol, ainsi que les langages de programmation. L'entraînement incluait également un corpus de textes bilingues alignés pour exploiter les potentiels multilingues, permettant la correspondance entre requêtes et documents dans différentes langues lors des tâches de reclassement/recherche.
Aujourd'hui, Jina ColBERT v2 se distingue comme le seul modèle de type ColBERT multilingue qui génère des embeddings compacts, surpassant significativement la recherche basée sur BM25 dans toutes les langues testées sur les benchmarks MIRACL.
De plus, sur les tâches de recherche en langue anglaise, Jina ColBERT v2 dépasse les performances de son prédécesseur jina-colbert-v1-en et du modèle ColBERT v2 original, avec des performances comparables au modèle anglais hautement spécialisé AnswerAI-ColBERT-small.
Nom du Modèle | Score moyen (14 benchmarks BEIR anglais) |
Support Multilingue |
---|---|---|
jina-colbert-v2 | 0.521 | Multilingue |
jina-colbert-v1-en | 0.494 | Anglais uniquement |
ColBERT v2.0 | 0.489 | Anglais uniquement |
AnswerAI-ColBERT-small | 0.549 | Anglais uniquement |
tagApprentissage de Représentation Matryoshka
L'Apprentissage de Représentation Matryoshka est une technique d'entraînement de modèles permettant de supporter différentes tailles de vecteurs de sortie tout en minimisant toute perte de précision. Nous entraînons les couches cachées du réseau avec plusieurs têtes de projection linéaire différentes — les couches finales d'un réseau de neurones — chacune supportant une taille de sortie différente. Jina ColBERT v2 supporte des vecteurs de sortie de 128, 96 et 64 dimensions.
Jina ColBERT v2 produit par défaut des embeddings de sortie de 128 dimensions, mais peut produire des dimensions de 96 et 64 qui ont des performances presque identiques tout en étant respectivement 25 % et 50 % plus courts.
Le tableau ci-dessous montre la performance nDGC dujina-colbert-v2 pour les dix premiers résultats (nDGC@10) sur six jeux de données du benchmark BEIR. Vous pouvez constater que la différence de performance entre 128 dimensions et 96 est à peine de 1% et moins de 1,5% entre 128 et 64 dimensions.
Dimensions de Sortie | Score Moyen (nDGC@10 pour 6 benchmarks) |
---|---|
128 | 0.565 |
96 | 0.558 |
64 | 0.556 |
Réduire la taille des vecteurs de sortie permet d'économiser de l'espace et d'accélérer les applications comme la recherche d'informations basée sur les vecteurs qui doivent comparer différents vecteurs ou mesurer la distance entre eux.
Cela a des conséquences significatives sur les coûts, ne serait-ce qu'en termes de stockage réduit. Par exemple, en utilisant le calculateur de coûts cloud de Qdrant, le stockage de 100 millions de documents sur AWS avec des vecteurs de 128 dimensions pour chacun a un coût estimé de 1 319,24 USD par mois. À 64 dimensions, ce coût tombe à 659,62 USD.
tagDébuter avec Jina ColBERT v2
Jina ColBERT v2 est disponible via l'API Jina Search Foundation, le marketplace AWS, et sur Azure. Il est également disponible pour une utilisation non commerciale uniquement (CC BY-NC-4.0) via Hugging Face.
tagVia l'API Jina Search Foundation
Pour l'Embedding
La commande curl
suivante montre comment spécifier l'entrée et les options pour obtenir des embeddings de documents à partir de jina-colbert-v2 via l'API Jina Embeddings. Pour obtenir des vecteurs de la taille souhaitée, spécifiez 128 ou 64 pour le paramètre dimensions
. Ce paramètre est optionnel et la valeur par défaut est 128.
Les documents d'entrée seront tronqués s'ils dépassent 8192 tokens.
Spécifiez votre clé API Jina dans l'en-tête d'autorisation Authorization: Bearer <YOUR JINA API KEY>
:
curl https://api.jina.ai/v1/multi-vector \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer <YOUR JINA API KEY>" \\
-d '{
"model": "jina-colbert-v2",
"dimensions": 128, # Ou 64 pour des vecteurs de taille réduite
"input_type": "document", # Pour les embeddings de requête voir ci-dessous
"embedding_type": "float",
"input": [
"Your document text string goes here",
"You can send multiple texts",
"Each text can be up to 8192 tokens long"
]}'
Pour obtenir des embeddings de requête, définissez le paramètre input_type
sur query
au lieu de document
. Notez que les requêtes ont des limites de taille beaucoup plus strictes que les documents. Elles seront tronquées à 32 tokens. L'encodage des requêtes renverra toujours 32 tokens, y compris les embeddings pour le padding si la longueur est inférieure à 32 tokens.
curl https://api.jina.ai/v1/multi-vector \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer <YOUR JINA API KEY>" \\
-d '{
"model": "jina-colbert-v2",
"dimensions": 128, # Ou 64 pour des vecteurs de taille réduite
"input_type": "query", # Doit être spécifié pour les embeddings de requête
"embedding_type": "float",
"input": [
"Your query text string goes here",
"You can send multiple texts",
"Each query text can be up to 32 tokens long"
]}'

Pour le Reranking
Pour utiliser jina-colbert-v2 via l'API Jina Reranker, en passant une requête et plusieurs documents et en obtenant des scores de correspondance classables, construisez votre requête comme celle ci-dessous :
curl https://api.jina.ai/v1/rerank \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer <YOUR JINA API KEY>" \\
-d '{
"model": "jina-colbert-v2",
"query": "What is the population of Berlin?",
"top_n": 3,
"documents": [
"Berlin's population grew by 0.7 percent in 2023 compared with the previous year. Accordingly, around 27,300 more residents lived in Berlin at the end of the last year than in 2022. Those of 30 to under 40 years old form the numerically largest age group. With roughly 881,000 foreign residents from around 170 nations and an average age of the population of 42.5 years old.",
"Mount Berlin is a glacier-covered volcano in Marie Byrd Land, Antarctica, 100 kilometres (62 mi) from the Amundsen Sea. It is a roughly 20-kilometre-wide (12 mi) mountain with parasitic vents that consists of two coalesced volcanoes: Berlin proper with the 2-kilometre-wide (1.2 mi) Berlin Crater and Merrem Peak with a 2.5-by-1-kilometre-wide (1.55 mi × 0.62 mi) crater, 3.5 kilometres (2.2 mi) away from Berlin.",
"Population as of 31.12.2023 by nationality and federal states Land\\tTotal\\tGermans\\tForeigners\\tincluding EU-states number\\t%\\tnumber\\t%",
"The urban area of Berlin has a population of over 4.5 million and is therefore the most populous urban area in Germany. The Berlin-Brandenburg capital region has around 6.2 million inhabitants and is Germany's second-largest metropolitan region after the Rhine-Ruhr region, and the sixth-biggest metropolitan region by GDP in the European Union.",
"Irving Berlin (born Israel Beilin) was an American composer and songwriter. His music forms a large part of the Great American Songbook. Berlin received numerous honors including an Academy Award, a Grammy Award, and a Tony Award.",
"Berlin is a town in the Capitol Planning Region, Connecticut, United States. The population was 20,175 at the 2020 census.",
"Berlin is the capital and largest city of Germany, both by area and by population. Its more than 3.85 million inhabitants make it the European Union's most populous city, as measured by population within city limits.",
"Berlin, Berlin ist eine für die ARD produzierte Fernsehserie, die von 2002 bis 2005 im Vorabendprogramm des Ersten ausgestrahlt wurde. Regie führten unter anderem Franziska Meyer Price, Christoph Schnee, Sven Unterwaldt Jr. und Titus Selge."
]
}'
Notez l'argument top_n
, qui spécifie le nombre de documents que vous souhaitez récupérer. Par exemple, si votre application n'utilise que la meilleure correspondance, définissez top_n
à 1.
Pour des exemples de code en Python et autres langages et frameworks de programmation, rendez-vous sur la page de l'API Jina AI Embeddings, ou sélectionnez jina-colbert-v2 dans le menu déroulant sur la page de l'API Jina Reranker.

tagVia Stanford ColBERT
Vous pouvez aussi utiliser Jina ColBERT v2 comme remplacement direct de ColBERT v2 dans la bibliothèque Stanford ColBERT. Spécifiez simplement jinaai/jina-colbert-v2
comme source du modèle :
from colbert.infra import ColBERTConfig
from colbert.modeling.checkpoint import Checkpoint
ckpt = Checkpoint("jinaai/jina-colbert-v2", colbert_config=ColBERTConfig())
docs = ["Your list of texts"]
query_vectors = ckpt.queryFromText(docs)
einops
et flash_attn
pour utiliser le code ci-dessus.tagVia RAGatouille
Jina ColBERT v2 est également intégré à RAGatouille. Vous pouvez le télécharger et l'utiliser via la méthode RAGPretrainedModel.from_pretrained()
:
from ragatouille import RAGPretrainedModel
RAG = RAGPretrainedModel.from_pretrained("jinaai/jina-colbert-v2")
docs = ["Your list of texts"]
RAG.index(docs, index_name="your_index_name")
query = "Your query"
results = RAG.search(query)
einops
et flash_attn
pour utiliser le code ci-dessus.tagVia Qdrant
Depuis la version 1.10, Qdrant a ajouté le support pour les multi-vecteurs et les modèles à interaction tardive. Les utilisateurs existants des moteurs Qdrant, qu'ils soient locaux ou en version cloud gérée, peuvent en bénéficier en intégrant directement jina-colbert-v2 en utilisant le client Qdrant.
Création d'une nouvelle Collection utilisant l'opération MAX_SIM
from qdrant_client import QdrantClient, models
qdrant_client = QdrantClient(
url="<YOUR_ENDPOINT>",
api_key="<YOUR_API_KEY>",
)
qdrant_client.create_collection(
collection_name="{collection_name}",
vectors_config={
"colbert": models.VectorParams(
size=128,
distance=models.Distance.COSINE,
multivector_config=models.MultiVectorConfig(
comparator=models.MultiVectorComparator.MAX_SIM
),
)
}
)
multivector_config
pour utiliser les modèles de type ColBERT dans Qdrant.Insertion de Documents Dans les Collections Multi-vecteurs
import requests
from qdrant_client import QdrantClient, models
url = 'https://api.jina.ai/v1/multi-vector'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <YOUR BEARER>'
}
data = {
'model': 'jina-colbert-v2',
'input_type': 'query',
'embedding_type': 'float',
'input': [
'Your text string goes here',
'You can send multiple texts',
'Each text can be up to 8192 tokens long'
]
}
response = requests.post(url, headers=headers, json=data)
rows = response.json()["data"]
qdrant_client = QdrantClient(
url="<YOUR_ENDPOINT>",
api_key="<YOUR_API_KEY>",
)
for i, row in enumerate(rows):
qdrant_client.upsert(
collection_name="{collection_name}",
points=[
models.PointStruct(
id=i,
vector=row["embeddings"],
payload={"text": data["input"][i]}
)
],
)
Interrogation des Collections
from qdrant_client import QdrantClient, models
import requests
url = 'https://api.jina.ai/v1/multi-vector'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <YOUR BEARER>'
}
data = {
'model': 'jina-colbert-v2',
"input_type": "query",
"embedding_type": "float",
"input": [
"how many tokens in an input do Jina AI's embedding models support?"
]
}
response = requests.post(url, headers=headers, json=data)
vector = response.json()["data"][0]["embeddings"]
qdrant_client = QdrantClient(
url="<YOUR_ENDPOINT>",
api_key="<YOUR_API_KEY>",
)
results = qdrant_client.query_points(
collection_name="{collection_name}",
query=vector,
)
print(results)
tagRésumé
Jina ColBERT v2 (jina-colbert-v2) s'appuie sur les hautes performances de jina-colbert-v1-en et étend ses capacités à un large éventail de langues mondiales. Avec la prise en charge de plusieurs tailles d'embedding, jina-colbert-v2 permet aux utilisateurs d'ajuster le compromis précision/efficacité pour répondre à leurs cas d'utilisation spécifiques, offrant potentiellement des économies significatives en temps et en coûts de calcul.
Ce modèle combine toutes ces fonctionnalités dans un package unique à prix compétitif, accessible via une API web intuitive et compatible avec tout framework de calcul prenant en charge les requêtes HTTP. Essayez-le par vous-même avec 1 million de tokens gratuits pour voir comment il peut améliorer vos applications et processus.