Skip to content

Рекомендательная система постов для ленты социальной сети / RecSys for a social network feed

Notifications You must be signed in to change notification settings

avfawkes/SocialNet-RecSys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SocialNet-RecSys

Рекомендательная система постов для ленты социальной сети / RecSys for a social network feed

image

Оглавление/ Table of contents

Цель проекта/ Project focus

Создание контентной рекомендательной системы постов для ленты социальной сети. При регистрации пользователи заполняют данные своего профиля. Так же платформа обладает лентой, которую пользователи могут листать и просматривать случайные записи случайных сообществ. Если пост нравится, можно поддержать автора и поставить like. Все действия пользователей сохраняются, каждая их активность, связанная с просмотром постов, записывается в базу.
Реализованный RESP API сервис позволяет рекомендовать пользователю посты. Доступен endpoint для сравнения рекомендаций модели со случайными для проведения AB эксперимента.

Этапы проекта/ Project stages

  • Реализация подключения к PostgreSQL базе и загрузка данных. Изначально планировалось загружать чанками, т.к. Pandas при выполнении SQL запроса требует в 4 раза больше памяти чем размер данных и одна из таблиц достаточно большая. Но в итоге её полностью загружать не пришлось и решение упростил. Также создал FastAPI сервис и эндпоинт для получения рекомендаций, который будет принимает параметры id и limit и возвращать топ limit рекомендованных постов для пользователя с указанным id.
  • Создание бэйзлайн модели для рекомендации постов на основании числовых и категориальных признаков. Обработка признаков, кодирование, эксперименты с разными "деревянными" моделями Sklearn. Остановился на CatBoost, т.к. он дал лучший AUC.
  • Улучшение модели с помощью обработки текста постов. Векторизовал текст энкодером трансформера BERT и добавлял эмбеддинги как числовые признаки. Также пробовал признак расстояния до центра кластера этих эмбеддингов. Но в итоге CatBoost опять же справился лучше с обработкой текста. Насколько я смог разобраться, подход также в векторизации и генерации признаков на основе LDA, KNN.
  • Добавил эндпоинт для проведения АБ эксперимента между рекомендациями случайными и модели. Пользователи солятся по id с помощью MD5. Получил контрольную и тестовую группу, с помощью биномиального теста убедился, что разбиение соответствует требуемому. Метрика "число лайков на пользователя" распределена логнормально, поэтому применил критерий Манна-Уитни-Уилкоксона, показавший статистически значимое различие между группами.

В планах/ Backlog

  • Попробовать разные параметры токенизации текста катбуст (лемматизация, stop слова)
  • Попробовать векторы энкодера BERT в embeding features CatBoost
  • Попробовать архитектуры DL комбинирующие контентный подход и факторизацию
  • ...

Технологии/ Technology stack

Python Jupyter Pandas SQLAlchemy CatBoost Scipy FastAPI Docker

Структура репозитория/ Repo navigation

  • app - собственно код приложения
  • data - структура таблиц БД и сэмплы данных
    • user_data - пользователи и их признаки 163205 записей
    • post_text_df - тексты постов и их категория 7023 записей
    • feed_data - журнал взаимодействия пользователей с постами и информация о лайках. 76892800 записей
  • train - ноутбук обучения модели. Также можно посмотреть на Kaggle

Попробовать/ Try it

Service Healthcheck
Попробовать сервис можно здесь Service API

Скачать данные/ Data download endpoints

Данные в формате csv
user_data - 11.25 Mb
post_text_df - 9.2 Mb
post_text_df - 2.68 Gb

Развернуть приложение/ Deploy

  1. Клонировать или загрузить репозиторий

    git clone --depth 1 'https://github.com/avfawkes/SocialNet-RecSys.git' && rm -rf SocialNet-RecSys/.git
    
    curl -L "https://github.com/avfawkes/SocialNet-RecSys/archive/main.tar.gz" | tar -xzf -
    
  2. Переименовать db_creds_template.yaml в db_creds.yaml указав реквизиты доступа к БД

  3. Запустить

    sudo docker compose up
    

Поддержка/ Support

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

About

Рекомендательная система постов для ленты социальной сети / RecSys for a social network feed

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published