0Pricing
AI Prompt Engineering · Урок

Выборка с самосогласованностью

Голосование между несколькими путями рассуждения

«Выборка с самосогласованностью» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.

Одна цепочка ненадёжна

Одна цепочка рассуждений может рано свернуть не туда и так и не восстановиться. Самосогласованность (Wang и др., 2022) решает эту проблему, создавая выборку из множества независимых путей рассуждения и объединяя их итоговые ответы, обычно с помощью голосования большинством.

Идея такова: правильное рассуждение сходится к одному ответу по разным маршрутам, а ошибки разбросаны. Объединение усиливает согласованный сигнал.

def self_consistency(prompt, n=20, temperature=0.7):
    answers = []
    for _ in range(n):
        chain = llm(prompt, temperature=temperature)
        answers.append(extract_answer(chain))
    return majority_vote(answers)

Почему маргинализация по путям работает

Самосогласованность приближённо выполняет маргинализацию по путям рассуждения: вместо доверия к одному скрытому выводу оценивается наиболее вероятный итоговый answer с учётом множества выводов.

Это оценка распределения ответов методом Монте-Карло. Мода этого распределения обычно надёжнее любого отдельно взятого пути, особенно когда пространство ответов невелико и дискретно.

from collections import Counter

def majority_vote(answers):
    norm = [normalize_answer(a) for a in answers]
    counts = Counter(norm)
    answer, votes = counts.most_common(1)[0]
    confidence = votes / len(norm)
    return answer, confidence

Разнообразие за счёт температуры

Самосогласованности нужны разнообразные пути. Жадная выборка или температура, близкая к нулю, создаёт почти одинаковые цепочки, сводя метод на нет. Используйте умеренную температуру (часто 0,5–0,8) и, возможно, выборку из верхней части распределения, чтобы сделать пути разнообразнее.

Слишком высокая температура ухудшает каждую отдельную цепочку; настраивайте температуру для максимальной точности ансамбля, а не качества одной цепочки.

def tune_temperature(prompt, val_set, temps=(0.4, 0.6, 0.8, 1.0)):
    best = max(
        temps,
        key=lambda t: ensemble_accuracy(prompt, val_set, temp=t, n=20)
    )
    return best

Нормализация ответов крайне важна

Голоса учитываются только тогда, когда эквивалентные ответы распознаются как одинаковые. Перед подсчётом нормализуйте их: удаляйте единицы измерения, приводите числа к каноническому виду, переводите текст в нижний регистр, разбирайте дроби и проценты и применяйте эквивалентность, зависящую от задачи.

Плохая нормализация разделяет настоящее большинство между разными формами записи и позволяет ответу меньшинства победить в голосовании.

def normalize_answer(a):
    a = a.strip().lower().rstrip('.')
    a = a.replace(',', '').replace('$', '').replace('%', '')
    try:
        return str(round(float(a), 6))   # numeric canonical form
    except ValueError:
        return a

Сколько образцов?

Точность растёт с числом образцов n, но с убывающей отдачей, часто выходя на плато примерно при 10–40 образцах в зависимости от сложности задачи. Каждый образец линейно увеличивает затраты и задержку.

Переберите значения n на проверочном наборе и выберите точку перегиба кривой, где дополнительные образцы уже не оправдывают своих затрат.

def sweep_n(prompt, val, ns=(1,3,5,10,20,40)):
    return {n: ensemble_accuracy(prompt, val, n=n) for n in ns}
# Choose n at the accuracy/cost knee, not the maximum

Адаптивная ранняя остановка

Экономьте вычислительные ресурсы с помощью адаптивной выборки: прекращайте создавать пути, как только результат голосования становится однозначным. Если после 5 образцов один answer уверенно лидирует, дополнительные образцы вряд ли изменят победителя.

Так вычислительные ресурсы сосредотачиваются на действительно сложных и спорных элементах, а простые ответы получают дёшево.

def adaptive_sc(prompt, max_n=40, margin=0.6, min_n=5):
    answers = []
    for i in range(max_n):
        answers.append(extract_answer(llm(prompt, temperature=0.7)))
        if i + 1 >= min_n:
            ans, conf = majority_vote(answers)
            if conf >= margin:
                return ans, conf, i + 1
    return majority_vote(answers)

Взвешенное голосование с помощью проверяющего средства

