0Pricing
AI Agents · Урок

Многовекторный поиск (ColBERT)

Индексируйте несколько векторов для каждого документа (по одному на токен или фрагмент), чтобы сопоставление было более точным.

«Многовекторный поиск (ColBERT)» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Одного вектора недостаточно

Стандартный RAG преобразует каждый фрагмент в один вектор. Этот вектор усредняет всю информацию во фрагменте, из-за чего теряются тонкие смысловые сигналы.

При многовекторном поиске для каждого документа хранятся MULTIPLE векторов, что позволяет точнее сопоставлять результаты.

Идея ColBERT

ColBERT (Khattab и Zaharia, 2020) создаёт эмбеддинг для каждого TOKEN документа и каждого токена запроса, а затем вычисляет максимальное сходство:

score(q, d) = sum over q_token in q: max over d_token in d: cos(q_token, d_token)

Почему ColBERT превосходит одновекторный подход

  • Учитывает несколько аспектов документа, чего не может один вектор
  • Лучше работает с длинными документами
  • Обеспечивает более высокую полноту поиска по редким терминам

Стоимость ColBERT

Хранение одного вектора для каждого токена вместо одного для каждого фрагмента означает:

  • Если во фрагменте 500 токенов, хранилище увеличивается в 500 раз
  • При каждом поиске сравнивается гораздо больше пар

Квантизация и прореживание уменьшают этот объём в 10–50 раз, но стоимость всё равно остаётся высокой.

ColBERTv2

ColBERTv2 добавляет остаточное сжатие: токены объединяются в центроиды, а каждый токен хранится как (идентификатор центроида, небольшой остаток). Объём хранилища уменьшается в 50 раз.

Запуск ColBERT

Библиотека RAGatouille упрощает этот процесс:

# pip install ragatouille
from ragatouille import RAGPretrainedModel

rag = RAGPretrainedModel.from_pretrained('colbert-ir/colbertv2.0')
rag.index(collection=documents, index_name='my_corpus')

results = rag.search(query='What is the refund policy?', k=5)

Многовекторный поиск на практике

Помимо ColBERT, существуют и другие многовекторные подходы:

  • Родительский и дочерний элементы — создавайте эмбеддинги небольших фрагментов, а извлекайте крупные родительские элементы
  • Сводка и фрагменты — создавайте эмбеддинги и сводки документа, и отдельных фрагментов
  • Гипотетические вопросы — создавайте эмбеддинги пар вопросов и ответов, синтезированных для каждого документа

Hypothetical Questions Pattern

def index_with_hypos(doc):
    # Generate 5 plausible questions this doc could answer
    questions = llm.invoke(f'Write 5 questions answered by this doc:\n{doc}').content.split('\n')
    for q in questions:
        vector_db.add(embed(q), payload={'doc': doc, 'question': q})
# Now queries that match a stored hypothetical question retrieve the doc.

Parent-Child with LangChain

from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore

store = InMemoryStore()
retriever = ParentDocumentRetriever(
    vectorstore=child_vectorstore,
    docstore=store,
    child_splitter=child_splitter,    # small
    parent_splitter=parent_splitter   # large
)
retriever.add_documents(documents)
# Indexes small chunks, returns large parents.

Когда использовать ColBERT

  • Поиск с высокими требованиями к точности, например юридический или медицинский
  • Длинные документы
  • Когда допустимы затраты на хранение

Когда от него следует отказаться

  • Небольшие наборы документов
  • Пути, чувствительные к задержке
  • Проекты с жёсткими ограничениями стоимости

Гибридный поиск с BM25

Для максимальной полноты поиска объедините многовекторный поиск с классическим поиском по ключевым словам BM25. Используйте слияние по обратным рангам, чтобы объединить результаты.

Компромисс при использовании ColBERT

В чём заключается главный компромисс многовекторного поиска в стиле ColBERT?

Повторение

Один вектор на фрагмент приводит к потере информации. ColBERT хранит векторы для каждого токена, повышая точность. RAGatouille упрощает использование этого подхода. Применяйте его, когда важна полнота поиска и затраты допустимы.

Часто задаваемые вопросы

Урок «Многовекторный поиск (ColBERT)» бесплатный?

Да — полный текст урока «Многовекторный поиск (ColBERT)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Многовекторный поиск (ColBERT)»?

Индексируйте несколько векторов для каждого документа (по одному на токен или фрагмент), чтобы сопоставление было более точным. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Многовекторный поиск (ColBERT)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Переранжирование с помощью кросс-энкодеров
  2. HyDE: гипотетические эмбеддинги документов
  3. Многовекторный поиск (ColBERT)
  4. Оценка RAG (RAGAS, Recall@K)
← Назад к AI Agents