Здесь, в Queenly, наша цель проста: предоставить доступную платформу, которая позволит девушкам чувствовать себя и выглядеть как можно лучше. Неудивительно, что системы рекомендаций повсюду и необходимы для успеха в бизнесе многих крупных компаний (Amazon, Spotify, Youtube). Мы постоянно ищем способы улучшить впечатления наших пользователей и подумали: Что может быть лучше, чем внедрение механизма рекомендаций? В этом посте мы опишем шаги, которые мы предприняли для разработки алгоритма нашей системы рекомендаций по одежде, покажем окончательные результаты и рассмотрим наши следующие шаги по улучшению.

Проблема - актуальность и точность в большинстве похожих платьев

Поскольку мы все еще находимся на ранних стадиях и поэтому не имеем достаточного количества данных, необходимых для выработки рекомендаций на основе подхода на основе контента или совместной фильтрации, мы решили начать с системы , основанной на знаниях. Если вы знаете что-нибудь о покупке платьев и полагаете, что рекомендации должны основываться на комбинации бренда, цвета, размера, стиля и т. Д., То вы правы.

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

Первая итерация алгоритма: генерация кандидатов с применением TF-IDF

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

Для каждого платья мы использовали встроенный класс sci-kit learn TfIdfVectorizer для создания векторов частоты термина-обратной частоты документов (TF-IDF), полученных из уникальных тегов каждого платья.

Короче говоря, TF-IDF - это метод, который разбивает слова на функции и присваивает каждому слову оценку в зависимости от его частоты и важности. Используя матрицу, сгенерированную из TfIdfVectorizer, мы вычислили баллы косинусного сходства между каждой парой платьев. Всего в трех строках кода у нас теперь есть набор значений, с которыми мы можем работать для ранжирования:

tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(wardrobe[‘wardrobe_tags’])
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

Вторая итерация алгоритма: взвешенная оценка с фильтрацией

Теперь, когда у нас есть числа, определяющие сходство между платьями, должен быть способ ранжировать самые похожие платья для каждого платья, чтобы вывести наши рекомендации. Конечно, это легко сделать с помощью pd.sort(), но мы решили присвоить веса конкретным атрибутам, которые мы сочли важными.

Упрощенное представление нашего пользовательского алгоритма выглядит так:

Первый набор состоит из кандидатов платья с TFIDF баллами, которые соответствуют целевому платью j по цвету и размеру, которому присвоен вес. Второй набор состоит из кандидатов платья с TDIDF баллами, которые соответствуют целевому платью j только по размеру, которому присвоен меньший вес. Все остальные варианты одежды, которые не соответствуют ни одному критерию в этих двух наборах, отбрасываются как несоответствующие.

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

Окончательные результаты

Затем наш механизм взвешенных рекомендаций TF-IDF запускается в производство в качестве этапа обработки в нашем конвейере данных. После применения его к нашей базе данных платьев, вот так оно отображается в нашем веб-приложении! (неплохо, правда?)

Планы на будущее

Подобно тому, как мы постоянно ищем способы улучшить опыт для наших пользователей, мы также надеемся улучшить алгоритм в следующих нескольких итерациях. В будущем мы надеемся реализовать алгоритм, используя подход совместной фильтрации в сочетании с взвешиванием дополнительных функций в нашем настраиваемом уравнении ранжирования. В этом методе мы стремимся построить матрицы совместной встречаемости на основе данных о взаимодействии пользователей (платья, сохраненные платья и т. Д.) Для дальнейшего создания релевантного контента для наших пользователей.

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

По мере расширения нашего инвентаря и базы пользователей графы знаний будут генерировать наиболее релевантных кандидатов путем обхода графа из набора узлов, которые уже известны пользователю. Отсюда мы можем использовать алгоритм случайного блуждания, чтобы находить рекомендации по одежде на пересечении нескольких отправных точек и выводить наиболее персонализированные рекомендации для наших пользователей.

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

об авторе

Эрин Лю - стажер по разработке программного обеспечения в Queenly и набирает обороты в Калифорнийском университете в Беркли, изучает науку о данных.