Персонализация без Big Data: как ранжировать новости в Telegram с помощью pgvector и пяти сигналов

Введение: персонализация как роскошь, доступная не всем

Когда мы слышим слово «персонализация», в голове сразу всплывают образы гигантов вроде Netflix, Spotify или YouTube. Эти платформы тратят миллионы долларов на сбор и анализ огромных массивов данных, используя сложные распределённые системы и целые армии инженеров. Кажется, что создать умную ленту новостей, которая понимает вкусы пользователя, без Big Data и мощной инфраструктуры просто невозможно. Но команда разработчиков, опубликовавшая свой опыт на Habr, доказывает обратное: персонализация возможна даже в условиях ограниченных ресурсов. Они взяли Telegram-бота, добавили PostgreSQL с расширением pgvector и всего пять сигналов — и получили ранжирование новостей, которое удивило даже авторов. Источник

В июле 2026 года, когда тренды ИИ и анализа данных становятся всё более доступными, этот кейс выглядит особенно вдохновляющим. Он показывает, что для умной персонализации не обязательно иметь кластер из сотен серверов и петабайты логов. Достаточно грамотно подойти к выбору инструментов и сигналов, которые действительно отражают интересы пользователя. В этой статье мы разберём, как именно авторам удалось решить задачу, какие пять сигналов они использовали и почему pgvector стал ключевым элементом пазла.

Проблема: новости — это мусор, если их не фильтровать

Telegram-боты для доставки новостей — привычный инструмент для тысяч пользователей. Но у них есть общая боль: поток информации превращается в белый шум. Без персонализации каждый подписчик получает одну и ту же ленту, где перемешаны важные для него темы и совершенно неинтересный контент. Результат — падение вовлечённости, отписки и общее разочарование.

Авторы статьи столкнулись с классической дилеммой: как дать каждому пользователю уникальную ленту, не имея возможности хранить и обрабатывать терабайты данных? Традиционные подходы — коллаборативная фильтрация, построение матриц пользовательских предпочтений, сложные модели машинного обучения — требуют больших вычислительных мощностей и объёмов данных. Для небольшого проекта это непозволительная роскошь.

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

Решение: pgvector и пять сигналов

В основе системы ранжирования лежит расширение pgvector для PostgreSQL. Этот инструмент позволяет хранить и искать векторные представления (embeddings) прямо в базе данных. Векторизация новостей и интересов пользователей даёт возможность сравнивать их семантическую близость — то есть понимать, насколько тема одной статьи похожа на предпочтения конкретного человека.

Но векторы — это только половина дела. Вторая половина — это пять сигналов, на основе которых строится итоговый рейтинг каждой новости для каждого пользователя. Авторы выделили следующие:

  1. Семантическое сходство — насколько вектор новости близок к вектору интересов пользователя. Этот сигнал самый важный, он задаёт базу.
  2. Темпоральный вес — свежие новости получают больший приоритет. Учтён эффект «затухания» со временем.
  3. Популярность — количество кликов или взаимодействий с новостью среди других пользователей. Если статья интересна многим, вероятно, она будет интересна и вам.
  4. История взаимодействия — какие новости пользователь уже читал, лайкал или пропускал. Это позволяет избегать повторов и усиливать сигнал понравившихся тем.
  5. Категориальный вес — предпочтения пользователя по тематикам (технологии, спорт, политика, наука и т.д.).
Сигнал Описание Вес в ранжировании
Семантическое сходство Косинусное расстояние между эмбеддингами 0.4
Темпоральный вес Линейное убывание за 24 часа 0.2
Популярность Количество кликов за последний час 0.15
История взаимодействия Булевы флаги: читал/не читал 0.15
Категориальный вес Вес на основе частоты тем 0.1

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

Техническая реализация: почему pgvector, а не отдельная векторная база

Выбор pgvector — не случайность. Во-первых, команда уже использовала PostgreSQL для хранения пользователей и новостей. Подключить расширение — дело нескольких минут. Во-вторых, это избавляет от необходимости разворачивать и поддерживать отдельную систему вроде Milvus, Qdrant или Weaviate. Для небольшого проекта это существенная экономия ресурсов.

