Comments 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?
Не праздное любопытство, сам лёг в сторону создания мультимодальных эмбеддингов, только для аккаунтов в соцсетях)
Вопрос возможно нубский, но вы баркоды и партнамберы сравнивать не пробовали?
Сети, которые использовали в Prod2Vec стали значительно легче (resnet + tiny bert). Но вообще в тексте я писал про ускорение инференса ранжирующей модели, а не инференса самих сеток. Под ранжирующей моделью я имею в виду knn. Ускорение получилось за счёт двух вещей:
Вместо векторов картинок и текстов, теперь есть один вектор prod2vec
Размерность векторов стала меньше
Да, это так, если мы возьмём лёгкие модели, то скорость инференса моделей мы получим примерно такую же, как и prod2vec
Но вот ранжирующая модель все равно будет работать дольше. Представьте мы делаем кнн: в случае prod2vec нам нужно сделать его на одних векторах. В случае нескольких моделей нужно сделать knn отдельно для картинок, отдельно для текстов
Если просто сконкатенировать векторы картинок и текстов, кнн будет давать не очень хорошее качество. Картиночные и текстовые модели переводят данные в разные пространства, поэтому расстояние сконкаченным векторам не следует считать.
Можно попробовать какой-нибудь руклип бейзд. Насколько я знаю, он хорошо переводит картинки и тексты в одно пространство
Статья хорошая. Но есть ощущение, что сразу подвели к микроскопу и смотрите на предметное стекло. Можно целиком картинку - граф какие ребра и вертексы вы строите?
А можешь пояснить, что ты имеешь в виду под ребрами и вертексами? Про какой граф идет речь?
Ок, сорэ, за неясно выраженный вопрос. По ходу статьи пытался представить какие методы алгоритмического программирования вы используете, что неочевидно из текста. Предполагал алг. нахождения пути и тд . Но в ML конечно все непросто , наверное.
Можно представить эмбеддинги товаров как вершины графа. Тогда мы не ищем пути, а находим в этом графе ближайших соседей для каждой вершины. А далее найденные соседи дополнительно обрабатываются. Из алгоритмического программирования здесь именно поиск этих соседей: необязательно делать полный перебор всех вершин. Есть интересный алгоритм, где как раз используется теория графов (HNSW)
Самое главное — время инференса ранжирующей модели кратно уменьшилось:
используя эмбеддинги Prod2Vec вместо картиночных и текстовых, мы
получили ускорение более чем в три раза
Спасибо за статью! Расскажите подробнее пожалуйста, что за ранжирующая модель, и как вы от полученных кластеров похожих товаров перешли к матчингу одинаковых.
Векторное представление товаров Prod2Vec: как мы улучшили матчинг и избавились от кучи эмбеддингов