Один vector теряет детали

Dense embedding сжимает passage в одну точку. Late interaction хранит representations нескольких токенов и сопоставляет query с документом на более тонком уровне.

Двухэтапная схема

BM25 или dense retrieval быстро создаёт candidates. ColBERT reranks только небольшой pool; запуск по всему корпусу обычно слишком дорог.

Multivectors и MaxSim

Документ хранит набор vectors, а score агрегирует лучшие token-level совпадения. Реализация и нормализация зависят от модели, поэтому score не переносится между версиями.

Хранилище и quantization

Много vectors увеличивает RAM и disk. Compression снижает footprint, но требует сравнения recall и latency на вашем наборе.

Candidate_k и final_k

Малый pool ограничивает recall, большой увеличивает стоимость late interaction. Подбирайте оба параметра совместно с context budget.

Eval

Измеряйте nDCG/MRR, answer correctness, p95 и стоимость. Отдельно смотрите длинные passages, редкие термины и multilingual queries.

Какой первый шаг?
Зафиксировать корпус, реальные запросы и baseline; без версий сравнение невоспроизводимо.
Что измерять?
Retrieval relevance, grounded correctness, p95 latency, стоимость и ошибки по сегментам.
Можно ли доверить оценку одной LLM?
Нет. LLM judge полезен как сигнал, но критические выборки требуют детерминированных проверок и экспертной разметки.
Как обновлять систему?
Через новую версию, offline eval, shadow, canary и заранее подготовленный rollback.
Что делать с чувствительными данными?
Минимизировать, ограничивать доступ, применять ACL до retrieval и задавать retention для traces и eval-наборов.
Как избежать каннибализации экспериментов?
Менять один слой за раз и хранить control, candidate, corpus version и сегментированные результаты.
← Все статьи блога