pgvector поддерживает несколько типов индексов для быстрого поиска ближайших соседей, включая IVFFlat и HNSW. Авторы выбрали HNSW (Hierarchical Navigable Small World) — он даёт высокую точность при приемлемой скорости на объёмах до нескольких миллионов векторов. В их случае, когда количество новостей измеряется тысячами, а пользователей — десятками тысяч, производительность оказалась более чем достаточной.

Интересная деталь: векторизация новостей выполняется один раз при добавлении статьи в базу. Для этого используется предобученная модель Sentence-BERT, которая превращает заголовок и краткое описание новости в числовой вектор длиной 768 элементов. Пользовательские профили также хранятся в виде векторов, которые обновляются асинхронно каждые несколько часов на основе истории взаимодействий.

Как это работает на практике: пример из реальной жизни

Представьте пользователя Ивана. Он подписан на новости по технологиям и науке, но не любит политику и спорт. Система хранит его профиль как вектор, усреднённый по всем новостям, которые он читал и лайкал. Когда приходит новая статья о квантовых вычислениях, её вектор сравнивается с профилем Ивана — сходство высокое. Статья получает бонус по сигналу семантического сходства.

Но если та же статья уже была показана Ивану вчера, но он её не открыл, срабатывает сигнал истории взаимодействия — новость понижается в рейтинге. Если же статью активно читают другие пользователи (сигнал популярности), она может подняться выше, даже если семантическое сходство не максимальное.

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

Результаты и выводы: персонализация без Big Data — это реально

Авторы статьи делятся впечатляющими результатами. После внедрения системы ранжирования на основе pgvector и пяти сигналов, вовлечённость пользователей (количество кликов на новости) выросла на 40% по сравнению с простой хронологической лентой. Количество отписок снизилось, а время, проведённое в боте, увеличилось.

Главный вывод, который можно сделать из этого кейса: персонализация не обязательно требует огромных инвестиций в инфраструктуру. Ключ к успеху — правильно выбранные сигналы и инструменты, которые работают в условиях ограниченных ресурсов. pgvector позволяет добавить семантический поиск в любую базу данных на PostgreSQL без сложной архитектуры. А пять простых сигналов — семантическое сходство, свежесть, популярность, история и категории — дают достаточно контекста для качественного ранжирования.

Этот подход может быть полезен не только для новостных ботов, но и для любых приложений, где нужно персонализировать контент: рекомендации статей, подборка товаров, лента социальной сети и даже образовательные платформы. Например, ASI Biont поддерживает подключение к Telegram через API — подробнее на asibiont.com/courses. Используя подобную методологию, можно создавать умные ленты обучения, которые адаптируются под прогресс и интересы каждого студента.

Заключение: минимум данных — максимум смысла

Персонализация без Big Data — не миф, а рабочая стратегия, которую может повторить любой разработчик. Кейс, описанный на Habr, показывает, что для хорошего результата не нужно собирать всё подряд. Достаточно пяти продуманных сигналов и одного мощного, но простого в использовании инструмента — pgvector.

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

Если вы хотите углубиться в тему, обязательно прочитайте оригинальную публикацию на Habr — там есть все технические детали, код и дополнительные нюансы реализации. Источник

← Все статьи

Комментарии

Читайте также

Как заставить 768 серверов работать как один: фишка Vibe Coding в 2026 году

16 июля 2026

Уберизация строительства: как платформы меняют рынок ремонта и стройки в 2026 году

16 июля 2026

Переговоры и коммуникация: как AI-тьютор помогает освоить Гарвардский метод и BATNA за месяц

16 июля 2026

Как AI-агент ASI Biont автоматизирует интеграцию с Square: бескодовая сверка платежей и аналитика клиентов

16 июля 2026

Почему обучение с ИИ превосходит самостоятельную подготовку к сертификации CISSP в 2026 году

16 июля 2026

Контент-стратегия 2026: как курс Content Strategy на Asibiont.com меняет подход к контент-маркетингу

16 июля 2026

Как подключить YouTube к AI-агенту ASI Biont: полный гид по интеграции и автоматизации канала

16 июля 2026

Курс по IT-праву и комплаенсу: управление юридическими рисками в технологиях без юриста

16 июля 2026

Освоение AWS DevOps: глубокое погружение в курс сертификации DOP-C02 на Asibiont.com

16 июля 2026