TL;DR
ReGeS — исследование о том, как связать диалоговые рекомендательные системы с базами знаний. Авторы показали, что наивное применение RAG (Retrieval-Augmented Generation) в диалогах проваливается из-за двух проблем: шумные длинные диалоги убивают поиск, а LLM путается среди похожих вариантов. Решение — взаимное усиление поиска и генерации: генерация создаёт концентрированные запросы для поиска, а поиск находит похожие варианты для тренировки генератора различать нюансы.
Главная находка: Качество запроса — это всё для поиска. Когда исследователи скормили retriever-у оригинальный диалог как есть, точность поиска упала до 3.5% (Recall@5). Даже простой промпт "перефразируй диалог в короткий запрос" не спасает — LLM теряет важные детали или добавляет шум. Проблема в том, что LLM не знает что важно для поиска — она видит весь диалог, но не понимает какие слова критичны для нахождения нужного фильма. Второй барьер: когда retriever находит 5 похожих фильмов, LLM начинает путаться. Без явного контраста между вариантами модель галлюцинирует — выдумывает несуществующие фильмы или выбирает неправильный из списка.
Суть метода: ReGeS использует самообучение через правильный ответ. Первый шаг: дай LLM диалог + правильный фильм, попроси создать идеальный поисковый запрос. Второй шаг: обучи другую LLM воспроизводить такие запросы без знания правильного ответа — только из диалога. Для генератора: обучай не на случайных неправильных вариантах, а на похожих — тех, что retriever нашёл рядом с правильным. Модель учится видеть тонкие различия: "этот боевик с Уиллом Смитом про инопланетян, а тот — про роботов".
Схема метода
ОБУЧЕНИЕ:
Шаг 1: LLM видит [диалог + правильный ответ] → генерирует идеальный запрос
Шаг 2: Query Expert учится воспроизводить такие запросы без ответа → только из диалога
Шаг 3: Retriever ищет по refined query → находит похожие варианты (hard negatives)
Шаг 4: Item Generator учится выбирать правильный среди похожих → contrastive learning
ПРИМЕНЕНИЕ:
Диалог → Query Expert создаёт запрос → Retriever находит кандидатов →
Item Generator выбирает лучший → Рекомендация
Все шаги требуют fine-tuning с LoRA. Для обычного чата — неприменимо напрямую.
Extractable принципы для промптов
Хотя ReGeS требует fine-tuning, принципы работы можно адаптировать в промпты:
1. Self-Reflection для улучшения запроса
Проблема: LLM плохо сжимает длинный контекст в концентрированный запрос.
Решение: Используй ground truth как якорь для рефлексии.
Промпт-паттерн:
Дан диалог:
{диалог}
Правильная рекомендация: {правильный_вариант}
Задача: Какие 3-5 ключевых слов из диалога привели именно к этой рекомендации?
Игнорируй общие фразы, выдели ТОЛЬКО конкретные предпочтения.
Формат: список слов через запятую.
Потом используй эти слова как поисковый запрос.
2. Contrastive Selection с похожими вариантами
Проблема: LLM галлюцинирует когда выбирает из похожих вариантов.
Решение: Явно дай похожие варианты и заставь объяснить различия.
Промпт-паттерн:
Контекст: {диалог}
Вот 5 похожих вариантов:
1. {вариант_1}
2. {вариант_2}
...
Задача:
1. Для каждого варианта — почему он НЕ подходит (1-2 предложения)
2. Выбери лучший и объясни почему именно он
Формат:
Не подходят:
1. [причина]
2. [причина]
...
Выбор: [номер] — [объяснение]
3. Двухшаговая обработка: сжатие → поиск
Промпт-паттерн:
ШАГ 1 (в отдельном запросе):
"Сожми этот диалог в поисковый запрос 5-10 слов. Убери вежливость, оставь только факты о предпочтениях:
{диалог}"
ШАГ 2 (в новом запросе):
"Найди в базе варианты по запросу: {сжатый_запрос}"
Пример применения
Ситуация: Ты консультант по выбору CRM-системы для малого бизнеса. Клиент час рассказывал о своей компании, упомянул 20 разных потребностей.
Задача: Превратить длинный диалог в концентрированный запрос для поиска подходящих CRM.
Вариант 1: Self-Reflection паттерн
Промпт:
Дан диалог с клиентом:
"""
[Клиент 40 минут рассказывал про свой бизнес — оптовая торговля стройматериалами,
15 человек в офисе, работают с 200 контрагентами, ведут учёт в Excel,
хотят автоматизировать выставление счетов, отслеживать дебиторку,
интегрироваться с 1С, бюджет до 150 тысяч рублей в год...]
"""
Я знаю что для них идеально подходит amoCRM Комплексная (с модулем Финансы).
Задача: Какие 5-7 ключевых критериев из диалога привели к этому выбору?
Игнорируй общие фразы типа "автоматизация" или "удобство".
Выдели ТОЛЬКО конкретные требования которые есть в amoCRM Комплексная.
Формат: маркированный список критериев.
Результат: LLM выдаст концентрированный список типа:
- Интеграция с 1С
- Модуль работы с дебиторской задолженностью
- Выставление счетов внутри системы
- До 15 пользователей
- Ценовой сегмент до 150 тыс/год
- Оптовая торговля (не розница)
Эти критерии теперь можно использовать для точного поиска альтернатив.
Вариант 2: Contrastive Selection
Промпт:
Контекст: Клиент — оптовая торговля стройматериалами, 15 человек, бюджет 150 тыс/год,
нужна интеграция с 1С, работа с дебиторкой, выставление счетов.
Вот 4 CRM которые нашёл поиск:
1. amoCRM Комплексная — есть модуль Финансы, интеграция с 1С, до 20 юзеров, 12 тыс/мес
2. Битрикс24 Компания — есть учёт товаров, интеграция с 1С, до 50 юзеров, 11 тыс/мес
3. Мегаплан — простая CRM, нет работы с финансами, до 10 юзеров, 6 тыс/мес
4. Salesforce Essentials — нет интеграции с 1С из коробки, от 25$/юзер/мес
Задача:
1. Для каждого варианта — почему он НЕ подходит (или подходит хуже)
2. Выбери лучший и объясни
Формат:
Не подходят / хуже:
1. [причина]
...
Выбор: [номер] — [объяснение]
Результат: LLM разберёт нюансы:
- amoCRM Комплексная — подходит идеально, всё есть
- Битрикс24 — перегружен для задачи, нет специализированного модуля финансов
- Мегаплан — слишком простая, нет нужного функционала
- Salesforce — дорого + нет интеграции с 1С
Выбор: 1 — amoCRM Комплексная, потому что...
Почему это работает
Слабость LLM: Модель не умеет автоматически выделять главное из шума. Когда ей дают длинный диалог и говорят "сделай запрос" — она пытается сохранить всё, теряет фокус, добавляет общие слова. Результат: поиск находит не то.
Сильная сторона LLM: Модель отлично работает когда у неё есть якорь — конкретная точка опоры. Если показать правильный ответ и спросить "почему именно он?" — LLM чётко выделит связь между диалогом и ответом. Это self-reflection: модель смотрит на свой же вывод и извлекает логику.
Как метод использует силу: ReGeS даёт LLM правильный ответ и заставляет объяснить почему. Это создаёт псевдо-разметку: "вот диалог, вот идеальный запрос для него". Потом другая LLM учится воспроизводить такие запросы без подсказки. В промптах мы делаем то же самое вручную: показываем правильный ответ → просим найти ключевые слова → используем их для поиска.
Второй механизм — hard negatives: Когда LLM учат на случайных неправильных вариантах, она не видит тонких различий. Все неправильные варианты "далеко" от правильного, легко отличить. Но в реальности retriever найдёт похожие варианты — те, что отличаются одним-двумя критериями. ReGeS тренирует модель именно на таких hard negatives. В промптах это работает так: вместо "выбери из 100 вариантов" даём "вот 5 похожих, найди различия".
Рычаги управления в промптах:
- Детальность self-reflection → "3-5 слов" vs "подробный анализ критериев"
- Меньше слов = концентрированный запрос, лучше поиск
- Больше деталей = глубокий анализ, но может зашуметь поиск
- Число вариантов для сравнения → 3-5 vs 10+
- Меньше = проще различать, быстрее
- Больше = полнее охват, но сложнее для модели
- Формат вывода → "только список слов" vs "список + объяснение"
- Без объяснений = быстро, для автоматизации
- С объяснениями = видишь логику, можешь корректировать
Ограничения
⚠️ Требует правильный ответ: Self-reflection паттерн работает только если ты уже знаешь правильный вариант. Для неизвестных задач — не подходит.
⚠️ Два запроса вместо одного: Двухшаговая схема (сжатие → поиск) дороже по токенам и времени чем прямой запрос.
⚠️ Зависит от качества поиска: Contrastive selection работает только если retriever нашёл релевантные варианты. Если поиск провалился — выбирать не из чего.
⚠️ Не для простых случаев: Когда вариантов мало или они сильно различаются — эти паттерны избыточны. Применяй для задач где реально нужно различать нюансы.
Как исследовали
Команда взяла две классические базы диалоговых рекомендаций: ReDial (10 тысяч диалогов про фильмы, короткие разговоры) и INSPIRED (800 диалогов, более глубокие предпочтения). Идея была проверить гипотезу: наивный RAG проваливается в диалогах из-за шумных запросов и похожих кандидатов.
Сначала протестировали базовый RAG: скормили retriever оригинальный диалог — получили Recall@5 = 3.5%. То есть правильный фильм попал в топ-5 найденных только в 3.5% случаев. Это провал. Попробовали промпт "перефразируй диалог в запрос" — стало лучше, но всё равно слабо.
Потом построили ReGeS в два этапа:
Этап 1 — Query Expert: Взяли Gemma-2B, Llama3.1-8B и Gemma-27B. Для каждого диалога + правильного фильма промптили LLM: "создай идеальный запрос". Получили псевдо-разметку: 10 тысяч пар (диалог → идеальный запрос). Fine-tuned другую LLM воспроизводить такие запросы без знания правильного ответа. Использовали LoRA (rank=8) чтобы экономить память. Результат: Recall@5 вырос до 20-40% в зависимости от retriever.
Этап 2 — Item Generator: Взяли refined queries от Query Expert, скормили retriever-ам (DPR, BGE, OpenAI embeddings). Retriever вернул топ-50 кандидатов для каждого диалога. Среди них — правильный фильм + 49 похожих неправильных (hard negatives). Fine-tuned генератор контрастивно: максимизировать вероятность правильного, минимизировать похожих.
Что сравнивали:
- Традиционные методы (KBRD, KGSF, UniCRS) — используют графы знаний
- Чистые LLM (GPT-3.5, GPT-4, Vicuna) — генерируют без retrieval
- Базовые RAG (RARS, RAMO) — простой retrieval + generation без reciprocal synergy
Почему результаты получились такими:
ReGeS удвоил точность рекомендаций по сравнению с лучшим baseline (UniCRS: 4.9% → ReGeS: 10.8% на ReDial). Ключевой инсайт: взаимное усиление критично. Когда убрали Query Expert (использовали raw диалог) — retrieval провалился. Когда убрали hard negatives из обучения генератора — модель начала галлюцинировать (5% vs 0.13% с hard negatives).
Удивительный результат: Chain-of-Thought помог не всегда. На ReDial CoT дал +3% к точности, на INSPIRED — вообще не помог. Авторы объясняют: короткие диалоги (ReDial) выигрывают от явного рассуждения, а длинные (INSPIRED) уже содержат всю нужную информацию.
Второй неожиданный вывод: больше кандидатов ≠ лучше. На INSPIRED топ-10 кандидатов дал лучший результат чем топ-50. Причина: INSPIRED содержит более информативные диалоги → retriever работает точнее → узкий список проще для генератора. На ReDial наоборот: диалоги короткие → retriever слабее → нужен широкий охват топ-50.
Практический инсайт: Для коротких шумных диалогов (как ReDial) — делай широкий retrieval и компенсируй контрастивной генерацией. Для детальных диалогов (как INSPIRED) — сужай поиск и упрощай выбор генератору.
Оригинал из исследования
Промпт для генерации псевдо-запроса (Query Expert обучение):
Given the conversation history and the recommended item,
generate a concise search query that captures the user's
core preferences leading to this recommendation.
Conversation: <conversation_history>
Recommended Item: <item_name>
Query (5-10 words):
Промпт для контрастивного обучения генератора:
Given the conversation and candidate items,
select the item that best matches the user's preferences.
Conversation: <conversation_history>
Candidates:
1. <item_1>
2. <item_2>
...
N. <item_N>
Think step by step about why each candidate does or
doesn't fit the user's stated preferences.
Your answer (number only):
Контекст: Исследователи использовали эти промпты для создания обучающих данных. Первый промпт генерировал идеальные запросы (self-supervision), второй — обучал модель различать похожие варианты. Важно: ground truth item (<item_name>) подставлялся только на этапе создания псевдо-разметки, не во время inference.
Адаптации
💡 Адаптация для карьерных советов
Ситуация: Ты карьерный коуч. Клиент час рассказывал о своей ситуации, упомянул 15 разных факторов. Нужно выбрать 1 из 4 карьерных треков.
Промпт с self-reflection:
Дан разговор с клиентом про карьеру:
"""
[28 лет, работает аналитиком в банке 4 года, устал от рутины,
хочет творчества, но боится нестабильности, есть ипотека,
любит общаться с людьми, интересуется психологией,
в детстве мечтал быть учителем, сейчас зарплата 150к...]
"""
Я знаю что для него подходит трек "HR-специалист в крупной компании".
Задача: Какие 3-5 ключевых факторов из разговора указывают на этот выбор?
НЕ пиши общие вещи типа "хочет развития". Только конкретные связки.
Формат: список через точку с запятой.
Потом используй эти факторы для поиска похожих кейсов или проверки альтернативных треков.
🔧 Техника: Явное сравнение вместо абстрактного выбора
Что меняем: Вместо "выбери лучший" → "для каждого объясни почему НЕ подходит"
Эффект: LLM глубже анализирует различия, меньше галлюцинирует
Промпт:
Контекст: {задача}
Варианты:
1. {вариант_1}
2. {вариант_2}
3. {вариант_3}
НЕ выбирай сразу. Сначала:
ШАГ 1: Для каждого варианта напиши 1-2 недостатка относительно задачи
ШАГ 2: Только потом выбери лучший и объясни почему
Формат:
Недостатки:
1. [текст]
2. [текст]
3. [текст]
Выбор: [номер] — [почему]
Когда применять: Задачи где варианты похожи и легко ошибиться. Выбор фреймворка, найм кандидата, выбор стратегии.
Ресурсы
ReGeS: Reciprocal Retrieval–Generation Synergy for Conversational Recommender Systems
- Код: github.com/dayuyang1999/ReGeS
- Авторы: Dayu Yang, Hui Fang (University of Delaware)
- Отсылки: RAG (Retrieval-Augmented Generation), DPR (Dense Passage Retrieval), LoRA (Low-Rank Adaptation)
