Hoy, nos complace lanzar Jina ColBERT v2 (jina-colbert-v2), un avanzado modelo de recuperación de interacción tardía basado en la arquitectura ColBERT. Este nuevo modelo de lenguaje mejora el rendimiento de jina-colbert-v1-en y añade soporte multilingüe y dimensiones de salida dinámicas.
Este nuevo lanzamiento destaca las siguientes características:
- Rendimiento superior en recuperación comparado con el ColBERT-v2 original (+6,5%) y nuestro lanzamiento anterior, jina-colbert-v1-en (+5,4%).
- Soporte multilingüe para 89 idiomas, ofreciendo un fuerte rendimiento en los principales idiomas globales.
- Tamaños de embedding de salida controlados por el usuario a través del aprendizaje de representación Matryoshka, permitiendo a los usuarios equilibrar flexiblemente entre eficiencia y precisión.
tagResumen Técnico de jina-colbert-v2
El informe técnico completo se puede encontrar en arXiv:

jina-colbert-v2 | jina-colbert-v1-en | Original ColBERTv2 | |
---|---|---|---|
Average of 14 English BEIR tasks |
0.521 | 0.494 | 0.489 |
Multilingual | 89 languages | English-only | English-only |
Output dimensions | 128, 96, or 64 | Fixed 128 | Fixed 128 |
Max query length | 32 tokens | 32 tokens | 32 tokens |
Max document length | 8192 tokens | 8192 tokens | 512 tokens |
Parameters | 560M | 137M | 110M |
Model size | 1.1GB | 550MB | 438MB |
tagEmbedding Asimétrico en ColBERT
ColBERT se basa en la arquitectura BERT añadiendo interacción tardía y codificación asimétrica de consulta-documento.

La naturaleza asimétrica de ColBERT significa que al usar modelos como jina-colbert-v2 o jina-colbert-v1-en, necesitas especificar si estás embebiendo una consulta, un documento o ambos (para propósitos de reordenamiento). Esta flexibilidad adicional mejora el rendimiento sobre los modelos de embedding homogéneos en tareas de recuperación.
tagSoporte Multilingüe Para Más de 89 Idiomas
Jina ColBERT v2 tiene amplias capacidades multilingües, diseñadas para satisfacer las demandas de recuperación de información y aplicaciones de IA modernas y globalizadas. El corpus de entrenamiento para jina-colbert-v2 incorpora 89 idiomas, con etapas adicionales de entrenamiento para los principales idiomas internacionales incluyendo árabe, chino, inglés, francés, alemán, japonés, ruso y español, así como lenguajes de programación. El entrenamiento también incluyó un corpus de textos bilingües alineados para desbloquear potenciales interlingüísticos, permitiendo que las consultas y documentos en diferentes idiomas se emparejen en tareas de reordenamiento/recuperación.
Actualmente, Jina ColBERT v2 destaca como el único modelo tipo ColBERT multilingüe que genera embeddings compactos, superando significativamente la recuperación basada en BM25 en todos los idiomas probados en los benchmarks MIRACL.
Además, en tareas de recuperación en inglés, Jina ColBERT v2 supera el rendimiento de su predecesor jina-colbert-v1-en y el modelo ColBERT v2 original, con un rendimiento comparable al modelo altamente especializado solo en inglés AnswerAI-ColBERT-small.
Model Name | Average score (14 BEIR English-only benchmarks) |
Multilingual Support |
---|---|---|
jina-colbert-v2 | 0.521 | Multilingual |
jina-colbert-v1-en | 0.494 | English-only |
ColBERT v2.0 | 0.489 | English-only |
AnswerAI-ColBERT-small | 0.549 | English-only |
tagAprendizaje de Representación Matryoshka
El Aprendizaje de Representación Matryoshka es una técnica para entrenar modelos que soporten diferentes tamaños de vectores de salida mientras minimizan cualquier pérdida en precisión. Entrenamos las capas ocultas de la red con varias cabezas de proyección lineal diferentes — las capas finales de una red neuronal — cada una soportando un tamaño de salida diferente. Jina ColBERT v2 soporta vectores de salida de 128, 96 y 64 dimensiones.
Jina ColBERT v2 produce embeddings de salida de 128 dimensiones por defecto, pero puede producir 96 y 64 dimensiones que son casi idénticas en rendimiento pero son 25% y 50% más cortas respectivamente.
La tabla siguiente muestra el rendimiento nDGC dejina-colbert-v2 para los diez primeros resultados (nDGC@10) en seis conjuntos de datos del benchmark BEIR. Aquí puede verse que la diferencia en rendimiento entre 128 dimensiones y 96 es apenas del 1% y menos del 1,5% entre 128 y 64 dimensiones.
Dimensiones de Salida | Puntuación Promedio (nDGC@10 para 6 benchmarks) |
---|---|
128 | 0.565 |
96 | 0.558 |
64 | 0.556 |
Reducir el tamaño de los vectores de salida ahorra espacio y acelera aplicaciones como la recuperación de información basada en vectores que tienen que comparar diferentes vectores o medir la distancia entre ellos.
Esto tiene consecuencias significativas en los costos, incluso solo en términos de almacenamiento reducido. Por ejemplo, usando el calculador de costos de Qdrant cloud, almacenar 100 millones de documentos en AWS con vectores de 128 dimensiones para cada uno tiene un costo estimado de US$1.319,24 por mes. Con 64 dimensiones, esto se reduce a US$659,62.
tagComenzando con Jina ColBERT v2
Jina ColBERT v2 está disponible a través de la API Jina Search Foundation, el mercado de AWS, y en Azure. También está disponible para uso no comercial solamente (CC BY-NC-4.0) a través de Hugging Face.
tagA través de la API Jina Search Foundation
Para Embeddings
El siguiente comando curl
muestra cómo especificar la entrada y las opciones para obtener embeddings de documentos de jina-colbert-v2 a través de la API de Embeddings de Jina. Para obtener vectores del tamaño deseado, especifique 128 o 64 para el parámetro dimensions
. Este parámetro es opcional y el valor predeterminado es 128.
Los documentos de entrada serán truncados si son más largos de 8192 tokens.
Especifique su clave API de Jina en el encabezado de autorización Authorization: Bearer <TU CLAVE API DE JINA>
:
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, # O 64 para vectores de mitad de tamaño
"input_type": "document", # Para embeddings de consulta ver abajo
"embedding_type": "float",
"input": [
"Your document text string goes here",
"You can send multiple texts",
"Each text can be up to 8192 tokens long"
]}'
Para obtener embeddings de consulta, establezca el parámetro input_type
a query
en lugar de document
. Tenga en cuenta que las consultas tienen límites de tamaño mucho más estrictos que los documentos. Se truncarán a 32 tokens. La codificación de consultas siempre devolverá 32 tokens, incluyendo embeddings para el relleno si hay menos de 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, # O 64 para vectores de mitad de tamaño
"input_type": "query", # Esto debe especificarse para embeddings de consulta
"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"
]}'

