Contrastive CoT: правильные и ошибочные примеры — это метод Chia et al., 2023, где few-shot демонстрация содержит вопрос, корректное объяснение, явно помеченное ошибочное объяснение и целевой вопрос. Ниже — полная процедура подготовки такой пары и разбор шести кандидатов D0–D5.
Что такое Contrastive CoT по первичному исследованию
Метод предложен в работе Contrastive Chain-of-Thought Prompting (Chia et al., 2023), опубликованной на arXiv (https://arxiv.org/pdf/2311.09277). Авторы описывают стандартный промпт как пару «вопрос и ответ», цепочку рассуждений — как вопрос, промежуточные шаги и финальный ответ. В их формулировке демонстрация Contrastive CoT включает и корректные, и ошибочные шаги рассуждения: Ej = (Qj, Tj,+, Aj,+, Tj,−, Aj,−). То есть модель видит оба варианта и учится на контрасте.
В работе различают два понятия. Bridging objects — символические элементы, которые модель проходит на пути к решению: числа и уравнения в арифметике, имена сущностей в фактических вопросах. Language templates — текстовые подсказки, которые направляют модель к правильным bridging objects. Отдельно вводится coherence — правильный порядок шагов в рассуждении.
Авторы отмечают, что в обычной цепочке рассуждений модель не знает, каких ошибок избегать, что ведёт к накоплению ошибок. Для ошибочных шагов T− они автоматически строят вариант из корректных T+, опираясь на категорию «Incoherent Objects»: модель распознавания сущностей извлекает из рационального объяснения числа, уравнения и имена, после чего позиции объектов случайно перемешиваются. Так получается рассуждение с несвязными bridging objects.
Отличие от похожих названий
Название легко спутать с соседними терминами. Contrastive CoT в этой работе — про текстовые демонстрации для языковой модели. Негативный промпт для генерации изображений — другая задача. Обучение весов модели — тоже другой процесс: здесь меняется только содержимое промпта, веса остаются нетронутыми. CoCoT про сравнение картинок — отдельная тема.
Внутри самой работы различают несколько типов неверных рассуждений. Авторы анализируют их и приходят к выводу, что сочетание положительных и отрицательных демонстраций в целом повышает эффективность цепочки рассуждений. Это утверждение из первичного исследования; его применимость к другой модели нужно проверять отдельно.
Проект с кодом живёт в репозитории DAMO-NLP-SG (https://raw.githubusercontent.com/DAMO-NLP-SG/contrastive-cot/main/README.md). В README описана установка через conda и pip, настройка ключа OpenAI в файле openai_info.json и запуск demo.py. Там же приведён пример с вопросом про велосипедную поездку Генри и вывод модели с корректным объяснением и помеченным ошибочным вариантом.
Полный самостоятельный вход и промпт
Ниже — самодостаточный вход, который можно скопировать целиком. Он собран по принятому учебному артефакту: вопрос, правильный образец, ошибочный образец с названной причиной и целевой вопрос.
Задача промпта — получить ответ на целевую задачу, показав модели один корректный и один ошибочный образец.
Используй размеченную пару примеров, чтобы избежать конкретной ошибки выбора действия. В конце верни только формулу, число жетонов и короткую проверку; не воспроизводи ошибочный образец как решение.
Учебный вопрос: было 12 жетонов, отдали 5, затем получили 2. Сколько осталось?
ПРАВИЛЬНЫЙ образец: после передачи 12−5=7; после получения 7+2=9. Ответ: 9.
ОШИБОЧНЫЙ образец: после передачи 12+5=17; после получения 17+2=19. Ответ: 19. Ошибка: «отдали» ошибочно превратили в прибавление; сами равенства 12+5=17 и 17+2=19 верны, но описывают другое действие.
Целевой вопрос: было 20 жетонов, отдали 6, затем получили 4. Сколько осталось?
Под себя меняйте условия задач в квадратных скобках: [ваш учебный вопрос], [ваш целевой вопрос], [ваша названная ошибка]. Структура «правильный образец — ошибочный образец — причина ошибки — целевой вопрос» остаётся неизменной.
Этот промпт не запускался в AI-сервисе. Эталон проверен локальной арифметикой, без обучения модели и без проверки интерфейса.
Авторский эталон целиком
Эталон целевой задачи из принятого артефакта: 20−6=14; 14+4=18; ответ 18. Это ожидаемый учебный результат. Реальный вывод сервиса здесь не приводится.
Отделяю эталон от возможного ответа модели. Если модель вернула 30, вероятная причина — скопированный неверный знак из ошибочного образца: там передача превращена в прибавление. Если вернулось 10, вероятная причина — вычитание получения вместо прибавления. Оба отклонения — учебные ожидания. Статистику запусков редакция не собирала.
Полная таблица кандидатов для исходного вопроса «Было 12 жетонов, отдали 5, затем получили 2. Сколько осталось?» выглядит так.
| Метка | Запись | Диагноз |
|---|---|---|
| D0 | 12−5=7; 7+2=9; ответ 9 | корректный положительный пример |
| D1 | 12+5=17; 17+2=19; ответ 19 | подлинно ошибочный: передачу прибавили, равенства верны |
| D2 | 12−5=9; 9+2=9; ответ 9 | подлинно ошибочный: два неверных равенства, итог совпал |
| D3 | 2+(12−5)=9; ответ 9 | корректный положительный: перестановка записи |
| D4 | 12−(5+2)=5; ответ 5 | подлинно ошибочный: получение 2 заменили вычитанием |
| D5 | 12−5=7; 7+2=9; ответ 9, метка ОШИБОЧНЫЙ | ошибка разметки, не отрицательная демонстрация |
Эталон приёмки: D0 и D3 годятся как положительные; D1, D2 и D4 — как отрицательные с названной причиной; D5 следует отвести.
Сверка чисел, действий, меток и ссылок
Каждый элемент проверяется отдельно. Соответствие действия условию: «отдали» требует вычитания, «получили» — прибавления. Истинность каждого равенства: в D1 равенства 12+5=17 и 17+2=19 арифметически верны, но описывают другое действие. Правильность метки: D5 содержит корректное решение с меткой ОШИБОЧНЫЙ.
Одного совпадения конечного ответа недостаточно. D2 даёт итог 9, совпадающий с правильным, но оба промежуточных равенства неверны. D3 даёт тот же итог 9 при корректной записи в другой форме. Слепая проверка по итогу примет оба, ручная проверка различит.
Ссылки на вход тоже сверяются. Первичное исследование — https://arxiv.org/pdf/2311.09277. Проект с кодом — https://raw.githubusercontent.com/DAMO-NLP-SG/contrastive-cot/main/README.md. В README указана модель gpt-3.5-turbo-0301 в файле openai_info.json, команды установки через conda и pip, запуск demo.py с флагом contrast_cot. Оценка на GSM8K в README показана как 0.692 для цепочки рассуждений и 0.796 для contrastive-варианта, с оговоркой о возможной вариативности.
Две отрицательные проверки и ожидаемый отказ
Проверка первая: поменять только метку D0 на WRONG. Содержимое остаётся корректным, меняется лишь ярлык. Проверка обязана отклонить такую пару: положительный пример с меткой ошибки сбивает модель.
Проверка вторая: заменить отрицательный D1 на корректный D3, сохранив метку WRONG. Запись корректна, ярлык ошибочен. Проверка также обязана отклонить пару.
Обе проверки — контрольные возмущения из принятого артефакта. Они показывают, что процедура приёмки реагирует на несоответствие метки и содержания и проверяет смысл каждого шага. D3 отличается от D0 порядком записи: 2+(12−5)=9 вместо 12−5=7; 7+2=9. Перестановка не делает пример ошибочным, автоматически подписывать его WRONG из-за иной формы нельзя.
Сравнение вклада с источниками и соседями
Первичное исследование уже содержит примеры неправильных рассуждений с правильным конечным ответом — это видно в Figure 2 работы. Присваивать себе открытие этого явления не стоит. Наша процедура ручной приёмки D0–D5 — учебный инструмент проверки авторских демонстраций. Новая версия исследовательского алгоритма и дефект его реализации здесь не заявлены.
Автоматический метод из работы извлекает сущности и переставляет их позиции. Наши D0–D5 эту реализацию не проверяют и не опровергают. Разница в задаче: авторы строят отрицательные примеры автоматически, наша таблица — ручной разбор качества меток перед использованием пары.
Соседние объяснения метода в открытых источниках описывают ту же идею сочетания корректных и ошибочных демонстраций. Их результаты — не наш опыт, и утверждать что-либо об их примерах мы не будем. Наш вклад ограничен процедурой приёмки и готовым промптом.
Ограничения исследования и когда примеры не нужны
Результаты в работе получены на GPT-3.5-turbo-0301 на исследовательских выборках. Переносить эти проценты на современные модели нельзя: это исторические измерения в условиях исследования. Метод не гарантирует ни правильный ответ, ни достоверность объяснения. Качество демонстраций остаётся ответственностью автора.
Дополнительные ходы и примеры не оправданы, когда задача решается одним шагом: для простого арифметического действия контраст ничего не добавляет, а промпт растёт. Лишние примеры вредят, когда отрицательный образец содержит ошибку, не связанную с целевой задачей: модель может скопировать не тот тип ошибки. Пара не нужна, когда у вас нет проверенного отрицательного примера с названной причиной — лучше отправить обычную цепочку рассуждений.
Порядок действий перед использованием собственной пары: сначала вручную проверить таблицу D0–D5, затем выбрать D0 и D1 для приведённого промпта. Только после этого подставлять свои задачи.
Частые вопросы
Что такое contrastive chain of thought prompting?
Это метод few-shot промптинга, где демонстрация содержит корректное объяснение и явно помеченное ошибочное объяснение, после чего идёт целевой вопрос. Предложен в работе Chia et al., 2023. Модель видит оба варианта и учится на контрасте между ними. Веса модели при этом не меняются.
Чем Contrastive CoT отличается от обычной цепочки рассуждений?
В обычной цепочке демонстрация состоит из вопроса, шагов рассуждения и ответа. Модель не знает, каких ошибок избегать. Contrastive CoT добавляет ошибочные шаги с пометкой, что ведёт к снижению накопления ошибок по описанию авторов.
Почему пример с правильным ответом может быть ошибочным?
Потому что проверяется не только итог. В D2 конечный ответ 9 совпадает с правильным, но оба промежуточных равенства неверны. Такой пример годится как отрицательный, и метка положительного ему не подходит.
Как проверить пару демонстраций перед отправкой?
Проверьте три вещи отдельно: соответствие действия условию, истинность каждого равенства и правильность метки. Затем прогоните два контрольных возмущения: смените метку корректного примера на WRONG и подставьте корректный пример под метку WRONG. Обе пары должны быть отклонены.
Можно ли переносить проценты из статьи на современные модели?
Нет. Результаты получены на GPT-3.5-turbo-0301 на исследовательских выборках. Это исторические измерения конкретной модели и конкретных наборов данных. Метод не гарантирует прирост точности или скорости на другой модели.
