Как стать автором
Обновить

Векторное представление товаров Prod2Vec: как мы улучшили матчинг и избавились от кучи эмбеддингов

Время на прочтение5 мин
Количество просмотров16K
Всего голосов 30: ↑30 и ↓0+30
Комментарии27

Комментарии 27

Ага, хочется про Spark Structured Streaming на pySpark. Интересно, как модель засунули туда.

Хорошая статья, побольше бы про metric learning в проде. Кстати как вы инференс устроили через вектора + КНн + faiss?

Про metric learning: у нас есть модели, обученные на триплетах, где позитивами были уже найденные пары товаров (матчи). Или что-то более конкретное интересует?

Инференс примерно такой, да: кнн на векторах + faiss. Но есть крутые наработки, чтобы делать анн на цпу и параллелить на спарке, используя другие индексы.

Я наоборот рад) побольше бы таких статей)

НЛО прилетело и опубликовало эту надпись здесь

А практикуют SOM для такого рода задач? Нам же нужно его (SOM) применять уже на фичах, а для этого нужно векторизовать текста и атрибуты. А нам хотелось тренировать все как end-to-end. И кажется классические сети лучше всего подходят под это.
Вообще я не так хорошо знаком с примерами использования этого алгоритма, почитаю поподробнее, спасибо!

В последний раз, когда я у вас заказывал лампочки, эта система матчинга была сломана для них.

Я выбираю нужные мне лампочки, например GU10 220В. На их карточке есть переключалка, сколько в упаковке. Я, например, переключаю с 5 на 10, и получаю лампы другого вольтажа и другого размера (например 12-Вольтовые, больше размером, который не влезет в мои светильники). Обычно я успевал это заметить до заказа, но один раз мне привезли не те лампочки, и пришлось их возвращать.

Или, например, кувшины-фильтры для воды. Смотришь оценку, отзывы. А там на фотках вообще другой кувшин у людей.

Спасибо за статью. Есть пара вопросов.

А вы проводили ablation study? Типа что будет, если убирать по отдельности CE1, CE2, CE3, CE4?

Мне кажется, что конкатенация трех эмбеддингов возможно грубоватый метод. Можно было бы попробовать что-нибудь в духе Perceiver - иметь изначально какие-то обученные токены, и делать cross-attetion между этими токенами и эмбеддингами картинки и текста, а затем уже поверх них ставить ArcFace.

По отдельности не убирали CE_i, но было прилично экспериментов с \alpha (коэффициент весов при лоссах CE1, CE2, CE3; в частности, пробовали \alpha = 0, сеть тогда начинала учиться значительно медленнее)

По поводу конкатенации согласен, грубовато, хотя и работает. Вообще приходила мысль использовать attention при объединении эмбеддингов, но уже после выкатки модели. Кажется, что это очень интересный подход, и мы такое обязательно попробуем.
За статью спасибо! Я ее не видел, с удовольствием прочитаю.

Классная работа, интересно читать)

А почему все-таки отказались от metric learning для этой задачи и решили делать классификацию? Желание попробовать новые подходы?

Contrastive loss тут просится, конечно

Согласен, metric learning здесь приходит на ум первым. Но в этой задаче захотели попробовать новые подходы и посмотреть, как это будет работать.
Модели с contrastive/triplet loss у нас есть, и там мы уже более-менее знаем, какое качество у моделей.

Понятно, спасибо

А появилось ли какое-то понимание, удачный ли эксперимент вышел в сравнении с результатами через metric learning?

Не праздное любопытство, сам лёг в сторону создания мультимодальных эмбеддингов, только для аккаунтов в соцсетях)

Эксперимент удачный, но есть ощущение, что при грамотной настройке metric learning может дать результаты ещё лучше. Сделаем эксперименты в ближайшее время.

Вопрос возможно нубский, но вы баркоды и партнамберы сравнивать не пробовали?

Пробовали, это конечно работает! Но остаётся огромная часть товаров, где такой информации нет, но хочется находить матчи и там

НЛО прилетело и опубликовало эту надпись здесь

Сети, которые использовали в Prod2Vec стали значительно легче (resnet + tiny bert). Но вообще в тексте я писал про ускорение инференса ранжирующей модели, а не инференса самих сеток. Под ранжирующей моделью я имею в виду knn. Ускорение получилось за счёт двух вещей:

  1. Вместо векторов картинок и текстов, теперь есть один вектор prod2vec

  2. Размерность векторов стала меньше

НЛО прилетело и опубликовало эту надпись здесь

Да, это так, если мы возьмём лёгкие модели, то скорость инференса моделей мы получим примерно такую же, как и prod2vec

Но вот ранжирующая модель все равно будет работать дольше. Представьте мы делаем кнн: в случае prod2vec нам нужно сделать его на одних векторах. В случае нескольких моделей нужно сделать knn отдельно для картинок, отдельно для текстов

НЛО прилетело и опубликовало эту надпись здесь

Если просто сконкатенировать векторы картинок и текстов, кнн будет давать не очень хорошее качество. Картиночные и текстовые модели переводят данные в разные пространства, поэтому расстояние сконкаченным векторам не следует считать.

Можно попробовать какой-нибудь руклип бейзд. Насколько я знаю, он хорошо переводит картинки и тексты в одно пространство

Статья хорошая. Но есть ощущение, что сразу подвели к микроскопу и смотрите на предметное стекло. Можно целиком картинку - граф какие ребра и вертексы вы строите?

А можешь пояснить, что ты имеешь в виду под ребрами и вертексами? Про какой граф идет речь?

Ок, сорэ, за неясно выраженный вопрос. По ходу статьи пытался представить какие методы алгоритмического программирования вы используете, что неочевидно из текста. Предполагал алг. нахождения пути и тд . Но в ML конечно все непросто , наверное.

Можно представить эмбеддинги товаров как вершины графа. Тогда мы не ищем пути, а находим в этом графе ближайших соседей для каждой вершины. А далее найденные соседи дополнительно обрабатываются. Из алгоритмического программирования здесь именно поиск этих соседей: необязательно делать полный перебор всех вершин. Есть интересный алгоритм, где как раз используется теория графов (HNSW)

Самое главное — время инференса ранжирующей модели кратно уменьшилось:
используя эмбеддинги Prod2Vec вместо картиночных и текстовых, мы
получили ускорение более чем в три раза

Спасибо за статью! Расскажите подробнее пожалуйста, что за ранжирующая модель, и как вы от полученных кластеров похожих товаров перешли к матчингу одинаковых.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий