Мы рады представить Jina ColBERT v2 (jina-colbert-v2), продвинутую модель поиска с поздним взаимодействием, построенную на архитектуре ColBERT. Эта новая языковая модель улучшает производительность jina-colbert-v1-en и добавляет многоязычную поддержку и динамические выходные размерности.
Новый релиз предлагает следующие возможности:
- Превосходная производительность поиска по сравнению с оригинальной ColBERT-v2 (+6,5%) и нашим предыдущим релизом jina-colbert-v1-en (+5,4%).
- Многоязычная поддержка для 89 языков, обеспечивающая высокую производительность для основных мировых языков.
- Настраиваемые пользователем размеры выходных эмбеддингов благодаря Matryoshka representation learning, позволяющие гибко балансировать между эффективностью и точностью.
tagТехническое описание jina-colbert-v2
Полный технический отчет доступен на 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 |
tagАсимметричное встраивание в ColBERT
ColBERT основан на архитектуре BERT с добавлением позднего взаимодействия и асимметричного кодирования запросов и документов.

Асимметричная природа ColBERT означает, что при использовании моделей вроде jina-colbert-v2 или jina-colbert-v1-en необходимо указывать, выполняете ли вы встраивание запроса, документа или обоих (для переранжирования). Эта дополнительная гибкость повышает производительность по сравнению с однородными моделями встраивания в задачах поиска.
tagМногоязычная поддержка для более чем 89 языков
Jina ColBERT v2 обладает обширными многоязычными возможностями, разработанными для удовлетворения потребностей современного глобализированного информационного поиска и AI-приложений. Тренировочный корпус для jina-colbert-v2 включает 89 языков, с дополнительными этапами обучения для основных международных языков, включая арабский, китайский, английский, французский, немецкий, японский, русский и испанский, а также языки программирования. Обучение также включало корпус выровненных двуязычных текстов для реализации кросс-языкового потенциала, позволяя сопоставлять запросы и документы на разных языках в задачах переранжирования/поиска.
Сегодня Jina ColBERT v2 выделяется как единственная многоязычная ColBERT-подобная модель, которая генерирует компактные эмбеддинги, значительно превосходя BM25-based поиск по всем тестируемым языкам на бенчмарках MIRACL.
Более того, в задачах поиска на английском языке Jina ColBERT v2 превосходит своего предшественника jina-colbert-v1-en и оригинальную модель ColBERT v2, показывая сопоставимую производительность с узкоспециализированной англоязычной моделью 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 |
tagМатрёшечное обучение представлений
Matryoshka Representation Learning – это техника обучения моделей для поддержки различных размеров выходных векторов при минимизации потерь в точности. Мы обучаем скрытые слои сети с несколькими разными линейными проекционными головами — финальными слоями нейронной сети — каждая из которых поддерживает разный выходной размер. Jina ColBERT v2 поддерживает выходные векторы размерностью 128, 96 и 64.
Jina ColBERT v2 по умолчанию создает эмбеддинги размерностью 128, но может производить векторы размерностью 96 и 64, которые практически идентичны по производительности, но короче на 25% и 50% соответственно.
Таблица ниже показывает производительность по метрике nDGCjina-colbert-v2 для топ-10 результатов (nDGC@10) по шести наборам данных из бенчмарка BEIR. Здесь видно, что разница в производительности между 128 и 96 размерностями едва достигает 1%, а между 128 и 64 размерностями - менее 1,5%.
Выходные размерности | Средний показатель (nDGC@10 для 6 бенчмарков) |
---|---|
128 | 0.565 |
96 | 0.558 |
64 | 0.556 |
Уменьшение размера выходных векторов экономит пространство и ускоряет работу приложений, таких как векторный информационный поиск, которым необходимо сравнивать разные векторы или измерять расстояние между ними.
Это имеет значительные последствия для затрат, даже просто с точки зрения сокращения хранилища. Например, используя калькулятор стоимости Qdrant Cloud, хранение 100 миллионов документов на AWS с 128-мерными векторами для каждого имеет расчетную стоимость 1 319,24 долларов США в месяц. При 64 размерностях эта сумма снижается до 659,62 долларов США.
tagНачало работы с Jina ColBERT v2
Jina ColBERT v2 доступен через Jina Search Foundation API, AWS marketplace и на Azure. Он также доступен для некоммерческого использования (CC BY-NC-4.0) через Hugging Face.
tagЧерез Jina Search Foundation API
Для эмбеддингов
Следующая команда curl
показывает, как указать входные данные и параметры для получения эмбеддингов документов из jina-colbert-v2 через Jina Embeddings API. Чтобы получить векторы предпочтительного размера, укажите 128 или 64 для параметра dimensions
. Этот параметр необязательный, и значение по умолчанию - 128.
Входные документы будут обрезаны, если они длиннее 8192 токенов.
Укажите ваш API-ключ Jina в заголовке авторизации 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, # Или 64 для векторов половинного размера
"input_type": "document", # Для эмбеддингов запросов см. ниже
"embedding_type": "float",
"input": [
"Your document text string goes here",
"You can send multiple texts",
"Each text can be up to 8192 tokens long"
]}'
Чтобы получить эмбеддинги запросов, установите параметр input_type
в значение query
вместо document
. Обратите внимание, что запросы имеют гораздо более строгие ограничения по размеру, чем документы. Они будут обрезаны до 32 токенов. Кодирование запроса всегда будет возвращать 32 токена, включая эмбеддинги для заполнения, если длина меньше 32 токенов.
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, # Или 64 для векторов половинного размера
"input_type": "query", # Это должно быть указано для эмбеддингов запросов
"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"
]}'

