TL;DR
EVoSS — метод решения математических задач, который использует два параллельных подхода: сначала LLM разбирает задачу на компоненты, превращает их в уравнения и решает точно (через внешний решатель), а затем отдельно прикидывает ответ на глаз. Если точный расчёт и прикидка не сходятся — значит где-то ошибка.
LLM хорошо умеет прикидывать ("примерно 50 рублей"), но плохо считает точно (может выдать 47.3 вместо 50). При этом когда LLM ошибается в точных расчётах, он обычно промахивается сильно — не на 5%, а в разы. Это делает проверку через грубую оценку очень эффективной: если оценка "примерно 50", а точный ответ "273" — точно что-то не так.
Метод работает в 4 шага: (1) разбить задачу на утверждения, (2) превратить в уравнения, (3) решить через символьный решатель, (4) попросить LLM отдельно оценить ответ без точных вычислений. Если расхождение больше 40-50% — запускается исправление с подсказкой из оценки.
Схема метода
ШАГ 1: Декомпозиция
Задача → [утверждения] + [вопрос]
ШАГ 2: Генерация уравнений
[утверждения] → система уравнений
ШАГ 3: Точное решение
Уравнения → внешний решатель → точный ответ
ШАГ 4: Проверка через оценку
Задача → LLM оценивает "на глаз" → приблизительный ответ
ШАГ 5: Верификация
|точный - оценка| / точный < 50% → ✓ верно
|точный - оценка| / точный > 50% → ✗ исправление с подсказкой
Все шаги выполняются отдельными запросами к LLM.
Пример применения
Задача: Рассчитываешь юнит-экономику для доставки еды в Казани. CAC (стоимость привлечения клиента) = 800₸, средний чек = 2400₸, маржинальность 35%, клиент делает 4 заказа в среднем. Окупается ли клиент?
Промпт (точное решение):
Разбей задачу на утверждения:
- CAC = 800₸
- Средний чек = 2400₸
- Маржа = 35%
- Частота заказов = 4
Создай уравнения и найди:
- Прибыль с одного заказа
- Прибыль с клиента за весь цикл
- LTV (lifetime value)
- Окупаемость (LTV - CAC)
Промпт (проверка оценкой):
Та же задача, но не решай точно — прикинь примерно:
Если чек 2400₸, маржа треть, то с заказа примерно 800₸.
За 4 заказа примерно 3200₸.
Минус CAC 800₸ → чистая прибыль около 2400₸.
Грубая оценка: клиент окупается ~в 3 раза.
Результат:
Получишь два ответа — точный расчёт (например, LTV-CAC = 2560₸) и прикидку (~2400₸). Если близко — верификация пройдена. Если точный расчёт выдал "13700₸" — явно ошибка в уравнениях, LLM ошибся.
Почему это работает
Слабость LLM: Модель хорошо понимает логику задачи, но арифметика — слабое место. При сложных расчётах с несколькими шагами вероятность ошибки растёт экспоненциально. Особенно если в задаче 2-3 уравнения и большие нецелые числа.
Сильная сторона LLM: Зато модель отлично прикидывает порядок величины. Когда просишь "оцени примерно", LLM включает другой режим — округляет, упрощает, думает в целых числах. Это гораздо надёжнее.
Как метод использует это: Точные вычисления делегируются внешнему символьному решателю (например, Python SymPy), который не ошибается в арифметике. А LLM занимается тем, что умеет хорошо — разбирает логику задачи и проверяет разумность результата через прикидку. Два независимых пути к ответу делают систему устойчивой к ошибкам.
Важный инсайт: Когда LLM ошибается в точных расчётах, он обычно ошибается сильно — не на 10%, а в разы. Поэтому грубая проверка "ответ должен быть около X" очень эффективна для отлова ошибок.
Рычаги управления:
- Порог верификации (α): можно менять от 40% до 60% — чем выше, тем мягче проверка (меньше ложных срабатываний, но выше риск пропустить ошибку)
- Число попыток генерации уравнений: авторы используют максимум 3 — можно увеличить для сложных задач
- Подсказка при исправлении: можно давать не только оценку, но и конкретные правила ("проверь знаки", "пересчитай третье уравнение")
Шаблон промпта
**ШАГ 1: Точное решение**
Разбери задачу на компоненты:
{описание задачи}
1. Выдели все числовые данные
2. Определи что нужно найти
3. Создай уравнения
4. Реши систему уравнений
5. Выдай ответ в формате "Ответ: {число}"
**ШАГ 2: Проверка оценкой**
Не решай точно — прикинь примерно:
{та же задача}
Округли все числа до удобных, упрости расчёт в уме.
Выдай оценку: "Примерно {число}"
**ШАГ 3: Сравнение**
Точный ответ: {ответ из шага 1}
Оценка: {ответ из шага 2}
Расхождение больше 50%? Если да — объясни где могла быть ошибка и пересчитай.
Что подставлять:
{описание задачи}— полный текст задачи с данными{число}— числовой ответ- Порог 50% можно менять: для простых задач хватит 40%, для сложных можно 60%
🚀 Быстрый старт — вставь в чат:
Вот шаблон метода двойной проверки через точный расчёт и прикидку.
Адаптируй под мою задачу: {твоя задача с расчётами}
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про конкретные числа и что нужно найти — потому что для генерации уравнений нужны все переменные явно. Она возьмёт паттерн "точно → оценка → сравнение" и адаптирует под задачу.
Ограничения
⚠️ Сложные системы уравнений: Если задача требует 4+ уравнений с нелинейными зависимостями, LLM может ошибиться в их составлении. Точный расчёт будет корректен только если уравнения верны.
⚠️ Ложные совпадения: Если LLM ошибся одинаково в точном решении и в оценке (редко, но бывает), верификация пройдёт, хотя ответ неверен.
⚠️ Задачи без числового ответа: Метод работает только там, где можно прикинуть порядок величины — в символьных преобразованиях или доказательствах не применим.
Как исследовали
Исследователи взяли три популярных датасета математических задач разной сложности (GSM8K — школьные задачи, SVAMP — простые арифметические, Algebra — средняя школа с уравнениями) и сравнили EVoSS с девятью современными методами: Chain-of-Thought, Program-aided Learning, BRIDGE и другими. Все методы тестировали на GPT-3.5-turbo с одинаковыми настройками (temperature 0.4).
Ключевой вопрос — насколько добавление проверки через оценку улучшает точность? Провели ablation study: сравнили решатель без верификации (просто уравнения → SymPy) и с верификацией через оценку. Разница оказалась 8-13% в точности. Это огромный скачок для такого простого дополнения.
Что удивило — метод работает не только на арифметике. Создали новый датасет Trig300 с тригонометрическими задачами (синусы, косинусы, тангенсы), где традиционные методы показывали 4-17% точности, а EVoSS достиг 65.5%. Оказалось, прикидка работает и для тригонометрии: можно упростить "sin(40°) ≈ 0.64" и прикинуть ответ.
Ещё нашли 50 ошибок в популярном датасете SVAMP (вопросы были некорректны, двусмысленны или физически невозможны) и опубликовали исправленную версию SVAMPClean. После исправлений все методы показали на 1-3% лучше — подтверждает, что проблема была в данных.
Вывод исследования — двойная проверка через разные методы (точный vs приблизительный) эффективнее чем просто повторять один и тот же метод (как в self-consistency). EVoSS обошёл self-consistency на 2-7% именно потому что два пути к ответу независимы: точные расчёты могут ошибиться в одном месте, прикидка — в другом, и они взаимно ловят ошибки.
Оригинал из исследования
Контекст: Авторы показывают полный промпт для генерации уравнений (с примером из датасета Algebra). Это важно, потому что структура промпта влияет на качество уравнений.
Let a be the price of the monthly pass [[var a]].
Let b be the price of the bundle with 20 day passes [[var b]].
We have [[eq b = a + 10]].
Since the bundle costs $10 more than the monthly pass, we have [[eq b = 1.2 * a]].
The answer is the value of a [[answer a]].
Формат с [[var X]], [[eq ...]], [[answer X]] помогает LLM структурировать вывод и упрощает парсинг для отправки в SymPy.
Промпт для оценки (из той же задачи):
To find a rough estimation, we can assume the monthly pass costs $x.
According to the first statement, the bundle with 20 day passes costs 1.2 times more,
so it would be 1.2x. And according to the second statement, the bundle costs $10 more
than the monthly pass, so 1.2x = x + 10. Solving for x: 1.2x = x + 10, 0.2x = 10, x = 50.
Therefore, the price of the monthly pass is roughly $50.
LLM сам решает при оценке, но делает это через упрощённые шаги в голове. Ключевое слово "roughly" (примерно) настраивает модель на менее строгий режим.
Адаптации и экстраполяции
💡 Адаптация для финансового планирования:
Метод отлично работает для проверки личных финансовых расчётов — ипотека, инвестиции, накопления.
**Задача:** Планирую досрочное погашение ипотеки.
Остаток долга: 3,200,000₸
Ставка: 15% годовых
Срок: 10 лет
Хочу платить +50,000₸ сверху каждый месяц
**Точный расчёт:**
Создай формулы для:
- Ежемесячный платёж по графику
- Новый платёж с доплатой
- Когда закрою досрочно
- Сколько процентов сэкономлю
**Проверка оценкой:**
Прикинь без формул:
Переплата по ставке ~половина долга за 10 лет (упрощённо).
Доплата 50к/месяц = 600к/год → за ~5 лет доплачу 3 млн.
Значит закрою примерно в 2 раза быстрее → сэкономлю процентов примерно вполовину от переплаты.
🔧 Техника: добавить третий метод проверки → триангуляция
Вместо двух путей (точный + оценка) можно добавить третий — решение через аналогию:
**ШАГ 3: Проверка через аналогию**
Найди похожую задачу из общих знаний:
"Стандартная окупаемость клиента в e-commerce при марже 30%
и среднем чеке 2000₸ — около 3-4 заказов."
Сравни с твоим результатом. Если сильно отличается — объясни почему.
Три независимых подхода дают ещё более надёжную верификацию.
💡 Экстраполяция на нечисловые задачи:
Принцип "решай двумя способами и сравнивай" работает не только для чисел. Можно использовать для:
Проверки логики аргумента:
ШАГ 1: Построй формальную логическую цепочку доказательства
ШАГ 2: Объясни ту же мысль простыми словами, как для ребёнка
ШАГ 3: Если формальное доказательство приводит к выводу A,
а простое объяснение к выводу B — где противоречие?
Проверки технических решений:
ШАГ 1: Спроектируй архитектуру системы детально (компоненты, связи, протоколы)
ШАГ 2: Опиши ту же систему на уровне "что видит пользователь при каждом действии"
ШАГ 3: Если на схеме компонент X критичен, но в пользовательском сценарии его роль не видна — либо он лишний, либо в схеме ошибка
Ресурсы
Solving Math Word Problems Using Estimation Verification and Equation Generation — Mitchell Piehl, Dillon Wilson, Ananya Kalita, Jugal Kalita (University of Iowa, University of Colorado, University of Washington)
Код и датасеты: https://github.com/mitchellpiehl/EVoSS
Ключевые ссылки:
- Chain-of-Thought prompting (Wei et al., 2022)
- Plan-and-Solve prompting (Wang et al., 2023)
- BRIDGE (Wang et al., 2024)
- Declarative prompting с SymPy (He-Yueya et al., 2023)
