Как обучать sentence embeddings
Нужно получить хорошие embeddings предложений для retrieval/semantic search. Какие данные и loss использовать?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Нужны positive/negative пары или triplets; типичный loss - contrastive / multiple negatives ranking loss / triplet loss.
Полный разбор
Для semantic retrieval модель должна сближать тексты с одинаковым смыслом и разносить нерелевантные. Данные могут быть query-document клики, пары вопрос-ответ, paraphrase pairs, NLI entailment pairs или доменная разметка релевантности.
Один из практичных вариантов - bi-encoder: кодируем query и document отдельно, считаем cosine/dot product. Loss может быть multiple negatives ranking loss: правильный документ в batch является positive, остальные документы в batch - negatives. Для более контролируемой постановки используют triplet loss: anchor, positive, negative.
Качество embeddings нужно проверять retrieval-метриками: Recall@K, MRR, NDCG, а не только loss на train.
Типичные ошибки
- Обучать embeddings только классификацией без retrieval eval.
- Не подбирать hard negatives.
- Смешивать cross-encoder и bi-encoder inference cost.
Как отвечать на собеседовании
- Назови multiple negatives ranking loss.
- Обязательно скажи про hard negatives и Recall@K.