Pull to refresh

Comments 27

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

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

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

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

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

UFO just landed and posted this here

А практикуют 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 может дать результаты ещё лучше. Сделаем эксперименты в ближайшее время.

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

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

UFO just landed and posted this here

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

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

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

UFO just landed and posted this here

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

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

UFO just landed and posted this here

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

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

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

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

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

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

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

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

Sign up to leave a comment.