Self-Consistency — повышение точности голосованием
Голосование за лучший ответ
Проблема: ИИ может быть непоследователен — задай один вопрос дважды и можешь получить разные ответы. Как повысить уверенность в результате?
Решение: Спроси нескольких экспертов
Self-Consistency означает генерацию нескольких путей рассуждения для одного и того же запроса и выбор самого частого итогового ответа. Вместо того чтобы доверять одному ответу, ты просишь модель решить задачу несколько раз, а потом проводишь "голосование" за тот ответ, который встретился чаще всего. Метод напрямую развивает Chain-of-Thought: если обычный CoT просит одно пошаговое решение, то Self-Consistency сэмплирует множество таких цепочек и оставляет ответ, на котором они сходятся.
Как это работает
Механизм опирается на температуру (temperature) — параметр, который задаёт, насколько случайно модель выбирает следующие токены. При температуре около 0 модель почти детерминирована и просто повторяла бы сама себя, поэтому Self-Consistency использует значение повыше (обычно 0.5–1.0), чтобы каждый прогон шёл немного другим путём рассуждения. Ты генерируешь, скажем, 5–40 ответов, вытаскиваешь из каждого финальный ответ, группируешь одинаковые вместе и выбираешь тот, что встречается в наибольшем числе цепочек. Идея простая: у задачи обычно один верный ответ, к которому ведут несколько корректных маршрутов, а каждый неверный ответ возникает из своей ошибки — поэтому правильный ответ набирает голоса, а ошибки рассеиваются.
Когда применять и какие компромиссы
Self-Consistency хорош на задачах с одним проверяемым ответом: арифметика, логические головоломки, рассуждения здравого смысла, задачи по коду. Он плохо подходит для открытых задач вроде творческого письма или пересказа, где нет "правильного" ответа, за который можно голосовать. Главная цена очевидна: прогон запроса N раз увеличивает расход токенов и задержку примерно в N раз, причём после ~10 выборок отдача быстро падает. И он не спасёт модель, которая уверенно ошибается всегда одинаково: если галлюцинация (hallucination) систематическая, а не случайная, большинство просто проголосует за неверный ответ. Разбор примера: спроси пять раз "Футболка стоит 40$ после скидки 20% — какой была изначальная цена?". Три цепочки верно считают 40 ÷ 0,8 = 50$, а две ошибаются и отвечают 48$ (прибавляют 20% вместо деления). Голосование большинством возвращает 50$ — правильный ответ, хотя почти половина отдельных попыток была неверной.
Представьте это как консультацию у нескольких экспертов:
- 1. Эксперт 1: "Думаю, ответ 42, потому что..."
- 2. Эксперт 2: "Я получил 42 другим методом..."
- 3. Эксперт 3: "Мой подход даёт 38, вот почему..."
- 4. Консенсус: Двое из трёх говорят 42 — это наш ответ!
Где это используется?
- Математические задачи: Сложные вычисления, где ошибки вероятны
- Медицинская диагностика: Получение второго и третьего мнения
- Ревью кода: Множественный анализ потенциальных багов
- Важные решения: Любые задачи, где точность критична
Интересный факт: Self-consistency может повысить точность на 5-15% в задачах на рассуждение! Ключ — использовать "температуру" (случайность), чтобы каждая попытка шла немного другим путём. Обычно достаточно 5-10 выборок.
Попробуйте сами!
Используй интерактивный пример ниже, чтобы увидеть, как несколько путей рассуждения могут привести к более надёжным ответам через голосование большинством.
Вместо одного ответа, генерируем множество путей рассуждения (5-40 сэмплов) при высокой температуре, затем выбираем самый частый итоговый ответ голосованием большинства.
Каждый сэмпл создаёт цепочку рассуждений → итоговый ответ. Ответы группируются по значению. Побеждает ответ, появляющийся в наибольшем числе сэмплов. Ничьи разрешаются по уверенности или первому вхождению.
5 сэмплов: ~5x стоимость, умеренное улучшение. 10 сэмплов: оптимальный баланс для большинства задач. 40 сэмплов: маргинальный рост. Температура 0.7-1.0 для разнообразных путей.
Лучше всего для: математики, логических задач, рассуждений здравого смысла, задач по коду. Не стоит для: творческого письма, открытых вопросов, задач без единственного правильного ответа.
🗳️ Self-Consistency — улучшение Chain of Thought! Генерируем несколько разных рассуждений и выбираем самый частый ответ через голосование. Это помогает избежать случайных ошибок!
В магазине было 12 яблок и 8 апельсинов. Продали 5 фруктов. Если среди проданных было 3 яблока, сколько апельсинов осталось?
Всего фруктов: 12 + 8 = 20. Продали 5, осталось 20 - 5 = 15. Апельсинов было 8, так что... примерно 6?
6 апельсинов
⚠️ Ошибка в рассуждении!
Создаём 5+ разных цепочек рассуждений с температурой > 0
Извлекаем финальный ответ из каждого пути
Выбираем самый частый ответ (majority vote)
- Математические задачи с несколькими шагами
- Задачи с логическими рассуждениями
- Когда важна высокая точность (медицина, финансы)
- Вопросы, где одна ошибка меняет весь ответ
Self-Consistency работает потому что даже если одно рассуждение содержит ошибку, правильный ответ чаще появляется в других путях. Это "мудрость толпы" для LLM! Минус: требует больше токенов (5× вызовов), но точность повышается на 10-30% для сложных задач.
Как использовать Self-Consistency
Self-Consistency — это НЕ особый промпт! Это метод агрегации нескольких ответов:
- Запускаешь один промпт несколько раз
- Используешь temperature > 0 для разнообразия
- Собираешь ответы и выбираешь самый частый
Шаг 1: Базовый промпт с CoT
Реши задачу пошагово:
{task}
Покажи рассуждения и дай ответ.Обычный промпт с Chain-of-Thought. Ничего особенного пока что.
Шаг 2: Генерация нескольких ответов
Вызови LLM 3-5 раз с одним и тем же промптом, но с temperature > 0 (например, 0.7).
Каждый раз ты получишь разные рассуждения и возможно разные ответы. Это нормально!
Шаг 3: Агрегация (код)
from collections import Counter
responses = [call_llm(prompt, temp=0.7) for _ in range(5)]
answers = [extract_answer(r) for r in responses]
final_answer = Counter(answers).most_common(1)[0][0]Используй Counter для подсчёта голосов. Самый частый ответ побеждает!
Пример конкретного промпта
Задача: Сколько будет 17 × 24?
Реши пошагово:
1. Разбей на простые операции
2. Вычисли каждую
3. Дай финальный ответ
Ответ:Запусти этот промпт 5 раз с temp=0.7. Собери ответы. Выбери самый частый.
Итого:
- Self-Consistency = обычный CoT промпт + множественные вызовы + голосование
- Промпт НЕ меняется! Меняется только количество вызовов и агрегация
- Temperature > 0 нужна для разнообразия ответов
- Финальный ответ = самый популярный через простой подсчёт
Техника описана в статье "Self-Consistency Improves Chain of Thought Reasoning in Language Models" (Wang et al., 2023). Показано улучшение на 1-12% на бенчмарках арифметики и здравого смысла по сравнению с единственным путём CoT.
Частые вопросы
Что такое Self-Consistency в промптинге?
Self-Consistency — это техника, при которой ты генерируешь несколько путей рассуждения (обычно 5–40) для одного и того же запроса при повышенной температуре, а затем выбираешь самый частый итоговый ответ голосованием большинства. Она развивает Chain-of-Thought: вместо одной цепочки рассуждений модель пробует много, и побеждает тот ответ, на котором они сходятся.
Чем Self-Consistency отличается от Chain-of-Thought?
Chain-of-Thought просит модель дать одно пошаговое решение. Self-Consistency идёт дальше: она сэмплирует много таких цепочек при ненулевой температуре и оставляет ответ, который встречается чаще всего. То есть Self-Consistency — это надстройка над CoT, повышающая надёжность за счёт голосования, но и стоящая в N раз дороже по токенам.
Сколько выборок нужно для Self-Consistency?
На практике достаточно 5–10 выборок: они дают основной прирост точности. Можно генерировать до 40, но после ~10 отдача быстро падает, а расход токенов и задержка растут линейно. Температуру обычно ставят в диапазоне 0.5–1.0, чтобы каждый прогон шёл немного другим путём рассуждения.
Когда Self-Consistency не работает?
Метод бесполезен на открытых задачах вроде творческого письма или пересказа, где нет единственного правильного ответа, за который можно голосовать. Он также не спасёт от систематической ошибки: если модель уверенно ошибается всегда одинаково (систематическая галлюцинация), большинство просто проголосует за неверный ответ. Лучше всего он работает на арифметике, логике и задачах по коду.
Попробуй сам
Интерактивное демо этой техники
В корзине 23 яблока. Если раздать их поровну 5 детям, сколько яблок останется?
23 ÷ 5 = 4.6, значит останется 3 яблока.
Способ 1 (деление с остатком): 23 ÷ 5 = 4 остаток 3 Останется: 3 яблока
Способ 2 (вычитание): 5×4 = 20 яблок раздали 23 - 20 = 3 яблока осталось
Способ 3 (проверка): 5×4 + 3 = 23 ✓ Останется: 3 яблока
Итоговый ответ: 3 яблока (все три способа дали одинаковый результат)
Self-Consistency проверяет ответ несколькими способами. Когда все методы дают один результат, мы уверены в его правильности.
Создайте бесплатный аккаунт для решения челленджей
3 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения