Урок 0012 · Retrieval глубже: rerank, rewrite, HyDE

Полный набор приёмов улучшения поиска и как их комбинировать. Продолжение урока 0002 (база) и 0003 (Contextual Retrieval).

Цель урока Назвать 5 рычагов retrieval (chunking, embed, BM25, rewrite, rerank), объяснить, что менять при низком recall vs низком precision.

1. Карта рычагов retrieval

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

РычагЧто меняетЧинит
1. ChunkingГраницы и размер чанковrecall (мысль разрезана)
2. Embedding-модельКак кодируется смыслrecall (перефразы)
3. BM25 / hybridТочные строкиrecall (идентификаторы)
4. Query rewrite / expansionКак выглядит запросrecall (местоимения, домен)
5. RerankingПорядок после поискаprecision (мусор в top-k)

2. Query rewrite и expansion

Проблема: пользовательский запрос часто плох для поиска: «а какая там комиссия, если перевести в другой банк?» — местоимения, разговорная речь, нет доменных терминов.

Rewrite: LLM переписывает запрос для поиска: → «comisión transferencia interbancaria SPEI». Отдельный дешёвый вызов перед ретривером.

Query expansion: один запрос превращается в несколько вариантов, ищется каждый, результаты объединяются (multi-query). Ловит разные формулировки.

Правило: rewrite/expansion включают ТОЛЬКО если eval доказал выигрыш (урок 0002). Каждый вызов — латентность и стоимость.

3. HyDE — Hypothetical Document Embeddings

Идея: вместо поиска по запросу — сгенерировать гипотетический «идеальный ответ» на запрос и искать ПО НЕМУ. Ответ ближе по эмбеддингам к реальным документам, чем вопрос.[55]

Пример: запрос «какие документы нужны для кредита?» → LLM генерирует «Для получения кредита необходимы: паспорт, справка о доходах…» → этот текст эмбеддится и ищется.

Подводный камень: гипотетический документ может содержать выдумки. Эмбеддинг-бутленек фильтрует часть, но не всё.[55] Плюс — латентность на каждый запрос.

Когда: когда запрос и документы написаны по-разному (вопрос разговорный, документы формальные). Проверяется только A/B на golden set.

Источник: HyDE paper.

4. Reranking — главный рычаг precision

Проблема: гибридный поиск вернул top-20, среди них мусор. Модель получит всё и запутается.

Решение: маленькая отдельная модель-реранкер (Cohere Rerank, Voyage reranker) пересортировывает top-20 по релевантности к запросу, оставляет top-5.

Цифры из Contextual Retrieval: rerank добавил −67% → −67%+ (5.7% → 1.9% с contextual + rerank).[26]

Почему это работает: реранкер — кросс-энкодер: видит запрос И документ ВМЕСТЕ (в отличие от би-энкодера эмбеддингов, который кодирует по отдельности). Это дороже на один запрос, но точнее. Поэтому реранкят только top-20, не весь корпус.

Trade-off: чем больше кандидатов реранкится, тем лучше recall, но выше латентность. Экспериментируй (Anthropic прямо советуют).[26]

5. Embedding-модели: что менять

6. Как комбинировать: порядок действий

  1. Замерь baseline — recall@k, precision@k, MRR на golden set (урок 0002).
  2. Низкий recall? → chunking (границы), hybrid (BM25 добавить), rewrite/expansion, потом эмбеддинг.
  3. Низкая precision? → reranker, metadata filter, меньше k.
  4. Чанк без контекста? → Contextual Retrieval (урок 0003).
  5. Каждый шаг — A/B на golden set, один рычаг за раз.

Фраза: «Сначала дешёвые рычаги: chunking, hybrid, rewrite. Rerank — когда precision страдает. Embedding-модель меняю последней — это переиндексация. Каждый шаг проверяю на golden set».

Проверь себя

Rerank чинит проблему?

HyDE ищет по чему?

Эмбеддинг меняют в последнюю очередь, потому что?

Видео и статьи

Первоисточник урока Jason Liu — Levels of RAG — как наращивать сложность поиска по шагам.

Sources: