Complexity-based prompting: что это и как применять — метод выбора few-shot примеров для многошаговых задач, где сложность примера определяется числом шагов рассуждения. Авторы работы «Complexity-Based Prompting for Multi-step Reasoning» (Fu, Peng, Sabharwal, Clark, Khot; arXiv:2210.00720) показали: промпты с большим числом шагов дают заметно лучший результат на многошаговых задачах, а голосование среди самых сложных сгенерированных цепочек усиливает эффект.
Что такое complexity-based prompting
Метод предложен в работе Fu et al. на arXiv:2210.00720. Авторы изучают выбор примеров для chain-of-thought (CoT) промптинга — подхода, где модель получает несколько примеров с промежуточными шагами рассуждения и продолжает цепочку для новой задачи. В статье сказано, что промпты с более высокой сложностью рассуждения, то есть цепочки с большим числом шагов, дают существенно лучший результат на многошаговых задачах по сравнению с сильными базовыми подходами.
Ключевая идея: сложность примера измеряется числом шагов рассуждения. Авторы определяют шаг как строку, разделённую переносом строки. Это важно, потому что длинный текст с одним действием и короткий текст с четырьмя действиями — разные по сложности примеры, и метод выбирает второй.
Метод работает в двух частях. Input-часть отвечает за выбор примеров для промпта. Output-часть, названная complexity-based consistency, отвечает за выбор ответа при декодировании. Обе части опираются на одну интуицию: более сложные цепочки рассуждения ведут к более надёжному ответу.
Авторы сравнивают свой подход с ручным подбором примеров, эвристическими правилами и поиском по большому обучающему набору. В статье отмечено, что выбор по сложности рассуждения интуитивен, прост в реализации и экономит разметку.
Input-часть: как выбирать примеры
Input-часть метода — это выбор примеров с большим числом содержательных операций. Авторы формулируют гипотезу: если использовать сложные примеры как in-context «обучающие примеры», модель рассуждает лучше, потому что сложные случаи интуитивно включают в себя простые.
В экспериментах на GSM8K авторы выбирали восемь обучающих примеров с наибольшим числом шагов рассуждения. Средняя длина такого промпта составила 9,0 шага, тогда как ручной и случайный наборы дали 3,4 и 2,8 шага соответственно. Схожие тенденции наблюдались и на других наборах данных.
Для наборов без размеченных цепочек рассуждения авторы используют длину вопроса как альтернативный признак сложности, а затем вручную размечают цепочки для отобранных сложных вопросов. В статье отмечено, что тренд «сложнее промпт — лучше результат» сохраняется и при использовании длины вопроса, и при использовании длины формулы.
Ниже — учебный пример редакции, который показывает принцип выбора. Три задачи различаются числом содержательных операций:
| Задача | Содержание | Операции | Число операций | Ответ |
|---|---|---|---|---|
| A | 8 коробок по 6 ручек, 3 ручки отдали | умножение, вычитание | 2 | 45 |
| B | 4 полки по 9 книг, 7 книг убрали, добавили 2 набора по 5 книг | умножение, вычитание, умножение, сложение | 4 | 39 |
| C | 3 пачки по 12 карточек, половину отложили, 5 потеряли | умножение, деление, вычитание | 3 | 13 |
Пример B содержит четыре операции, пример C — три. Поэтому образцом становится B. Для этого выбора мы считаем содержательные действия; объём текста сам по себе результат сравнения не определяет.
Output-часть: complexity-based consistency
Output-часть метода авторы называют complexity-based consistency. Она развивает идею self-consistency: вместо жадного декодирования модель сэмплирует несколько цепочек рассуждения, которые могут привести к разным ответам, и выбирается ответ большинства.
В complexity-based consistency голосование идёт не среди всех сгенерированных цепочек, а среди top-K самых сложных. В экспериментах авторы установили N = 50 сэмплированных цепочек и наблюдали, что оптимальное K всегда меньше N — обычно 30–40. При K = N метод возвращается к обычному self-consistency.
Авторы также проверили обратный вариант: голосование среди K самых простых цепочек. В статье отмечено, что такой вариант всегда уступает голосованию среди всех цепочек. Это подтверждает, что при декодировании стоит учитывать именно сложные цепочки.
Практический вывод для читателя: если инструмент позволяет сэмплировать несколько ответов, имеет смысл отбирать для голосования самые длинные по числу шагов цепочки. Конкретное значение K подбирается под задачу; авторы приводят диапазон 30–40 при N = 50.
Полный few-shot промпт с примером B
Ниже — готовый промпт, который можно скопировать и вставить. Он использует пример B как самый сложный по числу операций и новую задачу для решения.
Решай задачи по образцу. Показывай каждое действие отдельной строкой.
Пример.
Задача: 4 полки по 9 книг, 7 книг убрали, добавили 2 набора по 5 книг. Сколько стало?
Решение:
1) 4 * 9 = 36 книг было.
2) 36 - 7 = 29 книг осталось после того, как убрали.
3) 2 * 5 = 10 книг добавили.
4) 29 + 10 = 39 книг стало.
Ответ: 39.
Задача: 5 коробок по 7 ручек, 4 ручки отдали, добавили ещё 2 коробки по 7 ручек. Сколько стало?
Решение:
Что менять под себя: подставьте свою задачу вместо последней, замените пример на свой самый сложный случай, сохранив формат «одно действие — одна строка». Если ваша задача не про арифметику, замените операции на шаги вашей предметной области, но принцип остаётся: каждое действие отдельной строкой.
Ручной эталон и проверки
Для учебного результата нужен ручной эталон ответа. Для новой задачи из промпта выше он такой: 5 * 7 = 35; 35 — 4 = 31; 2 * 7 = 14; 31 + 14 = 45. Ответ: 45.
Проверка первая — необходимость каждого действия. Уберите любое действие, и итог 45 не получится: без шага 3 выйдет 31, без шага 2 — 49. Это подтверждает, что все четыре операции содержательны.
Проверка вторая — независимый пересчёт. Конечное значение проверяется отдельно: 35 — 4 + 14 = 45. Такой пересчёт не повторяет порядок шагов модели, а считает итог заново.
Проверка третья — правило сложности. Число слов не считается сложностью: пример B длиннее примера C, но сложность определяется числом операций (4 против 3). Это правило помогает не спутать длину текста с числом шагов.
Минимум две проверки — необходимость действий и независимый пересчёт — дают основание принять ответ. Третья проверка удерживает выбор примера в рамках метода.
Чем отличается от CoT и self-consistency
Chain-of-thought промптинг, предложенный Wei et al., показывает, что модель может рассуждать по шагам, если получает примеры с промежуточными шагами. Исходная работа использовала восемь вручную написанных примеров, которые затем переиспользовались в последующих работах. Complexity-based prompting отвечает на вопрос, какие именно примеры выбирать: с наибольшим числом шагов.
Self-consistency, предложенный Wang et al., сэмплирует несколько цепочек и выбирает ответ большинства среди всех. Complexity-based consistency меняет правило голосования: ответ выбирается среди top-K самых сложных цепочек.
| Признак | CoT | Self-consistency | Complexity-based prompting |
|---|---|---|---|
| Выбор примеров | ручной набор | ручной набор | примеры с большим числом шагов |
| Декодирование | жадное | голосование по всем цепочкам | голосование по top-K сложным |
| Что даёт метод | базовое рассуждение | устойчивость ответа | усиление за счёт сложности |
| Экономия разметки | нет | нет | да, размечаются только сложные случаи |
Авторы отмечают, что их подход в большинстве случаев показывает лучший результат по сравнению с существующими схемами выбора примеров. На GSM8K и MultiArith выбор по сложности обошёл случайный, центроидный и поисковый подходы. На MathQA поисковый подход показал результат выше, но требует существенно больше разметки: полный обучающий набор против восьми примеров.
Границы применимости метода
Метод даёт выигрыш не всегда. Авторы проверили его на малых моделях и обнаружили, что сложные промпты не дают значимого прироста. В таблице5 для text-curie-001 (6,7B) и Flan-T5 (11B) приведены наборы Handcrafted, Random и Complex; указанные авторами изменения составили от -0,5 до +1,5 процентного пункта. Значимого выигрыша сложных примеров в этих экспериментах авторы не увидели. Авторы делают вывод: complexity-based prompting — эмерджентная способность, которая проявляется при достаточном масштабе модели.
Второе ограничение — состав пула примеров. Метод исследовали на задачах многошагового рассуждения. Если все ваши примеры содержат ровно одно действие, отбор по числу шагов их не различит. При этом авторы отдельно обсуждают перенос пользы сложных примеров на более простые тестовые задачи; качество на своей задаче нужно проверять отдельно.
Третье ограничение — стоимость. Сэмплирование 50 цепочек вместо одной увеличивает расход запросов. В статье приведена оценка: на валидационном наборе из 200 примеров жадное декодирование стоило около 6–8 долларов США, а сэмплирование 50 цепочек — 12–24 доллара. Эта оценка относится к расходам на GPT-3 в исследовании. В том же абзаце авторы указывают, что в ноябре 2022 года запросы к Codex были бесплатными. Это исторические сведения; текущую стоимость из них выводить нельзя.
Авторы также проверили устойчивость результата к формату шагов. Они заменили перенос строки на точку, точку с запятой и явную фразу «step i». Формат влияет на точность, но сложные промпты стабильно обходят простые при любом разделителе.
Как проверить свой промпт перед запуском
Разбор метода заканчивается там, где начинается ваша задача. Дальше полезно пройти короткую процедуру, которая не требует ни доступа к статье, ни запуска чужого интерфейса: вы проверяете собственный промпт на бумаге и только потом решаете, стоит ли его исполнять.
Сначала перечитайте свой пример и посчитайте в нём содержательные операции. Формулировка «одно действие — одна строка» задаёт формат, но не гарантирует, что строк действительно четыре. Бывает, что два вычисления записаны в одну строку через запятую, и тогда пример выглядит коротким, хотя по сути он сложный. Бывает и обратно: длинное пояснение занимает три строки, а операция внутри одна. Ориентируйтесь на то, сколько независимых преобразований нужно, чтобы прийти к ответу.
Затем проверьте, что выбранный пример действительно сложнее остальных ваших заготовок. Если у вас всего один пример, выбирать не из чего, и метод в input-части не проявится. Если примеров несколько, выпишите для каждого число операций и возьмите верхний. Полезно тут же записать, почему остальные оказались ниже: так вы увидите, не подменили ли сложность объёмом текста.
После этого соберите эталон ответа для новой задачи вручную, до всякого запуска. Считайте по действиям и сохраните промежуточные значения. Именно с ними вы будете сверяться, когда получите ответ модели. Если эталон не сходится у вас на бумаге, промпт запускать рано: сначала разберитесь с собственной арифметикой или логикой шагов.
Отдельно продумайте, что считать ошибкой. Ответ может разойтись с эталоном по трём разным причинам: неверное действие, верное действие с арифметической опечаткой, пропущенный шаг. Различать их полезно, потому что каждая причина указывает на своё место в промпте. Пропуск шага чаще говорит о том, что пример задаёт слабый образец, а опечатка — о том, что формат не удержал аккуратность записи.
Наконец, решите заранее, что вы сделаете с расхождением. Разумный порядок такой: сверить ответ с эталоном, найти первое место расхождения, вернуться к примеру и усилить именно тот шаг, который модель пропустила или исказила. Так проверка превращается в правку промпта.
Этот порядок опирается на тот же принцип, что и сам метод: сложность задаётся числом содержательных операций, а решение принимается по ручной сверке. Учебные значения из примера выше остаются условными; в вашей задаче числа и шаги будут своими, и эталон вы считаете сами.
Частые вопросы
Что такое complexity-based prompting простыми словами?
Это способ выбирать примеры для промпта по числу шагов рассуждения. В исследовании Fu et al. на arXiv:2210.00720 сложные примеры улучшали результаты крупных моделей на изученных задачах. Для своей модели и задачи полезность такого отбора нужно проверить отдельно.
Чем complexity-based prompting отличается от chain-of-thought?
Chain-of-thought даёт модели примеры с промежуточными шагами. Complexity-based prompting отвечает на вопрос, какие примеры выбирать: с наибольшим числом шагов. Это надстройка над CoT.
Что такое complexity-based consistency?
Это правило выбора ответа при декодировании. Модель сэмплирует N цепочек, и голосование идёт среди top-K самых сложных. При N = 50 авторы наблюдали оптимум K в диапазоне 30–40.
Работает ли метод на малых моделях?
Авторы проверили text-curie-001 (6,7B) и Flan-T5 (11B) и не увидели значимого прироста. Метод проявляется при достаточном масштабе модели, как и сам chain-of-thought.
Нужно ли размечать все примеры для промпта?
Нет. Для наборов без готовых цепочек авторы используют длину вопроса как признак сложности, отбирают сложные вопросы и размечают только их. Это снижает стоимость разметки по сравнению с полным набором.
