Рекомендации на основе интересов пока слабо выстроены даже у гигантов лидеров. Например на том же Ютубе лишний раз подумаешь кликнуть по ролику или нет, понимая, что потом этим будет завалена твоя лента а тебе в принципе этой темой вообще не интересуешься или даже категорически не хотел бы, чтобы у кого то при взгляде на твою ленту сложилось мнение что ты этим интересуешься))
Запрещённая инста постоянно требует от меня чтобы я подписался на каких то людей которых я якобы знаю, разумеется никого из них я не знаю и близко, но вот спросите у марка какого хрена я вот должен и все подписаться на всех этих людей)
Сама по себе система рекомендаций на основе выводов какого то алгоритма об интересах пользователя это путь в какую то пропасть. Я стараюсь отключать где можно ленту по рекомендациям и сохранять систему ленты на основе подписок и рекомендаций от друзей, что они ретвитнцли или лайкнули. Обычно этого достаточно чтобы быть более менее в курсе последних трендов и не оказаться в инфопузыре.
Что до построения ленты на основе интересов.
Простейшая схема будет выглядеть как то так же как список похожих материалов под постом. Этот список строится обычно по поиску в базе на основе релевантности по заголовкам или тексту. Или ищутся совпадения по тегам указанным автором в статье.
Вот и для пользователя составляем список его тегов, профиль интересов.
То есть таблица
userid, tag, priority
В нее заносим теги которые сам пользователь указал явно с высоким приоритетом +5, потом можно что-то добавлять по мере его взаимодействия с контентом. И заносим в эту базу теги от статей тема которых явно интересно пользователю. Что-то типа просто посмотрел менее приоритет 1, посмотрел и лайкнул +2, коммент+3, поделился +3.
Ну и при открытии ленты пользователем смотрим его теги, сортируем выдачу по тегам в порядке убывания приоритетов и даты публикации в ленте.
Для начала так, потом подкручивать исходя из того, что получается.