Как я решил сделать систему рекомендаций постов из пабликов Телеграма.
И сделал: OLEG AI
Система рекомендаций - это, типа, искусственный интеллект, потому что там есть нейронная сеть. Раз так, надо было назвать его каким-то именем, и я назвал его в честь своего друга Олежки.
OLEG AI получился тупенький, но он мне нравится.
Идея
Я люблю иногда потупить в какую-нибудь ленту "информационного корма". В разное время я любил поразлагаться на Лепре, Дёти, Пикабу, но мне всегда мало.
И тогда я подумал: в Телеграме ведь куча источников, но Телеграм их не агрегирует. Телеграм не собирает с нас лайки.
Почему бы не сделать собственную ленту, подумал я.
Я как раз занимался изучением машинного обучения, а одним из направлений ML являются рекомендательные системы. Отличная возможность попрактиковаться!
Общая схема
Вооружившись Питоном и голым энтузиазмом, я приступил к делу.
Вот так выглядит схема работы:
Каждый раз, когда юзер запрашивает новый пост, Олег лезет в пул свежих постов, и достает оттуда самый подходящий для данного юзера. У каждого поста есть две оценки - "класс" и "какашка". Юзер кликает одну из них, и получает новый пост в ленту. Каждая оценка обучает Олежку, и со временем рекомендации становятся точнее.
Как это работает?
В основе современных рекомендательных систем лежит идея "вектора латентных параметров". Это гениальная идея, которая помогла сильно продвинуть не только рекомендательные системы, но и область машинной обработки естественного языка. Например, Алиса от Яндекса пользуется этим достижением, чтобы понять, что от неё хотят, вычленить смысл из предложения типа "Алиса, поставь тяжелую музыку".
Про латентные параметры можно написать пару хороших лекций, но если вкратце, то:
Каждому юзеру и каждому посту присваивается ряд цифровых параметров. Каждый параметр что-то значит. Например:
- "рекламность" поста,
- "юморность",
- "политичность"
- и т.д.
Таких параметров у Олега целых 100 для каждого юзера - с одной стороны. А с другой стороны - 80 параметров для пабликов, и 20 для постов.
Параметры юзера - это его предпочтения, а параметры поста и канала - это их свойства. Зная свойства поста и канала и предпочтения юзера, мы можем понять, подходит ли данный пост с данного канала юзеру или нет. Вычислением всех этих параметров занимается нейросеть.
В процессе обучения нейросеть помогает определять значения конкретных параметров юзеров, постов и каналов. Каждый новый голос помогает точнее определять параметры, и как следствие, делает рекомендации точнее. Больше юзеров, больше оценок - лучше рекомендации!
Проблемы Олежки
Холодный старт
У любой системы рекомендаций есть проблема "холодного старта" - когда мало юзеров, мало оценок, системе неоткуда брать информацию для обучения, и рекомендации получаются нерелевантные. Олежка сейчас уже не совсем холодный, но еще и не горячий. Получается, тепленький.
Свежие юзеры
Вторая проблема - Олег ничего не знает про свежего юзера, который еще не поставил достаточного количества оценок. Свежему юзеру посты выдаются "средние по больнице". Поэтому не требуйте от него сразу крутых рекомендаций, поставьте пару десятков лайков или какашек.
Порно, шок-контент, скам
Поскольку Олежка - тупенький ИИ, он не разбирает, откуда тянуть контент. В его сети попадается всякая рыбешка, и часть, скажем так, тухловата.
Мы любим Телеграм за свободу и открытость, но у всего есть своя обратная сторона.
Модерация контента - это головная боль для всех систем, в которых контент генерируется юзерами. Что делать с этими источниками - я не придумал. Модерировать их вручную нереально, Олег каждый день получает десятки тысяч постов. А задача автомодерации - это сложная технически задача, она сложнее самого Олежки.
Пока что я просто поставил значок "18+", надеюсь, у пользователей есть своя голова на плечах и собственный фильтр приличия, чтобы нажимать какашку на подобных постах (ведь это помогает отфильтровывать и не показывать их другим юзерам).
ВОТ
...такие дела! Ставьте лайк, подписывайтесь на канал, если вам интересны дальнейшие приключения Олежки в мире информационных технологий. Пишите, если вам интересны более глубокие технические детали реализации, я с удовольствием ими поделюсь. Со временем я даже открою весь код Олежки, если это будет кому-нибудь интересно.