Привет, меня зовут Коновалов Андрей, я Data Scientist персональных рекомендаций Wildberries. В этой статье разберем, как можно тюнингом TF-IDF побить BERT4Rec в ретро-тесте рекомендательной системы.
Для начала немного вводных. В рекомендательных системах принято использовать двухуровневые модели:
на первом этапе мы генерируем контент с максимальным потенциальным покрытием интересов пользователя,
на втором — персонализируем и раскладываем по полочкам самые сочные предложения.
Моделей на этапе генерации может быть больше десятка. Они должны учитывать предпочтения пользователей и предлагать новое, для чего нужно быть с покупателем на одной волне, угадывать контекст и читать между строк.
Модель, о которой пойдет речь дальше, как раз является примером такого «поисковика», способного находить релевантные товары на основе предпочтений пользователя.
Окунемся в историю
Перенесемся на страницы учебников по ранжированию документов и рассмотрим вероятностное пространство всех слов во всех документах, доступных для ранжирования. Оценим вероятность встречаемости слова в документах корпуса :
Предположим, что порядок слов в запросе и документах независим, сами слова одинаково популярны, а документы равны по объему слов. Тогда воспользуемся эвристической оценкой вероятности встретить совершенно случайно слово в документе ровно в раз:
Получим, что вероятность встретить все слова пользовательского запроса в документе равна:
Теперь у нас есть простая модель поиска: чем меньше вероятность встретить столько совпадений слов запроса в документе, тем выше его релевантность.
После логарифмирования всего выражения получаем term frequency–inverse document frequency (TF-IDF), состоящий из множителей, характеризующих относительную частоту слова для документа (TF) и инвертированную частоту слова для всего корпуса (IDF):
Избавимся от предположения о равной длине сессий (документа) воспользовавшись нормализацией значений TF-IDF по длине сессии (документа):
TF-IDF — это удобная мера для проверки релевантности документа: чем выше значение, тем релевантнее документ запросу :
От теории к практике
Взаимодействуя с платформой, совершая покупки, добавляя товары в вишлист и корзину, пользователи, сами того не подозревая, создают корпус документов для ранжирования. В нем документами выступают сессии, а в качестве слов берутся артикулы товаров.
Остановимся на фидбеках и сессиях подробнее
Принято разделять фидбек пользователя на явный и неявный (implicit/explicit).
При этом неявного фидбека нууу очень много. Человек засмотрелся на картинку: он явно хочет это купить! Или нет? Может, ему картинка понравилась, или он отвлекся и на экран вообще не смотрел. Или еще лучше купил товар! Он ему нравится или это подарок другу?
Как отмечалось выше, действия пользователей генерируют события, тщательно записанные в лог. Будем работать с ним. И начнем с разделения событий на положительные, нейтральные и негативные. Покупки, Лайки, Отложенные — все это несомненно «пОзитивы». Дизлайки и Жалобы — «нЕгативы».
Сессией будет выступать цепочка позитивных событий, относящихся к конкретным товарам. Право добавлять и исключать товары из цепочки по характеру взаимодействия остается за нами.
Пример лога пользователя:
timestamp |
item_id |
event_type |
1729235760 |
252306530 |
view |
1729235761 |
171350921 |
view |
1729235767 |
171350921 |
click |
1729235770 |
171350921 |
add_to_cart |
1729235780 |
111232192 |
view |
1729235785 |
111232192 |
click |
1729235800 |
111232192 |
longview |
1729235990 |
162802784 |
view |
1729235992 |
162802784 |
add_to_wish |
1729235992 |
148455972 |
view |
1729235998 |
148455972 |
add_to_cart |
1729235989 |
229796745 |
view |
1729236156 |
171350921 |
order |
Варианты цепочек позитивов:
[171350921, 111232192, 162802784, 148455972, 171350921 ]
[111232192, 162802784, 148455972, 171350921 ]
[171350921, 162802784, 148455972, 171350921 ]
[162802784, 148455972, 171350921 ]
…
Инженерный гений Дата Саентиста может разыграться не на шутку, впадая в размышления о том, какие события приведут чисто статистически к «пОзитиву» пожирнее и что действительно здесь считать сигналом, а что шумом.
Что мы хотим от кандидатогенератора?
Сделать этап генерации простым [ГОТОВО]
90% предложений должны быть похожи на историю пользователя [ГОТОВО]
С задачей генерации на первом этапе рекомендаций TF-IDF замечательно справляется даже из коробки. Модель обладает интерпретируемостью, простотой, и возможностью распараллеливания, что ускоряет расчет рекомендаций и тюнинг модели.
Побежали дальше!
Peek OR Filtering Pre-processing
Отметим, что не все сессии и товары стоит использовать для обучения: для вас мы отбираем лучшее.
Рекомендуется обучать модель на свежих сессиях продвинутых пользователей. Часто пользователей делят на CORE, HOT, WARM и СOLD по частоте посещения платформы, объему покупок и лояльности. Такие градации удобны для бизнес-менеджмента и аналитиков, они же и определяют критерии для этих статусов.
Такая же бизнес-логика применима и к товарам. Самые горячие пирожки рекомендовать не стоит, как и неликвид. Общие рекомендации такие:
Соберите статистику продаж внутри категорий (н.р. по каталогу: джинсы, фены в т.д.)
-
Подберите процентили и длину временного периода за который будут рассматриваться сессии.
Особенность распределений величин, связанных с деньгами и/или продажами, такова, что мы всегда увидим асимметричное распределение скошенное вправо, то есть с длинным хвостом справа:
Обратите внимание на мощность получившегося словаря, это может быть важно для оптимальной работы поисковых индексов
Стоит позаботиться о моделях матчинга в вашей рекомендательной системе — это позволит подгрузить словарь синонимов в вашу идеальную модель TF-IDF
Обратите внимание на IDF! (Благо, вы его уже рассчитали!)
Вместо того, чтобы самостоятельно собирать статистику продаж воспользуемся TF-IDF: нужная величина представлена множителем IDF:
Определите, что вы хотите достичь с помощью модели TF-IDF. Если ваша цель — выделить уникальные товары, то выбирайте те, что имеют высокий IDF. Если же вы хотите выделить товары общего потребления, которые встречаются во многих сессиях, то вам нужны товары с низким значение IDF.
За счет того, что товары FMCG имеют низкий IDF, наша модель может избавиться от смещения в ТОП продаж и купировать проблему Popularity Bias, с которой так отчаянно борются другие кандидатогенераторы.
Таким образом TF-IDF учитывает как популярность товара, так и его общую редкость по всему корпусу, помогает выделять ключевые товары (сигнал для рекомендаций) и устраняет шум.
Борьба метрик
Чтобы не просто получить качественную рекомендацию, но и расширить разнообразие групп товаров предстояло ответить на вопросы:
Какие события считать сессией?
Будем ли приводить сессии к одной длине?
Какой размер словаря нам получится залить в поисковый индекс?
Каково минимальное количество позитивов для отбора в корпус?
В серии экспериментов определялись критерии и подбирались параметры.
В итоге мы пришли устойчивым и воспроизводимым результатам, сравнимыми с продовыми статистическими моделями, как по техническим, так и бизнес-метрикам.
Второй сезон: Якорные события
Возможно, вы уже читали в прошлом сезоне наших заметок о рекомендациях про якорные события. Коротко о сути: мы рассматриваем историю взаимодействий юзера не целиком, а отбираем определенный набор товаров. Например, двигаемся с конца и берем только товаров определенной категории, а остальные, той же категории, дальше по истории, выкидываем. Итоговая цепочка будет опорной для поиска похожих (близких) на них товаров.
Воспользуемся описанным подходом и найдем ближайших соседей для всех айтемов «словаря». Благо, по формуле (2) векторные представления уже посчитаны. Запускаем faiss, тут ничего сложного)
Добавив схему рекомендаций с якорными событиями, мы улучшили качество рекомендаций на 20–30% для первых 200 рекомендаций. И на этом развитие модели не остановилось.
В ПРОД?
А фильтровать кто будет? Бизнес-требования просты, как и все гениальное: не нужно рекомендовать ту же группу товаров, особенно если она статистически не располагает к повторной покупке и дешевле исторических покупок. Здесь не менее важны давность и регулярность событий, связанных с якорными товарами.
Отметим, что важно обратить внимание на состав отбираемых рекомендаций: лучше разбить товары на кластеры и уже после сбалансировать выдачу квотами с учетом распределения интересов пользователя к каждому из кластеров.
Новый виток истории
Окей, кластеры, квоты и интересы, мы сделали. Но что будет, если…
...закрутить пожестче квоты с фильтрацией и применить те же самые списочные рекомендации уже к отобранным кандидатам?
Слишком далеко уходить не будем: перемножая близости якоря и кандидата, кандидата и его соседа с адаптивными коэффициентами, получаем новую меру близости и новый сезон экспериментов.
Результаты экспериментов
Заглядывать в будущее модель пока не научились, но метрики со второго сезона снова выросли. На этот раз модель начала выдавать качество сопоставимое с BERT4rec! HitRate / Precision / NDCG выросли на 40–50%.Полученная модель обладает высокими показателями разнообразия и низким пересечением с топом продаж.
Все перечисленные характеристики позволяют использовать модель как для прогрева пользователя с малым количеством позитивов, так и для CORE аудитории Wildberries.
Проблема холодного старта
Для решения этой задачи некоторые компании даже создают целые команды. А что может предложить TF-IDF? Во втором сезоне вышел item2item подход, который принесет немало рекомендаций для пользователя с небольшим числом позитивов, даже если это будет просто долгий просмотр.
Минусы о которых можно заявить
Метод TF-IDF имеет определенные ограничения: он не распознает семантические связи между словами (товарами) и плохо справляется с неструктурированными данными (например, с мультимедийным контентом или информацией о поведении пользователей). Поэтому для повышения точности рекомендаций его часто комбинируют с другими подходами, такими как коллаборативная фильтрация или методы глубокого обучения, которые лучше учитывают контекст и предпочтения пользователей.
Заключение
Одними из основных преимуществ использования Term Frequency-Inverse Document Frequency (TF-IDF) в рекомендациях являются его простота и эффективность. Метод обеспечивает высокую степень релевантности при ранжировании контента, особенно когда система работает с большими коллекциями. TF-IDF позволяет учитывать не только частотность товаров, но и их уникальность, что особенно важно при работе с разнообразными коллекциями данных.
В будущем в добавлении к частотной модели TF-IDF будут разработаны гибридные подходы кандидатогенерации, основанные на семантическом анализе пользовательских данных. Это позволит повысить точность и персонализацию рекомендаций, что является ключевым фактором успешности современных рекомендательных систем.
Спасибо за прочтение статьи. Надеюсь, материал был полезен и помог лучше понять этот метод и его роль в современных технологиях рекомендаций!
Эта и другие статьи про рекомендации в Wildberries выходят в Telegram-канале @wildrecsys. Подписывайтесь, чтобы не пропустить новые публикации!
А больше о том, как при помощи ML мы делаем маркетплейс лучше для продавцов и покупателей, рассказываем в Telegram-канале @wb_space. Там же делимся анонсами и полезными материалами от экспертов.