Sobes.tech
Назад к вопросам
Middle — Senior
11

Что такое hard negative mining в ранжировании?

Компании, где спрашивали
Самолёт

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Hard negative mining — это способ обучения ранжировщика, при котором модель дополнительно учат на «трудных» отрицательных примерах, то есть на объектах, которые она путает с релевантными. Это помогает быстрее улучшать качество сортировки там, где модель чаще всего ошибается. В поиске и LTR такой подход обычно дает больший эффект, чем обучение на случайных негативных примерах.

Определение:

Hard negative mining — это стратегия отбора негативных примеров для обучения, где в датасет специально добавляют не любые отрицательные объекты, а те, которые модель считает похожими на положительные или ранжирует слишком высоко.
Смысл в том, чтобы не тратить обучение на «легкие» отрицательные примеры, которые и так правильно распознаются, а фокусироваться на границе между релевантным и нерелевантным.

Пример использования:

В поисковой системе для запроса «купить ноутбук» положительными считаются результаты, которые пользователь действительно выбирает. Среди отрицательных документов есть очевидно нерелевантные, например «ремонт стиральных машин», и есть трудные, например карточка ноутбука с плохими характеристиками или нерелевантный, но очень популярный товар.
При hard negative mining в обучение чаще берут именно такие «почти хорошие» документы, потому что модель чаще путается именно с ними.

# Псевдокод отбора hard negatives для ранжирования

for query in train_queries:
    positives = get_positive_docs(query)
    candidates = retrieve_top_k(query, k=100)   # документы, которые модель/поиск считает релевантными
    negatives = [doc for doc in candidates if doc not in positives]

    hard_negatives = rank_by_model_score(negatives)[:10]  # самые высоко оцененные как негативы
    train_batch = positives + hard_negatives
    update_ranker(query, train_batch)

Пояснение кода:

Код не требуется, но пример показывает типичный процесс:

  1. Для запроса берутся положительные документы — те, что должны ранжироваться высоко.
  2. Затем система получает набор кандидатов, обычно через retrieval или текущую версию модели.
  3. Из кандидатов исключаются уже известные позитивы.
  4. Среди оставшихся негативов выбираются те, которые модель поставила выше остальных — это и есть hard negatives.
  5. На этих примерах модель дообучается, чтобы научиться лучше различать похожие объекты.

Ключевые моменты:

  • Hard negatives — это не случайные, а «сложные» отрицательные примеры.
  • Они полезны потому, что лучше отражают реальные ошибки модели.
  • В ранжировании это особенно важно, так как качество определяется именно верхом выдачи.
  • Слишком агрессивный отбор hard negatives может добавить шум, если в negatives попадают скрыто релевантные документы.
  • Обычно метод используют вместе с retrieval/mining pipeline и периодически обновляют по мере улучшения модели.