Как обрабатывать ситуацию, когда один товар продается разными продавцами
Что проверяют
В data-ml это вопрос про матчинг товаров: как понять, что десять карточек от разных продавцов описывают один товар, и склеить их. Интервьюер смотрит, умеете ли вы разбить задачу на этапы и понимаете ли, какая ошибка дороже. Следом спрашивают, откуда брать разметку и какой оффер показать первым.
Как отвечать
Каркас пайплайна:
- нормализация: бренд, модель, объём памяти, цвет и единицы измерения приводятся к одному виду, атрибуты извлекаются из названия;
- точное совпадение: штрихкод GTIN/EAN или артикул производителя склеивает часть офферов сразу. Продавцы ставят чужие коды и пропускают их, поэтому это сильный признак, а не истина;
- генерация кандидатов (blocking): сравнивать всё со всем нельзя, это квадрат от числа офферов. Кандидатов отбирают внутри категории и бренда или ближайшими соседями по эмбеддингам названия и картинки в ANN-индексе;
- парный классификатор: градиентный бустинг на признаках вроде похожести текстов, совпадения атрибутов, отношения цен и близости картинок, либо кросс-энкодер по паре описаний. На выходе вероятность того, что это один товар;
- сборка групп: пары объединяются в кластеры. Простые компоненты связности опасны: цепочка уверенных пар склеивает разные модели, поэтому нужны порог и проверка согласованности внутри кластера;
- модерация: неуверенные пары уходят людям, их решения становятся разметкой.
Подчеркните асимметрию ошибок: ложная склейка хуже пропуска. Покупатель, получивший другую модель, это возврат и жалоба, а дубль карточки лишь снижает удобство. Поэтому оптимизируют точность при приемлемой полноте и мерят её и на парах, и на кластерах. Внутри собранной карточки офферы ранжируют по цене, сроку доставки, рейтингу продавца и доле отмен.
Где спотыкаются
Предлагают склеивать только по штрихкоду. На реальной площадке это покрывает меньшую часть офферов и тащит ошибки самих продавцов.
Не различают вариант и другой товар. Телефон на 128 и на 256 ГБ часто живёт в одной карточке с вариантами, но это разные офферы, и такие пары нужны в обучении как трудные негативы.
Молчат про масштаб. Без блокинга парное сравнение миллионов офферов просто не посчитается.