TL;DR
Когда даёшь языковой модели слишком длинный список вариантов и просишь выбрать лучший — точность падает катастрофически. Не потому что модель «не старается», а потому что внимание буквально размывается: чем больше вариантов в одном запросе, тем меньше «веса» достаётся каждому. При 1000 вариантов точность падает до уровня случайного угадывания.
Проблема знакома каждому: дал AI 40 идей для названия, просишь выбрать лучшее — и получаешь размытый, нерешительный ответ. Или: загрузил таблицу с 80 кандидатами на задачу, попросил ранжировать — модель соглашается с тем, что было в начале. Это не галлюцинация и не лень. Это архитектурное ограничение: при росте списка сигнал правильного варианта тонет в шуме остальных.
DCI решает это через турнирную структуру: вместо одного запроса «выбери из 100» — серия запросов «выбери из 10», потом «выбери из оставшихся», снова и снова, пока не останется победитель. Каждый раунд — маленький список, высокое внимание, чёткий сигнал.
Схема метода
ШАГ 1 (РАЗДЕЛИТЬ): Разбить N вариантов на группы по K штук
→ M групп, каждая ≤ K элементов
ШАГ 2 (ОТОБРАТЬ): Отдельный запрос на каждую группу:
"Какой из этих K вариантов подходит лучше всего? Если ни один — ответь 'нет'"
→ Финалист группы или "нет"
ШАГ 3 (ОТФИЛЬТРОВАТЬ): Убрать группы с ответом "нет"
→ Новый список только из финалистов
ШАГ 4 (ПОВТОРИТЬ): Если финалистов больше K — вернуться к Шагу 1
→ Продолжать пока не останется ≤ K кандидатов
ШАГ 5 (ФИНАЛ): Финальный запрос с оставшимися → Победитель
Все шаги — отдельные запросы. Шаги 1-4 повторяются рекурсивно.
Пример применения
Задача: Основатель стартапа просит ChatGPT выбрать лучшее название для сервиса доставки здоровой еды в офисы. У него накопилось 30 вариантов после брейншторма.
Промпт (Раунд 1, группа 1 из 5):
Я выбираю название для сервиса здоровой офисной еды.
Вот 6 вариантов:
1. ЗелёныйЛанч
2. ФрешДеск
3. БизнесТарелка
4. ОфисЕда
5. ВитаМил
6. ПравильноПоел
Критерий: название должно легко запоминаться,
звучать современно и отражать здоровое питание.
Какой вариант подходит лучше всего?
Если ни один не подходит по критерию — ответь "нет".
Только название, без объяснений.
(Повторяешь для каждой из 5 групп по 6 названий)
Промпт (Раунд 2, финалисты):
Из 30 названий осталось 4 финалиста:
ФрешДеск, ВитаМил, ЗелёныйЛанч, БодрыйБокс
Тот же критерий: легко запоминается,
звучит современно, отражает здоровое питание.
Какое лучшее? Только название.
Результат: Вместо размытого «все варианты по-своему хороши» — чёткий выбор на каждом шаге. В раундах с 6 вариантами модель уверенно выберет одного финалиста или скажет «нет». Финальный раунд из 4-5 имён даст однозначного победителя с высокой уверенностью.
Почему это работает
Слабость LLM: Механизм внимания распределяет «вес» равномерно между всеми элементами в запросе. Когда вариантов 100 — каждый получает ≈1% внимания. Правильный ответ буквально не выделяется. Авторы математически доказали: при росте числа вариантов точность стремится к случайному угадыванию, это не баг — это физика архитектуры.
Сильная сторона LLM: При малом числе вариантов (5-10 штук) модель работает отлично. На 10 классах та же модель, которая угадывает 0.5% из 1000, даёт 80-90% точности. Маленький список = высокая концентрация внимания = чёткий сигнал.
Как DCI использует это: Превращает одну сложную задачу («выбери из 100») в серию лёгких («выбери из 8»). Каждый раунд решается уверенно. Финалисты конкурируют только между собой — список снова маленький, внимание снова высокое.
Рычаги управления: - Размер группы K → меньше (4-6) = точнее, но больше раундов. Больше (10-15) = быстрее, но хуже различение похожих вариантов - Критерий → чем конкретнее формулировка, тем лучше фильтрация на каждом шаге - «Ни один не подходит» → оставь эту опцию всегда. Без неё модель выберет лучшего из плохих - Число раундов → для 20-30 вариантов хватает 2 раундов. Для 100+ нужно 3
Шаблон промпта
Я выбираю {что_выбираю}.
Вот {K} вариантов:
{список_вариантов_с_нумерацией}
Критерий выбора: {критерий}.
Какой вариант подходит лучше всего по этому критерию?
Если ни один не соответствует критерию — ответь "нет".
Только название/номер варианта, без объяснений.
Плейсхолдеры:
- {что_выбираю} — название/стратегию/идею/кандидата/...
- {K} — размер группы (рекомендуется 6-10)
- {список_вариантов_с_нумерацией} — твои варианты пронумерованные
- {критерий} — конкретное условие отбора (не "хорошее", а "запоминается и отражает суть")
Логика работы: 1. Раздели N вариантов на группы по K 2. Запусти промпт для каждой группы → собери финалистов 3. Если финалистов > K → сформируй новые группы и повтори 4. Финальный раунд из ≤ K финалистов → победитель
🚀 Быстрый старт — вставь в чат:
Вот шаблон турнирного отбора вариантов.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить шаблон.
[вставить шаблон выше]
LLM спросит количество вариантов и критерий отбора — потому что размер группы K и формулировка критерия напрямую влияют на качество каждого раунда. Она сама разобьёт процесс на нужное число итераций.
Почему это работает (глубже)
Что происходит «под капотом»: В трансформерной архитектуре есть механизм softmax-внимания. Условно: каждый токен «спрашивает» другие токены насколько они релевантны. Ответы нормализуются: сумма всех весов = 1. При 10 вариантах правильный может получить 30-40% веса. При 1000 вариантах — максимум 0.1%, не отличимо от шума.
Почему это не очевидно без исследования: Кажется, что умная модель «поймёт что важно». Но нет — это математическое следствие архитектуры, не отсутствие интеллекта. Авторы строго доказали это через теорию информации: разрыв между «нужной информацией» (растёт логарифмически) и «доступной пропускной способностью» (константа) неизбежно приводит к коллапсу.
Принцип переносится за пределы картинок: Любая задача выбора/классификации из большого числа вариантов — тексты, идеи, кандидаты, категории, теги — подчиняется той же механике. Турнирный подход работает везде, где нужно «найти лучшее из многих».
Оригинал из исследования
Please answer the question below:
Q: There are {K} categories, [{','.join(candidates)}].
Which category does the image belong to?
A:
Контекст: Это базовый промпт для каждой подгруппы на каждом раунде DCI. Подаётся одновременно с изображением. Если модель отвечает категорией из списка — она проходит в следующий раунд. Если отвечает вне списка — отфильтровывается. Ключевая деталь: количество категорий {K} указывается явно — это помогает модели «знать границы поиска».
Адаптации и экстраполяции
💡 Адаптация для найма: отбор резюме
Вместо того чтобы просить AI «оцени все 40 резюме», загружаешь батчами по 6-8 и просишь выбрать тех, кто точнее соответствует вакансии. Финалисты из каждой группы — во второй раунд.
Я нанимаю {роль}. Вот {K} кандидатов:
{список_кандидатов_с_кратким_описанием}
Требования: {ключевые_требования}.
Кто из них ближе всего соответствует требованиям?
Если никто не подходит — ответь "нет".
Только имя, без объяснений.
🔧 Техника: добавление объяснения в финальном раунде
В промежуточных раундах — только имя/номер победителя (быстро, чисто). В финальном раунде — убери "без объяснений" и добавь "объясни почему". Получаешь и победителя, и аргументацию.
[финальный раунд]
Кто из них лучший?
Назови победителя и объясни в 2 предложениях почему.
🔧 Техника: явное число вариантов в начале промпта
Добавь "Вот ровно {K} вариантов:" перед списком — как в оригинальном исследовании. Это ограничивает поле поиска для модели и немного улучшает точность, особенно когда варианты похожи друг на друга.
Ограничения
⚠️ Ручное применение трудоёмко при N > 100: При 30-50 вариантах метод удобен вручную (3-6 запросов). При 200+ — нужна автоматизация через код или API. Без этого становится рутиной.
⚠️ Для изображений нужна модель с vision: Оригинальный метод — про классификацию картинок. Для текстовых задач адаптация работает без vision-модели.
⚠️ Порядок вариантов в группах немного влияет на результат: Авторы обнаружили небольшой bias к элементам в начале/конце списка. Если задача критичная — стоит перемешать варианты перед разбивкой на группы.
⚠️ Не работает для открытого выбора: Метод предполагает, что правильный ответ точно есть в списке. Если ни один вариант не подходит — модель всё равно выберет «наименее плохой» в финальном раунде.
Как исследовали
Команда из четырёх китайских университетов начала с простого наблюдения: взяли ImageNet-1K (1000 категорий изображений) и проверили несколько топовых мультимодальных моделей. Сначала давали 10 категорий на выбор, потом 20, 100, 200, 500, 1000. Результат оказался шокирующим: LlaMA 3.2-11B при 20 классах давала 88.6% точности, при 1000 классах — 0.53%. Та же модель, та же задача, просто длиннее список.
Они не остановились на "ну бывает" — вывели математическое доказательство через теорию информации (неравенство Фано + энтропия Шеннона), что этот коллапс неизбежен для любой трансформерной архитектуры при плоском инференсе. Это не особенность конкретной модели — это фундаментальное ограничение архитектуры.
DCI проверяли на пяти разных бенчмарках (включая ImageNet-21K с 21 000 классами) и семи разных моделях. Интересный результат: маленький open-source Qwen3-VL-8B с DCI конкурировал с GPT-4 без DCI на задачах классификации — то есть умный протокол запросов компенсировал разницу в размере модели в сотни раз.
Ресурсы
Название работы: Divide-and-Conquer Inference for Large-Scale Visual Recognition with Multimodal Large Language Models
Код: https://github.com/FourierAI/DCI
Авторы: Zhipeng Ye, Jiaqi Huang, Feng Jiang, Qiufeng Wang, Yikang Duan, Dawei Wang, Xihang Zhou, Qian Qiao
Организации: Taizhou Institute of Science and Technology / Nanjing University of Science and Technology; Xi'an Jiaotong-Liverpool University; Soochow University; University of Toronto