Обычное голосование большинством считает все пути равными. Вы можете взвешивать голоса по вероятности пути, назначенной моделью, по оценке обученного проверяющего средства или по самооценке допустимости каждой цепочки.

Самосогласованность с весами от проверяющего средства часто превосходит невзвешенное голосование, поскольку понижает рейтинг уверенно ошибочных, но частых вариантов сбоя.

def weighted_vote(chains):
    scores = {}
    for c in chains:
        a = normalize_answer(extract_answer(c))
        scores[a] = scores.get(a, 0.0) + verifier_score(c)
    return max(scores, key=scores.get)

Уверенность по согласованности

Разрыв при голосовании — полезный сигнал уверенности. Единогласный answer гораздо надёжнее, чем результат 6 против 5. Предоставляйте этот показатель нижележащей логике: используйте route, чтобы передавать элементы с низкой согласованностью на повышение уровня обработки, проверку человеком или более сильной модели.

Так самосогласованность становится одновременно способом повысить точность и механизмом калибровки.

def route(prompt):
    ans, conf = adaptive_sc(prompt)[:2]
    if conf < 0.5:
        return escalate_to_stronger_model(prompt)
    return ans

Ограничения: непрерывные и открытые задачи

Голосование большинством предполагает дискретное и сопоставимое пространство answer. Оно неприменимо напрямую к свободной генерации, длинному тексту или непрерывным результатам, где никакие два образца не совпадают.

Для таких задач используйте другой способ объединения: группируйте семантически похожие результаты, голосуйте по извлечённым структурированным полям или используйте модель-судью, чтобы выбрать лучший образец, вместо подсчёта точных совпадений.

def semantic_consistency(samples):
    clusters = cluster_by_embedding(samples)
    biggest = max(clusters, key=len)        # largest agreement cluster
    return representative(biggest)            # medoid of the cluster

Развёртывание с учётом затрат

Самосогласованность — один из самых затратных методов составления запросов: затраты растут вместе с n. Оставляйте её для важных или сложных элементов, сочетайте с адаптивной остановкой и рассмотрите многоуровневую политику, при которой одна цепочка обрабатывает простые запросы.

Всегда сравнивайте её точность на единицу затрат с одним вызовом более сильной модели, который может оказаться дешевле при том же приросте качества.

def tiered(prompt, q):
    if easy(q):
        return extract_answer(llm(prompt, temperature=0))
    return adaptive_sc(prompt, max_n=20)[0]   # SC only when needed

Самосогласованность от начала до конца

Полный конвейер: настройте температуру и n, создавайте разнообразные цепочки, тщательно нормализуйте ответы, проводите голосование (при желании с весами от проверяющего средства), используйте разрыв голосов как показатель уверенности, останавливайтесь досрочно при явном результате и передавайте элементы с низкой согласованностью на следующий уровень.

В результате получается более точная и самокалибрующаяся система рассуждений, чем любая отдельная цепочка.

def solve(prompt):
    chains = sample_until_decisive(prompt, max_n=20, temp=0.7)
    ans, conf = weighted_majority(chains)
    if conf < THRESH:
        return escalate(prompt)
    return {'answer': ans, 'confidence': conf, 'paths': len(chains)}

Быстрая проверка

Проанализируйте настройки самосогласованности, которые дают результаты хуже ожидаемых.

Итоги

Главные выводы:

  • Самосогласованность создаёт выборку из множества разнообразных цепочек и проводит голосование, приближённо выполняя маргинализацию по путям рассуждения.
  • Разнообразие (умеренная температура) и тщательная нормализация ответов необходимы для работы метода.
  • Точность растёт с n, но выходит на плато; используйте адаптивную раннюю остановку для контроля затрат.
  • Взвешивайте голоса с помощью проверяющего средства и используйте разрыв голосов как откалиброванный сигнал уверенности.
  • Методу требуется дискретное пространство ответов; для открытых задач группируйте результаты по смыслу или используйте судью.

Часто задаваемые вопросы

Урок «Выборка с самосогласованностью» бесплатный?

Да — полный текст урока «Выборка с самосогласованностью» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.

Чему я научусь в уроке «Выборка с самосогласованностью»?

Голосование между несколькими путями рассуждения Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Prompt Engineering?

Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Выборка с самосогласованностью»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Prompt Engineering?

Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подсказки с рассуждением по шагам
  2. Выборка с самосогласованностью
  3. Исследование дерева мыслей
  4. Когда подсказки с рассуждением помогают
← Назад к AI Prompt Engineering