Как построить векторную базу кандидатов и использовать метрическое обучение для поиска похожих товаров
Что проверяют
Умеете ли вы собрать систему поиска похожих товаров целиком: от обучения эмбеддингов до быстрого поиска и оценки качества. Вопрос поведенческий, поэтому ждут рассказа о своём проекте, а следом спросят, как вы выбирали негативы и чем мерили качество кандидатов.
Как отвечать
Стройте ответ как историю по этапам и подставляйте свои цифры: размер каталога, задержку, прирост метрик.
- постановка: база кандидатов это первый этап двухступенчатой схемы. Она быстро отбирает сотни похожих товаров из миллионов, а тяжёлый ранжировщик потом их переставляет;
- метрическое обучение: модель учится так, чтобы похожие товары оказывались рядом в пространстве эмбеддингов. Архитектура обычно двухбашенная или сиамская, функция потерь contrastive, triplet или InfoNCE с негативами внутри батча;
- разметка пар: позитивы берут из поведения (совместные просмотры, покупки в одной сессии) или из совпадения атрибутов, негативы из случайных товаров плюс «трудные», похожие, но нерелевантные;
- признаки: текст и картинки кодируют предобученными энкодерами (текстовый трансформер, CLIP-подобная модель) и дообучают на своих парах;
- индекс: векторы нормализуют и кладут в ANN-индекс: HNSW или IVF-PQ в FAISS, либо в Qdrant, Milvus, pgvector. Параметры вроде
ef_searchподбирают по компромиссу полноты и задержки; - оценка: офлайн recall@k и nDCG на отложенных сессиях, затем A/B-тест на CTR и конверсии.
Если такого проекта у вас не было, скажите прямо и разберите, как построили бы систему на знакомых данных. Это честнее выдуманных процентов.
Где спотыкаются
Называют KNN алгоритмом метрического обучения. KNN только ищет соседей в готовом пространстве, а учит это пространство функция потерь на парах или тройках.
Берут только случайные негативы. Модель быстро учится отличать обувь от холодильников, а на похожих товарах качество не растёт.
Не проверяют полноту самого ANN-индекса относительно точного поиска и забывают переиндексировать каталог при обновлении модели: старые и новые векторы в одном индексе несравнимы.