Переранжирование с помощью кросс-энкодеров
Получите 50 лучших результатов с помощью недорогих эмбеддингов, затем переранжируйте 5 лучших медленным кросс-энкодером для большей точности.
«Переранжирование с помощью кросс-энкодеров» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Зачем выполнять повторное ранжирование?
Сходство эмбеддингов — это быстрый предварительный этап с низкой точностью. Он часто возвращает фрагменты, содержащие те же KEYWORDS, что и запрос, но на самом деле не относящиеся к QUESTION.
Модель повторного ранжирования получает пары (запрос, фрагмент) и вычисляет гораздо более точную оценку релевантности.
Двуэнкодер и кросс-энкодер
Две архитектуры для определения сходства текстов:
- Двуэнкодер — отдельно кодирует запрос и фрагмент и вычисляет косинусное сходство. Работает быстро: векторизацию можно выполнить один раз и переиспользовать, но точность ниже.
- Кросс-энкодер — совместно обрабатывает пару (запрос, фрагмент) моделью. Работает медленно, поскольку обрабатывает каждую пару отдельно, но обеспечивает гораздо более высокую точность.
Двухэтапный поиск
Шаблон, объединяющий эти подходы:
- Двуэнкодер быстро извлекает 50 наиболее подходящих кандидатов
- Кросс-энкодер выполняет повторное ранжирование и оставляет 5 лучших
- Пять лучших фрагментов передаются в запрос LLM
Вы получаете скорость двуэнкодера и точность кросс-энкодера.
Использование Cohere Rerank
Самый простой кросс-энкодер для промышленной эксплуатации:
import cohere
co = cohere.Client(COHERE_KEY)
results = co.rerank(
model='rerank-multilingual-v3.0',
query='What is the refund policy?',
documents=top_50_chunks,
top_n=5
)
for r in results.results:
print(r.index, r.relevance_score, top_50_chunks[r.index])Ранжировщики с открытым исходным кодом
BGE Reranker — ведущий вариант с открытым исходным кодом:
from sentence_transformers import CrossEncoder
model = CrossEncoder('BAAI/bge-reranker-base')
pairs = [(query, chunk) for chunk in candidates]
scores = model.predict(pairs)
ranked = [c for _, c in sorted(zip(scores, candidates), reverse=True)][:5]Voyage Rerank
import voyageai
vo = voyageai.Client(api_key=VOYAGE_KEY)
res = vo.rerank(
query=query,
documents=candidates,
model='rerank-2',
top_k=5
)Когда повторное ранжирование помогает
- Длинные списки кандидатов (50–200)
- Незначительные различия в релевантности
- Запросы с отрицанием или сравнением
- Многоязычные случаи
Когда оно не помогает
- Уже узкие наборы кандидатов (5 лучших от двуэнкодера)
- Запросы, критичные к задержке, но не требующие высокой точности
Компромисс между стоимостью и качеством
Кросс-энкодеры выполняют отдельный вывод для каждой пары. Повторное ранжирование 50 кандидатов означает 50 обращений к модели: с Cohere/Voyage это недорого, а при самостоятельном размещении модели работает медленнее.
Для повторного ранжирования обычно достаточно 50–200 кандидатов; большее число редко оправдывает затраты.
Integrating into LangChain
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank
compressor = CohereRerank(top_n=5)
retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=vector_retriever
)Integrating into LlamaIndex
from llama_index.postprocessor.cohere_rerank import CohereRerank
rerank = CohereRerank(top_n=5)
query_engine = index.as_query_engine(
similarity_top_k=20,
node_postprocessors=[rerank]
)Повторное ранжирование с учётом разнообразия
Иногда нужны разнообразные результаты, а не только набравшие максимальные баллы: среди последних могут быть почти дубликаты. MMR (максимальная маржинальная релевантность) уравновешивает оценку и разнообразие:
from langchain.vectorstores import Chroma
results = store.max_marginal_relevance_search(query, k=5, fetch_k=20, lambda_mult=0.5)Двухэтапный шаблон
Зачем использовать двуэнкодер и кросс-энкодер вместо одного из них?
Повторение
Двуэнкодер извлекает 50 результатов, а кросс-энкодер повторно ранжирует их и оставляет 5. В промышленной эксплуатации используйте Cohere или Voyage, а BGE OSS — при самостоятельном размещении. Это значительно повышает точность при умеренном увеличении стоимости.
Часто задаваемые вопросы
Урок «Переранжирование с помощью кросс-энкодеров» бесплатный?
Да — полный текст урока «Переранжирование с помощью кросс-энкодеров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Переранжирование с помощью кросс-энкодеров»?
Получите 50 лучших результатов с помощью недорогих эмбеддингов, затем переранжируйте 5 лучших медленным кросс-энкодером для большей точности. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Переранжирование с помощью кросс-энкодеров»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Переранжирование с помощью кросс-энкодеров
- HyDE: гипотетические эмбеддинги документов
- Многовекторный поиск (ColBERT)
- Оценка RAG (RAGAS, Recall@K)