Para Reordenamiento
Para usar jina-colbert-v2 a través de la API Jina Reranker, pasando una consulta y varios documentos y obteniendo puntuaciones de coincidencia clasificables, construya su solicitud como la siguiente:
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."
]
}'
Tenga en cuenta el argumento top_n
, que especifica el número de documentos que desea recuperar. Por ejemplo, si su aplicación solo usa la coincidencia superior, establezca top_n
a 1.
Para fragmentos de código en Python y otros lenguajes de programación y frameworks, vaya a la página de la API de Embeddings de Jina AI, o seleccione jina-colbert-v2 del menú desplegable en la página de la API Jina Reranker.

tagA través de Stanford ColBERT
También puedes usar Jina ColBERT v2 como reemplazo directo de ColBERT v2 en la biblioteca Stanford ColBERT. Simplemente especifica jinaai/jina-colbert-v2
como fuente del modelo:
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
y flash_attn
para usar el código anterior.tagVía RAGatouille
Jina ColBERT v2 está integrado de manera similar en RAGatouille. Puedes descargarlo y usarlo mediante el método 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
y flash_attn
para usar el código anterior.tagVía Qdrant
Desde la versión 1.10, Qdrant ha añadido soporte para multi-vectores y modelos de interacción tardía. Los usuarios existentes de motores Qdrant, ya sean versiones locales o gestionadas en la nube, pueden beneficiarse integrando directamente jina-colbert-v2 usando el cliente de Qdrant.
Creando una nueva Colección usando la operación 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
para usar modelos tipo ColBERT en Qdrant.Insertando Documentos en Colecciones Multi-vector
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]}
)
],
)
Consultando Colecciones
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)
tagResumen
Jina ColBERT v2 (jina-colbert-v2) se basa en el alto rendimiento de jina-colbert-v1-en y expande sus capacidades a una amplia gama de idiomas globales. Con soporte para múltiples tamaños de embeddings, jina-colbert-v2 permite a los usuarios ajustar el equilibrio entre precisión y eficiencia para adaptarse a sus casos de uso específicos, potencialmente ofreciendo ahorros significativos en tiempo y costos de computación.
Este modelo combina todas estas características en un solo paquete a precio competitivo, accesible a través de una API web intuitiva y compatible con cualquier marco de computación que soporte solicitudes HTTP. Pruébalo tú mismo con 1 millón de tokens gratuitos para ver cómo puede mejorar tus aplicaciones y procesos.