3,583 papers
arXiv:2508.08512 77 11 авг. 2025 г. FREE

LLM-TP: разделение пользовательских предпочтений на «здесь и сейчас» и «всегда любил»

КЛЮЧЕВАЯ СУТЬ
Рекомендательная система не различает временный всплеск от стабильного интереса. Неделя чтения про ChatGPT + полгода изучения Python = система думает что ты интересуешься «и тем, и тем». Усреднённая каша вместо точного профиля. LLM-TP позволяет создавать два раздельных профиля пользователя: краткосрочный («что интересует прямо сейчас») и долгосрочный («что всегда любил»). Фишка: два разных промпта к LLM — один анализирует последние N взаимодействий («опиши временные тренды»), другой всю историю («найди стабильные паттерны»). Модель создаёт два текстовых описания → превращаются в векторы через BERT → объединяются через механизм внимания. Результат: адаптивный профиль, где новому пользователю больше веса на краткосрочные интересы (40/60), опытному — на долгосрочные (70/30).
Адаптировать под запрос

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


📋 Дайджест исследования

Ключевая суть

Рекомендательная система не различает временный всплеск от стабильного интереса. Неделя чтения про ChatGPT + полгода изучения Python = система думает что ты интересуешься «и тем, и тем». Усреднённая каша вместо точного профиля. LLM-TP позволяет создавать два раздельных профиля пользователя: краткосрочный («что интересует прямо сейчас») и долгосрочный («что всегда любил»). Фишка: два разных промпта к LLM — один анализирует последние N взаимодействий («опиши временные тренды»), другой всю историю («найди стабильные паттерны»). Модель создаёт два текстовых описания → превращаются в векторы через BERT → объединяются через механизм внимания. Результат: адаптивный профиль, где новому пользователю больше веса на краткосрочные интересы (40/60), опытному — на долгосрочные (70/30).

Принцип работы

Традиционная система как друг, который описывает твои музыкальные вкусы после того как ты неделю слушал новогодние хиты в декабре. Он скажет «тебе нравится рок... и новогодние песни?» — что неточно. LLM-TP разделяет контексты через два промпта: один говорит модели «смотри только на последние N, опиши временные всплески», второй «смотри на всю историю, найди что повторяется месяцами». Модель перестаёт усреднять — она создаёт два чётких контекста вместо одной каши. Механизм внимания потом динамически балансирует их: богатая история (10+ взаимодействий) → больше веса долгосрочным, короткая история → больше краткосрочным.

Почему работает

LLM по умолчанию создаёт усреднённый профиль — смешивает все взаимодействия в одну кучу. Раздельные промпты снимают эту двусмысленность. Первый промпт: «смотри только на последние 10, найди временные тренды». Второй: «смотри на всю историю, найди стабильные паттерны». Ключевой инсайт: LLM сильна в понимании естественного языка и создании смысловых описаний. Модель видит не просто список кликов. Она пишет «пользователь изучает Python последовательно, от базы к продвинутым темам» или «временный интерес к хайповой теме ChatGPT». Эта глубина даёт больше информации чем простое усреднение векторов. Метод работает заметно лучше когда у пользователя богатая история (10+ взаимодействий) — достаточно материала чтобы выделить отдельные паттерны. В разреженных данных (3-5 айтемов) улучшение минимально.

Когда применять

Рекомендательные системы → персонализация контента в образовательных платформах, e-commerce, новостных агрегаторах, особенно когда у пользователей есть временные всплески интересов (подготовка к событию, реакция на тренд, сезонные покупки). НЕ подходит для: real-time рекомендаций (генерация профилей занимает время), пользователей с редкими взаимодействиями (менее 10 айтемов), случаев где нужна мгновенная реакция на клик.

Мини-рецепт

1. Определи окно краткосрочных интересов: Сколько последних взаимодействий считать «временными»? Для быстрых доменов (новости, тренды) — 5-10, для медленных (образование, хобби) — 20-50.

2. Создай два промпта для LLM: Краткосрочный — Проанализируй последние {N} взаимодействий. Опиши что интересует ПРЯМО СЕЙЧАС, какие новые темы появились недавно. Долгосрочный — Проанализируй всю историю за {период}. Найди стабильные паттерны — что изучает последовательно, системно, глубоко.

3. Получи два текстовых описания: LLM вернёт две характеристики пользователя — «временные всплески» и «устойчивые интересы».

4. Задай веса для объединения: Богатая история → больше веса долгосрочным (70/30). Короткая история → больше краткосрочным (40/60). Можно настроить вручную под свою задачу.

5. Используй для рекомендаций: Финальный профиль = взвешенная комбинация обоих контекстов. Рекомендуй айтемы с учётом обоих профилей — основа из долгосрочных интересов, дополнение из краткосрочных.

Примеры

[ПЛОХО] : Порекомендуй курсы на основе всей истории пользователя — система усредняет всё в один профиль, неделя хайпа вокруг ChatGPT смешивается с полугодом изучения Python.
[ХОРОШО] : Краткосрочный промпт: Проанализируй последние 10 взаимодействий (5 вебинаров про ChatGPT, 3 статьи про нейросети, 2 видео про промптинг). Опиши временные тренды — что интересует прямо сейчас + Долгосрочный промпт: Проанализируй 6 месяцев истории (15 курсов Python, 10 SQL, 8 визуализация данных). Найди стабильные паттерны — что изучает последовательно → Модель создаст два профиля: «хайп вокруг ChatGPT для практических задач» (краткосрочный) + «системное развитие в аналитике данных, Python-экосистема» (долгосрочный) → рекомендация учитывает оба: продвинутые курсы по ML с Python (70% веса) + кейс про использование LLM в аналитике (30% веса).
Источник: Using LLMs to Capture Users' Temporal Context for Recommendation
ArXiv ID: 2508.08512 | Сгенерировано: 2026-01-12 02:29

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с