TL;DR
TAG-EQA — метод промптинга, который превращает связи между событиями в текстовые утверждения и добавляет их в промпт. Вместо того чтобы модель сама искала как события влияют друг на друга, вы явно говорите: "Событие А разрешает событие Б", "Событие В блокирует событие Г". Модель получает готовую карту зависимостей и рассуждает по ней.
Модели плохо видят скрытые причинно-следственные цепочки в тексте. Они цепляются за поверхностные совпадения слов и пропускают логику "А запустило Б, Б привело к В, но Г заблокировало Д". Особенно сложно когда нужно пройти через 3-4 шага: музыкальный фестиваль → привлёк толпу → толпа собралась → но полиция заблокировала митинг. Без явной карты модель теряет нить.
Метод работает в три входа: только текст, только граф связей, или текст + граф вместе. Граф — это список простых предложений: "организаторы объявили" разрешает "люди собрались", "полиция выехала" блокирует "митинг прошёл". В CoT-режиме модель ещё показывает рассуждения пошагово. Точность поднимается на 5-18% по сравнению с обычным текстом — особенно для вопросов про причинность и время.
Схема метода
ВХОД: Текст + Вопрос о событиях
ПОСТРОИТЬ ГРАФ (вручную или попросить модель):
→ Список событий из текста
→ Связи между ними: "А разрешает Б" или "В блокирует Г"
ПРОМПТ = [Инструкция] + [Текст] + [Граф словами] + [Вопрос]
Опционально: добавить примеры (Few-shot) или попросить рассуждения (CoT)
Всё выполняется в одном запросе. Граф пишется обычными предложениями, никакого кода.
Пример применения
⚠️ Метод работает лучше всего для: вопросов про причинность, временные зависимости, цепочки событий. Не подходит: для простых фактов, мнений, субъективных оценок.
Задача: Разобраться влияли ли действия Wildberries на провал запуска нового конкурента на рынке маркетплейсов.
Контекст: В марте Ozon запустил агрессивную рекламную кампанию. Wildberries в ответ снизил комиссию для продавцов. Продавцы массово остались на WB. Новый маркетплейс YaBazar объявил о запуске в апреле. В это же время WB запустил бонусную программу лояльности. Продавцы, которые планировали попробовать YaBazar, остались на WB из-за бонусов. YaBazar провалил старт.
Вопрос: Заблокировали ли действия Wildberries успешный запуск YaBazar?
Промпт:
Проанализируй последовательность событий и ответь на вопрос.
ТЕКСТ:
В марте 2024 Ozon запустил агрессивную рекламную кампанию по привлечению продавцов.
Wildberries в ответ снизил комиссию для продавцов с 5% до 3%.
Продавцы массово остались на Wildberries.
Новый маркетплейс YaBazar объявил о запуске в апреле.
В это же время Wildberries запустил программу кэшбэка для продавцов — 10% на первые продажи.
Многие продавцы, которые собирались попробовать YaBazar, остались на WB из-за выгодных условий.
YaBazar запустился с пустыми витринами и провалил старт.
ГРАФ СОБЫТИЙ:
- "Ozon запустил рекламу" разрешает "привлечение продавцов на Ozon"
- "WB снизил комиссию" блокирует "уход продавцов на Ozon"
- "Продавцы остались на WB" блокирует "переход на Ozon"
- "YaBazar объявил запуск" разрешает "интерес продавцов к YaBazar"
- "WB запустил кэшбэк" блокирует "переход продавцов на YaBazar"
- "Продавцы остались на WB" блокирует "старт YaBazar с продавцами"
- "YaBazar без продавцов" разрешает "провал запуска"
ВОПРОС:
Заблокировали ли действия Wildberries успешный запуск YaBazar?
Объясни пошагово, используя граф событий.
Результат: Модель покажет цепочку рассуждений: как кэшбэк WB заблокировал переход продавцов → как отсутствие продавцов привело к провалу → какую роль сыграли действия WB в этой цепи. В финале — чёткий ответ "да" или "нет" с обоснованием через граф.
Почему это работает
Модели не видят неявные причинно-следственные связи в потоке текста. Они хорошо находят прямые упоминания ("Х привело к Y"), но теряются когда нужно пройти цепочку: А → Б → В → Г. Особенно если между событиями 2-3 абзаца или связь выражена косвенно.
Модели отлично следуют явным инструкциям. Когда вы прописываете "Событие 1 разрешает Событие 2" — это снимает неопределённость. Вместо догадок модель работает по чёткой карте: вот барьеры, вот катализаторы, вот что от чего зависит.
TAG-EQA переводит структуру в слова: граф становится списком простых предложений. Модель обрабатывает их как часть контекста, без спецсинтаксиса. Когда это сочетается с CoT (пошаговым рассуждением), модель проговаривает логику вслух — проходит по графу, объясняет почему событие произошло или нет.
Рычаги управления:
- Тип связей — можешь добавить свои типы: "усиливает", "отменяет", "ускоряет"
- Глубина графа — сколько шагов описывать. Для простых задач хватит 3-5 связей, для сложных можно 10-15
- Формат вывода — в CoT попроси "объясни пошагово" или "просто ответь". Если хочешь видеть рассуждения — оставь CoT, если только ответ — убери
- Детализация событий — можно дробить крупные события на подсобытия: "запустил рекламу" → "создал креативы", "купил показы", "привлёк трафик"
Шаблон промпта
Проанализируй последовательность событий и ответь на вопрос.
ТЕКСТ:
{текст_с_описанием_ситуации}
ГРАФ СОБЫТИЙ:
{список_связей_между_событиями}
- "Событие А" разрешает "Событие Б"
- "Событие В" блокирует "Событие Г"
...
ВОПРОС:
{вопрос_о_событиях}
Объясни пошагово, используя граф событий.
Что подставлять:
{текст_с_описанием_ситуации}— исходное описание ситуации с событиями{список_связей_между_событиями}— как события влияют друг на друга. Пиши: "разрешает" (одно позволяет другому), "блокирует" (одно мешает другому){вопрос_о_событиях}— что хочешь узнать про последовательность или причинность
🚀 Быстрый старт — вставь в чат:
Вот шаблон TAG-EQA для анализа событий. Адаптируй под мою задачу: [твоя ситуация].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
Модель спросит какие события есть в ситуации, как они связаны, и что ты хочешь узнать — потому что для построения графа нужно понять структуру зависимостей. Она возьмёт паттерн "разрешает/блокирует" и адаптирует под твою задачу.
Ограничения
⚠️ Нужен готовый граф: Метод работает когда у тебя УЖЕ есть список связей. Если события сложные или их много, построение графа вручную — это работа. Можно попросить модель построить граф сначала, но это добавляет шаг.
⚠️ Не для субъективных вопросов: Метод решает задачи про логику и последовательность. Для мнений, оценок креатива, эмоциональных реакций — не подходит.
⚠️ Качество = качество графа: Если пропустишь важную связь или неправильно укажешь "разрешает/блокирует" — модель пойдёт по неправильному пути. Граф нужно строить внимательно.
⚠️ Перегрузка контекста: Когда событий 20-30, список связей раздувает промпт. Модель может потеряться или упустить детали. Для сложных сценариев лучше дробить на части.
Как исследовали
Команда взяла TORQUESTRA — датасет с короткими текстами про события, вопросами "да/нет" и готовыми графами причинности, размеченными людьми. Каждый граф показывает какие события что разрешают или блокируют. Это дало чистую структуру без шума.
Проверили 9 конфигураций: три стратегии (Zero-shot, Few-shot, CoT) × три входа (только текст, только граф, текст+граф). Тестировали на T5-XXL (11B), Qwen-32B и GPT-3.5/4o. Полный датасет — 477 тысяч примеров, маленький срез — 1024 для экономии токенов с GPT.
Результаты показали: граф + CoT дают максимум для моделей типа Qwen (+18% к точности). T5 лучше работал с примерами, но без графа. GPT показал скромные улучшения — модель слабо реагировала на структуру.
Самое интересное: вопросы разбили на 13 типов — причинность, время, гипотезы, факты. Граф особенно помог для цепочек ("А привело к Б, Б к В"), временных зависимостей ("было ли Х во время Y?"), контрфактуалов ("если бы не А, то Б?"). Для простых фактов ("где произошло?") граф не дал преимущества.
Важная оговорка: Цифры показывают верхнюю границу эффекта, потому что графы были идеальные, размеченные людьми. В реальности граф нужно строить самому или попросить модель — и там будут ошибки.
Оригинал из исследования
Авторы использовали простой формат для графа — каждая связь отдельным предложением:
### Graph ###
The event "riot police deployed" blocks the event "protest rally".
The event "political opposition" enables the event "political opposition called rally".
The event "political opposition called rally" enables the event "protest rally".
The event "music" enables the event "draws many people to festival".
The event "dancing" enables the event "draws many people to festival".
The event "speeches" enables the event "draws many people to festival".
### Question ###
Did "gathered" happen while the organizers made a statement?
Это дословный пример из статьи — формат максимально простой. События в кавычках, связь словом "enables" или "blocks". Никаких спецсимволов.
Контекст: Исследователи тестировали как модель ответит на вопрос про одновременность событий, имея граф зависимостей. Модель должна была пройти цепочку: музыка → привлекла толпу → люди собрались, и проверить не заблокировала ли полиция митинг в это время.
Адаптации и экстраполяции
💡 Адаптация для планирования проектов
Метод работает для зависимостей в проектах — когда одна задача разрешает другую или блокирует:
Проанализируй план запуска продукта и ответь готов ли запуск к 1 апреля.
ГРАФ ЗАДАЧ:
- "Дизайн утверждён" разрешает "Разработка интерфейса"
- "Интерфейс готов" разрешает "Тестирование"
- "Баг в оплате не исправлен" блокирует "Публичный запуск"
- "Маркетинг запущен" разрешает "Привлечение трафика"
- "Нет трафика" блокирует "Продажи в первый день"
Текущая дата: 25 марта. Баг в оплате ещё в работе.
ВОПРОС: Сможем ли мы запуститься 1 апреля с продажами в первый день?
Объясни пошагово через граф зависимостей.
Модель пройдёт по цепочке блокировок и скажет где узкое место.
🔧 Техника: Двусторонние связи → более точная логика
Что меняем: Вместо односторонних "А разрешает Б" добавь обратные связи — что блокирует А, что усиливает Б.
Какой эффект: Модель видит полную картину — не только что разрешает событие, но и что может его остановить.
ГРАФ (расширенный):
- "WB снизил комиссию" разрешает "Рост числа продавцов на WB"
- "Рост продавцов на WB" блокирует "Переход на конкурентов"
- "Переход на конкурентов" разрешает "Рост конкурентов"
+ Обратные связи:
- "Низкие продажи на WB" блокирует "Рост числа продавцов"
- "Высокая комиссия конкурентов" блокирует "Переход на конкурентов"
Теперь модель учтёт что может сломать цепочку — не только прямые разрешения.
🔧 Техника: Веса связей → приоритет событий
Что меняем: Добавь силу связи: "сильно разрешает", "слабо блокирует".
Какой эффект: Модель поймёт какие события критичны, а какие второстепенны.
ГРАФ (с весами):
- "WB снизил комиссию" СИЛЬНО разрешает "Рост продавцов"
- "Новая реклама YaBazar" СЛАБО разрешает "Интерес к YaBazar"
- "Продавцы остались на WB" СИЛЬНО блокирует "Старт YaBazar"
В CoT модель объяснит: "Хотя реклама YaBazar создала интерес, но это слабый фактор. Кэшбэк WB сильно заблокировал переход — это перевесило."
Ресурсы
TAG-EQA: Text-And-Graph for Event Question Answering via Structured Prompting Strategies
Датасет TORQUESTRA: https://github.com/MaithiliKadam4/TAG-EQA
Maithili Kadam, Francis Ferraro (University of Maryland, Baltimore County)
