Как создавать релевантные и достоверные негативные пары для обучения модели
Что проверяют
Понимаете ли вы, что качество эмбеддинговой или ранжирующей модели во многом определяют негативы, и чувствуете ли грань между слишком лёгкими и ложными. Следом спрашивают, как отличить трудный негатив от непомеченного позитива.
Как отвечать
Контекст: контрастивное обучение для поиска, рекомендаций и матчинга, где модель приближает запрос к релевантному документу и отдаляет от нерелевантного. Источники негативов:
- случайные: берутся из корпуса наугад. Дёшево, но почти все слишком лёгкие, и модель быстро перестаёт на них учиться;
- in-batch: позитивы других примеров батча служат негативами, так устроены InfoNCE и
MultipleNegativesRankingLossв sentence-transformers. Больше батч, больше негативов, отсюда приёмы вроде GradCache (CachedMultipleNegativesRankingLoss); - трудные (hard negatives): похожие, но нерелевантные. Добываются через BM25 или текущую модель: берёте топ выдачи без известных позитивов. В sentence-transformers для этого есть
mine_hard_negatives. Они и дают основной прирост; - из поведения: показанное, но не кликнутое. Осторожно: отсутствие клика не значит нерелевантность, мешает позиционный сдвиг.
Главный риск трудных негативов это ложные негативы: в топе много релевантных документов, которые просто не размечены. Защита: пропускать самые верхние позиции, отсекать кандидатов, чьё сходство слишком близко к сходству позитива (например, выше 95% от него), фильтровать кросс-энкодером или LLM-разметчиком и выборочно проверять руками.
Качество оценивайте не по лоссу, а по метрикам ранжирования на отложенной выборке с честной разметкой: Recall@k, MRR, nDCG. Варианты майнинга сравнивайте на одном тесте и следите, чтобы документы из теста не утекали в обучение.
Где спотыкаются
Ограничиваются случайными негативами. Лосс быстро падает, а модель плохо различает близкие документы, ради которых всё затевалось.
Берут топ-1 из BM25 как гарантированный негатив. Там часто оказывается дубль или перефраз позитива, и модель учат отталкивать правильные ответы.
Сводят задачу к дисбалансу классов и говорят про оверсэмплинг или SMOTE. Проблема здесь не в пропорции, а в информативности и корректности каждой пары.