Для переранжирования
Чтобы использовать jina-colbert-v2 через Jina Reranker API, передавая один запрос и несколько документов и получая в ответ ранжируемые оценки совпадений, составьте ваш запрос следующим образом:
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."
]
}'
Обратите внимание на аргумент top_n
, который указывает количество документов, которые вы хотите получить. Например, если ваше приложение использует только лучшее совпадение, установите top_n
равным 1.
Для примеров кода на Python и других языках программирования и фреймворках перейдите на страницу Jina AI Embeddings API или выберите jina-colbert-v2 из выпадающего меню на странице Jina Reranker API.

tagЧерез Stanford ColBERT
Вы также можете использовать Jina ColBERT v2 как прямую замену для ColBERT v2 в библиотеке Stanford ColBERT. Просто укажите jinaai/jina-colbert-v2
в качестве источника модели:
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
и flash_attn
.tagЧерез RAGatouille
Jina ColBERT v2 также интегрирована в RAGatouille. Вы можете загрузить и использовать ее через метод 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
и flash_attn
.tagЧерез Qdrant
Начиная с версии 1.10, Qdrant добавил поддержку мультивекторных моделей и моделей с поздним взаимодействием. Существующие пользователи движков Qdrant, как локальных, так и управляемых облачных версий, могут воспользоваться прямой интеграцией jina-colbert-v2 с помощью клиента Qdrant.
Создание новой коллекции с использованием операции 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
необходима для использования моделей типа ColBERT в Qdrant.Вставка документов в мультивекторные коллекции
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]}
)
],
)
Запрос к коллекциям
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)
tagИтоги
Jina ColBERT v2 (jina-colbert-v2) основывается на высокой производительности jina-colbert-v1-en и расширяет свои возможности на широкий спектр мировых языков. Благодаря поддержке нескольких размеров эмбеддингов, jina-colbert-v2 позволяет пользователям настраивать баланс между точностью и эффективностью в соответствии с их конкретными случаями использования, потенциально обеспечивая значительную экономию времени и вычислительных затрат.
Эта модель объединяет все эти функции в единый пакет по конкурентоспособной цене, доступный через интуитивно понятный веб-API и совместимый с любой вычислительной средой, поддерживающей HTTP-запросы. Попробуйте сами с 1 миллионом бесплатных токенов, чтобы увидеть, как это может улучшить ваши приложения и процессы.