Pinterest: один эмбеддинг вместо трёх — +46,7% сохранений в Lens и втрое меньше ML-систем на поддержке
В офлайн-оценке асессорами универсальный эмбеддинг поднял точность precision@5 на +22,2% в Flashlight, +110,1% в Lens и +72,1% в Shop-the-Look относительно специализированных моделей. Самый большой прирост получил самый сложный домен — Lens: мультизадачное обучение на смешанных данных дало именно то обобщение, которого не хватало камерным фотографиям. Статья честно показывает и дисперсию: внутри Shop the Look по категориям разброс от −33,3% до +249,7% — усреднённый выигрыш не означает выигрыша везде. Онлайн A/B-тест в Lens подтвердил офлайн-картину ростом всех продуктовых метрик: сохранения (repins) +46,7%, переходы +35,0%, раскрытия карточек +32,7%, доля вовлекающихся пользователей — от +16,3% до +26,7%. Операционный итог: вместо трёх моделей, трёх пайплайнов обучения и трёх инфраструктур извлечения команда поддерживает одну; в статье прямо говорится, что развёртывание универсального эмбеддинга «кардинально снизило операционные и инженерные затраты» — при одновременном росте качества. На наш взгляд, ключевой урок кейса контринтуитивен: консолидация моделей обычно воспринимается как компромисс «проще, но хуже», а у Pinterest универсальная модель обыграла специалистов на их собственных задачах. Механика понятна из ML-теории — мультизадачность работает как регуляризация, а данные одного продукта становятся аугментацией для другого, — но масштаб эффекта (+110% в Lens) стал возможен потому, что задачи оказались достаточно родственными, а самый слабый домен получил больше всего «чужих» данных. Переносить вывод «один эмбеддинг всегда лучше» на любой набор задач мы бы не стали: сама статья с разбросом по категориям Shop the Look это и демонстрирует. Второе наше наблюдение: этот кейс — про экономику ML-платформ, а не только про качество. При 600+ миллионах визуальных поисков в месяц каждая лишняя модель — это переиндексации миллиардов изображений и дублирующий сервинг; втрое меньший парк систем ускоряет каждую следующую итерацию. Консолидация инфраструктуры — из тех редких инвестиций, что одновременно снижают затраты и повышают скорость команды; отметим лишь, что онлайн-цифры опубликованы только для Lens, и все результаты — самоотчёт компании.
- Learning a Unified Embedding for Visual Search at Pinterest (KDD 2019) — Pinterest / arXiv (Zhai et al.), 2019-08-05
- Unifying visual embeddings for visual search at Pinterest — Pinterest Engineering Blog (Andrew Zhai), 2019-08-08
- Visual Discovery at Pinterest (история продуктов: Related Pins 2014, Similar Looks 2015, Flashlight 2016, Lens 2017) — Pinterest / arXiv (Zhai, Kislyuk et al.), 2017-02-15
Контекст
Pinterest — платформа, для которой визуальный поиск не фича, а суть продукта: пользователь приходит искать идеи, у которых часто нет словесного описания. Компания строила это направление годами: Related Pins (2014), Similar Looks (2015), Flashlight (2016) — поиск похожего внутри любого пина, Lens (2017) — поиск по фотографии с камеры телефона, а в 2019 году — автоматизированный Shop the Look, находящий конкретные товары в интерьере или образе. К моменту публикации кейса платформа насчитывала 250+ миллионов активных пользователей в месяц, корпус из 200+ миллиардов «идей», а визуальный поиск обслуживал более 10 внутренних клиентов-продуктов. Масштаб запросов сама команда оценивала в статье на KDD 2019 как 600+ миллионов визуальных поисков в месяц (в сопутствующем блог-посте — осторожнее: «сотни миллионов»).
Оборотная сторона этой эволюции — типичный для быстрорастущих ML-организаций технический долг. Каждый новый продукт запускался со своей специализированной моделью эмбеддингов: визуальный кроппер 2015 года работал на Caffe и VGG16, Shop the Look 2018-го — уже на PyTorch и SE-ResNeXt. Стеки, датасеты и векторные пространства разошлись; командам было проще завести очередную «модель под задачу», чем улучшать общую, — и парк специализированных эмбеддингов рос.
Решение этой проблемы команда визуального поиска под руководством Эндрю Чжая описала в статье «Learning a Unified Embedding for Visual Search at Pinterest», принятой на KDD 2019, и в разборе в инженерном блоге. Это одна из первых детальных публикаций о консолидации нескольких боевых эмбеддингов в один универсальный — с полными цифрами офлайн- и онлайн-экспериментов.
Проблема
Три продукта визуального поиска — Flashlight, Lens и Shop the Look — жили на трёх отдельных специализированных эмбеддингах, и это означало утроенные затраты по всей цепочке. Каждую модель нужно обучать и версионировать отдельно; под каждую — держать собственную инфраструктуру извлечения и хранения; и главное, при каждом обновлении любой из моделей — переиндексировать миллиарды изображений каталога именно под её векторное пространство. Стоимость хранения и сервинга росла линейно с числом моделей, а скорость итераций падала: команда тратила ресурсы на поддержку зоопарка, а не на улучшение качества.
Была и более тонкая проблема: улучшения не переносились. Прогресс в модели Flashlight никак не помогал Lens и наоборот — знания, выученные на одном продукте, оставались заперты в его эмбеддинге. При этом задачи объективно разные, что и оправдывало исходную специализацию. Flashlight ищет похожее среди «чистых» каталожных изображений по сигналам вовлечённости. Lens решает задачу кратно сложнее: фотография с камеры — с бытовым освещением, случайным ракурсом и шумом — должна находить соответствия в каталожном домене; это классический domain shift. Shop the Look требует точности на уровне конкретного товара: найти не «похожий стул», а именно эту модель.
Вопрос, на который отвечала команда: может ли один универсальный эмбеддинг, обученный сразу на задачах всех трёх продуктов, сравняться со специализированными моделями — или неизбежна деградация качества в обмен на операционную простоту?
Решение
Команда обучила один универсальный эмбеддинг мультизадачным метрическим обучением (multi-task metric learning). База — свёрточная сеть SE-ResNeXt101, предобученная на ImageNet; поверх общего ствола — ветки под каждую задачу: полносвязный слой и классификационный softmax-лосс. Обучение шло одновременно на датасетах всех трёх продуктов: 800 тысяч изображений Flashlight (15 тысяч семантических классов, собранных по сигналам вовлечённости), 540 тысяч Lens (2 тысячи классов, размеченных людьми, смешанные домены — от каталожных картинок до камерных фото) и 340 тысяч Shop the Look (189 товарных классов плюс 50 тысяч instance-меток конкретных товаров).
Два инженерных модуля сделали схему практичной на масштабе Pinterest. Модуль сабсэмплинга позволил обучать классификацию на десятках тысяч классов, храня банк прокси-векторов на CPU и подгружая в GPU-память только нужную подвыборку. Модуль бинаризации (с заменой LayerNorm на GroupNorm, что оказалось критично для совместимости с мультизадачностью) сжимает вектор в бинарный код — именно бинарные эмбеддинги идут в продакшен, кратно снижая стоимость хранения и скорость поиска по миллиардам изображений. Инфраструктура обучения — PyTorch DistributedDataParallel с mixed-precision (FP16, Apex): типовой прогон — 9 эпох на восьми Tesla V100, оптимизатор SGD с momentum 0,9.
Принципиальный продуктовый выигрыш архитектуры: единое векторное пространство обслуживает все сценарии поиска через общую инфраструктуру извлечения. Одна переиндексация каталога — вместо трёх; одно улучшение модели автоматически достаётся всем продуктам и более чем десяти внутренним клиентам визуального поиска.
Проверка велась на двух уровнях. Офлайн — и по автоматическим метрикам на бинарных эмбеддингах (например, precision@1 для Shop the Look вырос с 33,0% у специализированной модели до 52,8% у универсальной), и по оценкам асессоров на реальных запросах. Онлайн — A/B-тест в продукте Lens, самом сложном по домену: измерялись сохранения (repins), переходы, раскрытия карточек и доля вовлекающихся пользователей.
Результат
В офлайн-оценке асессорами универсальный эмбеддинг поднял точность precision@5 на +22,2% в Flashlight, +110,1% в Lens и +72,1% в Shop-the-Look относительно специализированных моделей. Самый большой прирост получил самый сложный домен — Lens: мультизадачное обучение на смешанных данных дало именно то обобщение, которого не хватало камерным фотографиям. Статья честно показывает и дисперсию: внутри Shop the Look по категориям разброс от −33,3% до +249,7% — усреднённый выигрыш не означает выигрыша везде.
Онлайн A/B-тест в Lens подтвердил офлайн-картину ростом всех продуктовых метрик: сохранения (repins) +46,7%, переходы +35,0%, раскрытия карточек +32,7%, доля вовлекающихся пользователей — от +16,3% до +26,7%. Операционный итог: вместо трёх моделей, трёх пайплайнов обучения и трёх инфраструктур извлечения команда поддерживает одну; в статье прямо говорится, что развёртывание универсального эмбеддинга «кардинально снизило операционные и инженерные затраты» — при одновременном росте качества.
На наш взгляд, ключевой урок кейса контринтуитивен: консолидация моделей обычно воспринимается как компромисс «проще, но хуже», а у Pinterest универсальная модель обыграла специалистов на их собственных задачах. Механика понятна из ML-теории — мультизадачность работает как регуляризация, а данные одного продукта становятся аугментацией для другого, — но масштаб эффекта (+110% в Lens) стал возможен потому, что задачи оказались достаточно родственными, а самый слабый домен получил больше всего «чужих» данных. Переносить вывод «один эмбеддинг всегда лучше» на любой набор задач мы бы не стали: сама статья с разбросом по категориям Shop the Look это и демонстрирует.
Второе наше наблюдение: этот кейс — про экономику ML-платформ, а не только про качество. При 600+ миллионах визуальных поисков в месяц каждая лишняя модель — это переиндексации миллиардов изображений и дублирующий сервинг; втрое меньший парк систем ускоряет каждую следующую итерацию. Консолидация инфраструктуры — из тех редких инвестиций, что одновременно снижают затраты и повышают скорость команды; отметим лишь, что онлайн-цифры опубликованы только для Lens, и все результаты — самоотчёт компании.
Уроки для индустрии
- Консолидация моделей — это и качество, и экономика: один мультизадачный эмбеддинг обыграл три специализированных по релевантности и втрое сократил поддерживаемую инфраструктуру.
- Мультизадачное обучение работает как регуляризация: данные одного продукта улучшают качество для остальных — самый большой прирост получил самый «сложный» домен (Lens, +110% precision@5).
- Смотрите на дисперсию, а не только на среднее: внутри Shop the Look разброс по категориям — от −33,3% до +249,7%; усреднённый выигрыш не гарантирует выигрыша в каждом сегменте.
- Проверяйте и офлайн (асессоры), и онлайн (A/B): у Pinterest прирост точности подтвердился ростом всех продуктовых метрик вовлечённости.
- Бинаризация эмбеддингов — недооценённый рычаг экономики: бинарные коды кратно удешевляют хранение и поиск по миллиардам изображений; дьявол в деталях (GroupNorm вместо LayerNorm).
- Чем меньше моделей, тем быстрее итерации: одно улучшение эмбеддинга автоматически прокачивает все продукты визуального поиска и 10+ внутренних клиентов сразу.
- Инвестиции в унификацию окупаются на масштабе: при 600M+ визуальных поисков в месяц каждая переиндексация и каждая лишняя модель стоят очень дорого.
Частые вопросы
Что дал Pinterest переход на единый визуальный эмбеддинг?
Рост качества всех трёх продуктов визуального поиска (precision@5: +22% Flashlight, +110% Lens, +72% Shop-the-Look), рост вовлечённости в A/B-тесте Lens (+46,7% сохранений, +35% переходов) и кратное снижение затрат на инфраструктуру — одна модель вместо трёх.
Как Pinterest обучил один эмбеддинг под три разных продукта?
Мультизадачным метрическим обучением: сеть SE-ResNeXt101 с общим стволом и ветками под задачи учится одновременно на данных Flashlight (800K изображений, 15K классов), Lens (540K, 2K классов) и Shop-the-Look (340K, 189 классов + 50K instance-меток), формируя общее векторное пространство.
Почему универсальная модель оказалась лучше специализированных?
Мультизадачное обучение действует как регуляризация: данные каждого продукта становятся дополнительным сигналом для остальных. Больше всего выиграл самый сложный домен — Lens (+110% precision@5), где фотографиям с камеры не хватало разнообразия обучающих данных.
Как единый эмбеддинг работает на масштабе миллиардов изображений?
В продакшен идут бинаризованные векторы (модуль бинаризации с GroupNorm), что кратно снижает стоимость хранения и ускоряет поиск, а модуль сабсэмплинга с прокси-банком на CPU позволяет обучать классификацию на десятках тысяч классов на восьми GPU Tesla V100.
Каков масштаб визуального поиска в Pinterest?
По данным статьи KDD 2019 — более 600 миллионов визуальных поисков в месяц при 250+ миллионах активных пользователей и корпусе из 200+ миллиардов пинов; блог-пост оценивал масштаб осторожнее — «сотни миллионов» поисков в месяц.