Разбираем Consistency-based Self-adaptive Prompting (COSP): LLM сам генерирует примеры для few-shot, используя собственную уверенность. Узнайте, как повысить точность без ручной работы. Читайте и применяйте!
Хотите заставить большую языковую модель рассуждать лучше, но устали выбирать между ручным подбором примеров и низкой точностью? Метод COSP (Consistency-based Self-adaptive Prompting) предлагает третий путь: модель сама создаёт примеры для few-shot, используя собственную уверенность. Разбираем, как это работает и как применить в своих проектах.
Когда вы пытаетесь улучшить рассуждения LLM, вы обычно сталкиваетесь с двумя кошмарами. Первый — полный few-shot: вы вручную создаёте красивые примеры, вставляете их в промпт, и модель становится умной. Но это нужно делать для каждой задачи, и точность пляшет, если примеры чуть-чуть другие. Второй — zero-shot с трюком «давай подумаем шаг за шагом»: без примеров, чисто и быстро, но модель иногда уходит в уверенное и совершенно неверное рассуждение. Один путь требует усилий, другой — жертвует точностью. COSP говорит: «почему бы не выбрать ни то, ни другое?»
Ключевое прозрение COSP: когда вы задаёте модели вопрос несколько раз, ответы не всегда одинаковы. Иногда 4 из 5 раз ответ совпадает, иногда все 5 разные. Этот разброс — не шум, а информация. Если модель стабильно даёт один и тот же ответ, она как бы говорит: «Я в этом уверена». Если ответы разбросаны — «Я гадаю». COSP использует этот сигнал, чтобы отобрать собственные ответы модели, достойные стать примерами для второго прохода. Модель производит сырой материал, а согласованность (consistency) выступает фильтром качества. Это лучший из двух миров: нулевая работа zero-shot и направляющая точность few-shot.
COSP работает в два этапа, затем завершается голосованием. На первом этапе для каждого вопроса модель генерирует несколько цепочек рассуждений. Затем COSP оценивает их по трём критериям: согласованность (насколько ответы совпадают), повторяемость (штраф за зацикливание) и разнообразие (чтобы примеры не были клонами). Отобранные примеры добавляются к исходным вопросам, модель запускается снова, и ответ выбирается большинством голосов.
Для каждого вопроса модель сэмплирует несколько путей рассуждения. COSP смотрит, насколько финальные ответы согласованы. Сильное согласие означает низкую неопределённость, что является хорошим признаком. В статье это квантуется через энтропию распределения ответов: низкая энтропия — ответы кучкуются, высокая — хаос. Ответы с низкой энтропией становятся кандидатами в примеры.
Иногда модель застревает в цикле и повторяет одну фразу, как заезженная пластинка. Такой вырожденный вывод коррелирует с плохим рассуждением. COSP штрафует такие ответы, чтобы они не проскочили в набор примеров только потому, что «согласованы» сами с собой.
Если все выбранные примеры — по сути один и тот же вопрос, они мало чему учат. COSP поощряет разнообразие, чтобы итоговый промпт покрывал разные аспекты задачи, а не четыре клона.
Рассмотрим классический вопрос: «У Генри было 11 долларов, он получил ещё 18, потратил 10 на игру. Сколько у него осталось?» Сэмплируем модель несколько раз и получаем разброс ответов. Три из четырёх попыток дают 19. Этот плотный кластер — низкая энтропия, что читается как высокая уверенность, и такой ответ можно использовать как пример. Одинокий 27 проигрывает голосование и не сбивает с толку. Согласованность выполнила контроль качества, который обычно требует ручной разметки.
Согласованность — это не то же самое, что правильность. Модель может быть стабильно, восторженно и многократно неправа. Если у неё систематическое заблуждение, она будет выдавать один и тот же неверный ответ с полной убеждённостью, и COSP с радостью вручит ему золотую звезду. Метод работает на практике потому, что сочетание критериев — согласованность, штраф за повторение, разнообразие и финальное голосование — отфильтровывает много мусора. Это не магия, а хорошая статистика, замаскированная под трюк с промптом.
Честный ответ: помогает существенно и почти бесплатно. На бенчмарках рассуждений COSP стабильно превосходит обычный zero-shot chain-of-thought и часто сравнивается или превосходит few-shot без ручных примеров. Авторы сообщают об улучшении до 15% по сравнению с zero-shot на трёх разных LLM. Вот примерные результаты на задачах рассуждения:
Заметьте закономерность: на нескольких задачах COSP тихо обгоняет даже few-shot, требующий ручного труда. На более сложных — попадает в ту же зону. В любом случае вы получаете результаты уровня few-shot, платя цену zero-shot.
Возьмите за правило: модель уже делает большую часть работы, мы просто выбрасывали полезную часть. Вместо ручного подбора примеров дайте модели сгенерировать кандидатов, отфильтруйте по согласованности, и пусть голосование решит. Этот ментальный шаблон полезен и вне данного метода: относитесь к согласованности ответов как к сигналу уверенности и позволяйте лучшим самогенерированным ответам улучшать следующий промпт. Если вы используете Python, вот простой скетч, как это можно реализовать:
import random
from collections import Counter
def generate_answer(question, model):
# Здесь вызов вашей LLM, возвращающей ответ
return model.generate(question)
def cosp_prompt(question, model, num_samples=5):
# Шаг 1: генерируем несколько ответов
answers = [generate_answer(question, model) for _ in range(num_samples)]
# Шаг 2: фильтруем по согласованности (простое голосование)
counter = Counter(answers)
most_common = counter.most_common(1)[0][0]
# Шаг 3: используем этот ответ как пример в новом промпте
prompt = f"Пример: {question} -> {most_common}\nТеперь ответь: {question}"
return model.generate(prompt)
Попробуйте применить этот подход в своих задачах: возьмите сложный вопрос, сгенерируйте несколько ответов, отберите согласованные и используйте их как примеры для финального вызова. Вы удивитесь, насколько это может повысить точность без единой ручной разметки.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →