TL;DR
LLM-TP — техника для рекомендательных систем, которая использует большую языковую модель для создания двух раздельных профилей пользователя: один описывает недавние интересы (краткосрочный контекст), другой — стабильные долгосрочные предпочтения. Профили генерируются как текстовые описания, превращаются в векторные представления через BERT, а затем объединяются через механизм внимания в единый профиль для предсказания релевантности.
Традиционные рекомендательные системы создают единый усредненный профиль пользователя по всей истории взаимодействий. Это работает плохо, когда человек временно интересуется чем-то новым (допустим, готовится к отпуску и читает про Таиланд), но потом возвращается к привычным темам (профессиональная литература по маркетингу). Система не понимает, что таиландская тема — временный всплеск, а маркетинг — стабильный интерес. LLM справляется лучше: она создает отдельное описание для «что интересовало недавно» и «что интересует постоянно», улавливая эту разницу через естественный язык.
Метод работает в три шага. Сначала LLM получает два разных промпта: "проанализируй последние N взаимодействий и опиши временные интересы" и "проанализируй всю историю и найди стабильные паттерны". Модель выдает два текстовых описания. Эти описания превращаются в числовые векторы через BERT. Наконец, механизм внимания взвешивает оба вектора (например, 70% веса на долгосрочные + 30% на краткосрочные) и создает финальный профиль пользователя. Этот профиль используется для предсказания релевантности новых айтемов.
Схема метода
ШАГ 1: LLM генерация профилей
├─ Промпт 1: "Проанализируй последние N взаимодействий" → текст (краткосрочный)
└─ Промпт 2: "Проанализируй всю историю" → текст (долгосрочный)
ШАГ 2: Преобразование в векторы
├─ BERT(текст краткосрочный) → вектор r_short
└─ BERT(текст долгосрочный) → вектор r_long
ШАГ 3: Адаптивное объединение
└─ Attention weights: α_short, α_long (сумма = 1)
└─ Финальный профиль: e_user = α_short × r_short + α_long × r_long
(Все 3 шага выполняются отдельно: сначала 2 запроса к LLM, потом обработка)
Пример применения
Задача: Маркетолог в EdTech-стартапе подбирает персонализированные рекомендации курсов для пользователей платформы. Один клиент за последние 2 недели активно смотрел бесплатные вебинары по нейросетям (хайп вокруг ChatGPT), но за последние полгода стабильно проходил курсы по Python, аналитике данных, SQL. Нужно понять — это временный интерес к AI-трендам или глубокий переход в ML?
Промпт для short-term профиля:
Проанализируй последние 10 взаимодействий пользователя с платформой:
- 5 вебинаров "Промптинг для ChatGPT"
- 3 статьи "Как работают нейросети"
- 2 видео "GPT для маркетологов"
Сфокусируйся на **немедленных интересах и временных трендах**.
Опиши что пользователя интересует ПРЯМО СЕЙЧАС и почему.
Промпт для long-term профиля:
Проанализируй всю историю взаимодействий пользователя (6 месяцев):
- 15 курсов по Python (базовый → продвинутый)
- 10 курсов по SQL и работе с данными
- 8 курсов по визуализации (Matplotlib, Seaborn)
- 5 курсов по Pandas
- Недавно: вебинары про нейросети (см. выше)
Найди **стабильные, устойчивые паттерны** в предпочтениях.
Что пользователь изучает последовательно, системно, глубоко?
Результат:
Модель сгенерирует два текстовых профиля:
- Краткосрочный: "Пользователь активно интересуется трендом вокруг ChatGPT и генеративных нейросетей. Фокус на практическом применении LLM для нетехнических задач — промптинг, автоматизация рутины. Вероятно, реакция на медийный хайп и желание не отстать от коллег."
- Долгосрочный: "Пользователь системно развивается в аналитике данных. Последовательная траектория: программирование → работа с данными → визуализация. Глубокий интерес к Python-экосистеме для Data Science. Стабильный паттерн за 6 месяцев."
Эти профили превратятся в векторы. Механизм внимания взвесит их (допустим, 30% на краткосрочный + 70% на долгосрочный, если у пользователя богатая история). Система порекомендует:
- Основа: продвинутые курсы по машинному обучению с Python (долгосрочный интерес)
- Дополнительно: 1-2 практических кейса про использование LLM в аналитике (краткосрочный тренд)
Вместо того чтобы закидать человека только ChatGPT-курсами (если бы система смотрела только на недавнюю активность) или игнорировать его новый интерес к AI (если бы усредняла всю историю).
Почему это работает
LLM по умолчанию создает усредненный профиль, смешивая все взаимодействия в одну кучу. Это как если попросить друга описать твои музыкальные вкусы после того, как ты неделю слушал новогодние хиты в декабре, а остальные 11 месяцев — рок. Друг скажет "тебе нравится рок... и новогодние песни?" — что неточно.
Сильная сторона LLM — понимание естественного языка и способность создавать семантически богатые описания. Модель видит не просто список айтемов, а может написать "пользователь изучает Python последовательно, от базы к продвинутым темам" или "временный интерес к хайповой теме ChatGPT".
Метод использует эту силу через раздельные промпты. Первый промпт говорит модели: "смотри только на последние N взаимодействий, найди временные тренды". Второй: "смотри на всю историю, найди стабильные паттерны". Это снимает двусмысленность — модель больше не пытается угадать, что важнее. Она создает два четких контекста: "здесь и сейчас" vs "всегда было".
Механизм внимания (attention) потом динамически балансирует эти контексты. Для пользователя с богатой историей больше веса пойдет на долгосрочный профиль. Для нового пользователя — больше на краткосрочный. Это адаптивно под каждого человека.
Рычаги управления:
- Размер окна для short-term (последние N взаимодействий) → уменьши для быстро меняющихся доменов (новости), увеличь для стабильных (образование)
- Веса attention можно задать вручную вместо обучения → например, всегда 50/50, если хочешь равного баланса
- Инструкции в промпте ("опиши подробно" vs "кратко перечисли") → контролируют детальность профиля
Шаблон промпта
Промпт для краткосрочного профиля:
Проанализируй последние {N} взаимодействий пользователя:
{список последних N взаимодействий}
Сфокусируйся на немедленных интересах и временных трендах.
Что пользователя интересует ПРЯМО СЕЙЧАС? Какие новые темы появились недавно?
Опиши временные всплески интереса.
Промпт для долгосрочного профиля:
Проанализируй всю историю взаимодействий пользователя:
{полный список взаимодействий за {период}}
Найди стабильные, устойчивые паттерны в предпочтениях.
Что пользователь изучает последовательно, системно, глубоко?
Какие темы появляются регулярно на протяжении всего периода?
Опиши долгосрочные интересы.
Объединяющий промпт (после получения обоих профилей):
У меня есть два описания пользователя:
Краткосрочные интересы (последние {N} взаимодействий):
{текст краткосрочного профиля}
Долгосрочные интересы (за {период}):
{текст долгосрочного профиля}
Дай рекомендации {чего}, учитывая:
- Краткосрочные интересы (вес {X}%)
- Долгосрочные интересы (вес {Y}%)
где X + Y = 100%. Если история богатая → больше веса долгосрочным.
Если история короткая → больше веса краткосрочным.
Пояснения:
{N}— сколько последних взаимодействий считать "краткосрочными" (5-10 для быстрых доменов, 20-50 для медленных){период}— насколько глубоко смотреть в историю (месяц, полгода, год){X}и{Y}— веса для балансировки (например, 30% краткосрочные + 70% долгосрочные для опытного пользователя)
🚀 Быстрый старт — вставь в чат:
Вот шаблоны для анализа пользовательских предпочтений с учетом времени.
Адаптируй под мою задачу: [описание твоей задачи, тип контента, данные о пользователе].
Задавай вопросы, чтобы понять:
- Какой период считать "краткосрочным"? (зависит от динамики домена)
- Какие веса дать каждому профилю? (зависит от длины истории)
- Что именно рекомендовать?
[вставить шаблоны выше]
LLM спросит про специфику твоей задачи — насколько быстро меняются интересы в твоем домене, сколько данных есть, что рекомендуешь. Потом возьмет паттерн разделения temporal contexts и подгонит под конкретные параметры.
Ограничения
⚠️ Зависимость от плотности данных: Метод работает заметно лучше, когда у пользователя богатая история взаимодействий (10+ айтемов). В разреженных данных (3-5 взаимодействий) улучшение минимально — слишком мало материала для выделения отдельных temporal patterns.
⚠️ Вычислительная стоимость: Требует два запроса к LLM для каждого пользователя вместо одного. Для полной реализации нужен API доступ к GPT-4 и дополнительные модели (BERT, MLP). В реальных продакшн-системах это может быть дорого.
⚠️ Не для real-time: Генерация профилей и обработка через несколько моделей занимает время. Не подойдет для случаев, где нужна мгновенная реакция (например, рекомендации в момент клика).
⚠️ Статичность профилей: Профили нужно регенерировать при появлении новых взаимодействий. Метод не обновляется автоматически — это snapshot в момент генерации.
Как исследовали
Команда взяла два датасета из Amazon Product Reviews: Movies&TV (14,420 айтемов, 202,583 взаимодействия) и Video Games (3,790 айтемов, 83,842 взаимодействия). Первый датасет — плотный: пользователи в среднем взаимодействовали с 11.79 айтемами (медиана 9). Второй — разреженный: в среднем 4.55 взаимодействия (медиана 3). Это важно: плотность данных = количество материала для анализа temporal patterns.
Метод сравнивали с четырьмя baseline'ами. Centric — content-based метод без временного контекста (просто усредняет все эмбеддинги айтемов). TempFusion — fusion краткосрочных и долгосрочных числовых эмбеддингов без LLM (чтобы изолировать вклад семантики). Popularity — тупой ранжир по популярности. Matrix Factorization — классический коллаборативный фильтринг.
Использовали temporal holdout split (60% train, 20% validation, 20% test) — критически важно для temporal методов, потому что нужно предсказывать будущее, а не прошлое. Оценивали через Recall@K и NDCG@K.
Результаты оказались условными: На Movies&TV (плотные данные) LLM-TP значительно обошел все baseline'ы — улучшение на 17% по Recall@10 над Centric. Это подтверждает гипотезу: когда много истории, LLM может выделить rich semantic patterns.
Но на Video Games (разреженные данные) картина иная: TempFusion (простая числовая fusion) немного лучше LLM-TP на топовых метриках (Recall@10, NDCG@10), хотя LLM-TP выигрывает на Recall@20. Это значит: в sparse environments LLM не может накопать достаточно паттернов, а прямая агрегация числовых векторов более эффективна для top-K.
Инсайт для практики: LLM-driven temporal profiling оправдан только там, где есть богатая, динамичная история пользователя. В sparse domains проще использовать классические методы — они дешевле и работают не хуже. Вычислительная стоимость LLM окупается только на плотных данных.
Ablation study показал, что каждый компонент критичен: без разделения на short/long-term (NoTS) производительность падает на 20%+. Без MLP scoring (замена на dot product) — еще сильнее. Это подтверждает: synergy всех частей важна, нельзя выкинуть ни одну.
Адаптации и экстраполяции
💡 Адаптация для работы в чате — без кода:
Полная реализация LLM-TP требует API и pipeline из нескольких моделей. Но принцип можно применить прямо в ChatGPT/Claude:
Workflow для персональных рекомендаций:
[Шаг 1] Дай модели два списка:
"Вот что я делал/покупал/читал за последнюю неделю: [список]
Вот что я делал/покупал/читал за последние полгода: [список]"
[Шаг 2] Попроси раздельный анализ:
"Сначала проанализируй ТОЛЬКО недавние данные.
Что я ищу прямо сейчас? Какие временные интересы?
Потом проанализируй ВСЮ историю.
Какие стабильные паттерны? Что мне всегда нравится?"
[Шаг 3] Объедини:
"Теперь дай рекомендации, учитывая:
- 30% вес на временные интересы (недавнее)
- 70% вес на стабильные предпочтения (всегда)"
Пример: Выбор книг на отпуск. Последний месяц ты читал бизнес-биографии (новый тренд, увидел у блогера). Последний год — фантастику и детективы. Без разделения модель смешает всё и предложит "бизнес-фантастику" (?). С разделением: "70% классная фантастика (стабильный вкус) + 30% пара бизнес-книг (временный интерес)".
🔧 Техника: Обратная fusion — спроси "какой контекст важнее?"
Вместо фиксированных весов 30/70, спроси модель самой определить баланс:
У меня два профиля:
Краткосрочный: [описание]
Долгосрочный: [описание]
Какому профилю дать больше веса для рекомендаций {типа задачи}?
Объясни почему. Дай числовые веса (сумма 100%).
Модель может ответить: "Для выбора курсов обучения вес 80% долгосрочному — важна системность развития. 20% краткосрочному — учесть актуальный хайп."
Это делает fusion объяснимым и адаптивным под задачу.
💡 Адаптация для командной работы:
Техника work и для групповых рекомендаций. Пример: подбор статей для корпоративной рассылки.
Команда из 5 человек.
Краткосрочные интересы (последний месяц):
- 3 человека читали про AI tools
- 2 человека — про маркетинг в кризис
Долгосрочные интересы (полгода):
- 4 человека системно читают про продуктовую аналитику
- 3 человека — про management
Дай 3 темы для рассылки, балансируя:
- 40% вес на краткосрочные (актуальность)
- 60% вес на долгосрочные (core интересы команды)
🔧 Техника: Трехуровневая декомпозиция времени
Исследование использует два уровня (short/long). Можно добавить третий — medium-term:
Проанализируй отдельно:
1. Последние 3 дня (микротренды, реакция на события)
2. Последний месяц (краткосрочные интересы)
3. Последний год (стабильные паттерны)
Дай рекомендации с весами: 20% - 30% - 50%
Это полезно для fast-moving domains (новости, соцсети), где даже "краткосрочное" делится на подуровни.
Ресурсы
Using LLMs to Capture Users' Temporal Context for Recommendation — Milad Sabouri, Masoud Mansoury, Kun Lin, Bamshad Mobasher (DePaul University, Delft University of Technology). Presented at CARS'25 Workshop, RecSys 2025.
GitHub: https://github.com/milsab/LLM-TP
