EnglishРусский Map
Cross-model code review

Улучшение генерации кода с помощью малых моделей в роли судьи

title
Улучшение генерации кода с помощью малых моделей в роли судьи
type
summary
summary
Дообученные судьи до 5B отбирают Java-код на уровне GPT-4.1-mini; малый генератор с судьёй соперничает с версиями на 8-33B в 4 из 5 семейств
tags
ai-coding, llm, llm-evaluation, benchmarks
created
2026-09-13
updated
2026-09-13
lang
ru
source_updated
2026-09-13
translated
2026-09-14
translator
lllm/antigravity/gemini-3.7-flash-medium

Статья на ICSE 2026 от Giuseppe Crupi, Rosalia Tufano и Gabriele Bavota (Università della Svizzera italiana). Мотивация - компания, которой нужен собственный генератор кода под нишевый язык или внутренний DSL, но которая не может позволить себе оборудование для модели на 30B параметров. Предыдущие работы (RankEF, ранжировщик на базе CodeT5+ с ASE 2024) показали, что генерация нескольких решений малой моделью с последующим выбором другой малой моделью может помочь, но авторы не измеряли, как часто такой судья признаёт корректный код ошибочным или ошибочный - корректным. В этой статье сначала измеряется эта ошибка, а затем схема генерации и отбора пересобирается на современных малых моделях.

Может ли малая модель оценивать корректность кода?

В роли судей выступают Qwen2.5 Coder 0.5B и 3B, Gemma-3 4B и Llama-3.2 3B, а для сравнения взяты CodeT5+ 770M из RankEF и GPT-4.1-mini. Данные - 722 Java-задачи из переводов HumanEval и MBPP в MultiPL-E, а также из CoderEval, за вычетом задач с нестабильными тестами или тестами, проходящими на пустых или фиктивных телах функций. Пять малых генераторов написали по 10 реализаций на задачу, и каждого кандидата разметили прогоном тестов. Тестовая выборка включает 5 641 кандидата, из них около 70% некорректны. Согласованность с тестами приводится как каппа Коэна (Cohen's kappa).

В режиме zero-shot малые модели работают судьями плохо. Лучшая из них, Qwen2.5 Coder 3B, достигает каппы 0.35 с 36% ложноположительных и 22% ложноотрицательных срабатываний; Llama показывает 0.20, Gemma - 0.10, а две самые маленькие модели ведут себя как константные классификаторы. GPT-4.1-mini достигает 0.54 с 23% ложноположительных и 16% ложноотрицательных срабатываний. Добавление двух примеров в промпт ничего не изменило.

Дообучение (fine-tuning) на размеченных обучающих кандидатах переводит каждую малую модель на уровень умеренной согласованности: 0.45 для Qwen 0.5B, 0.57 для Qwen 3B (выше GPT-4.1-mini), 0.46 для Llama и 0.49 для Gemma. RankEF достигает 0.40. Доля ложноположительных срабатываний резко падает (у Llama с 48% до 8%, у Gemma с 78% до 15%), а ложноотрицательных - растёт. Обучение с обратной связью от выполнения (execution feedback) в качестве дополнительной цели не принесло ощутимой пользы, и даже Qwen 0.5B превзошёл RankEF без неё. Ни одна модель, большая или малая, не преодолела каппу 0.60. При ручном разборе 223 из 528 ложноположительных срабатываний лучшего судьи промахи чаще всего приходились на алгоритмические ошибки (60%), пропущенные проверки на null (11%) и неверные присваивания (6%).

Уверенность модели информативна. При пороге 0.9 точность (precision) Llama 3B превышает 80% для класса "correct" и составляет около 90% для "incorrect", но ценой отказа от ответа: ниже порога оказываются 7% кандидатов у Qwen, 25% у Llama и 21% у Gemma. Авторы отмечают, что это подходит для рецензента, который отмечает закоммиченный код только при полной уверенности.

Делает ли судья малый генератор конкурентоспособным?

Каждый малый генератор (DeepSeek Coder 1.3B, OpenCoder 1.5B, Qwen2.5 Coder 3B, Phi-4 mini, Gemma-3 4B) создаёт 2, 5 или 10 кандидатов, а от одного до трёх дообученных судей выбирают один вариант по нормализованной уверенности. Базовым уровнем служит крупнейшая модель того же семейства при одиночном запуске; оба варианта повторялись по 10 раз на задачу.

Для Qwen2.5 Coder 3B один кандидат даёт pass@1 0.361 против 0.487 у старшей модели семейства. При выборе судьёй из 2, 5 и 10 кандидатов показатель вырастает до 0.443, 0.495 и 0.521. Выбор по собственному log likelihood генератора даёт 0.397, случайный выбор - 0.377, а RankEF - 0.452. Для всех пяти генераторов 10 кандидатов и один судья прибавляют 12.1, 11.1, 16.0, 20.6 и 5.3 пункта к результату одиночной попытки. По сравнению со старшими моделями связка малых моделей оказалась статистически значимо лучше для OpenCoder, Qwen и Phi, показала ничью для DeepSeek Coder несмотря на 25-кратную разницу в размере, и заметно уступила на Gemma, где Gemma-3 4B раз за разом генерирует одинаковых кандидатов, а модель на 27B обучалась на 14T токенов против 4T. Одного судьи обычно было достаточно: добавление дополнительных моделей или их объединение через случайный лес либо небольшую нейросеть прироста не дали.

Аргумент по оборудованию вполне конкретен: две карты RTX 3060 (около $600) тянут генератор и судью, тогда как для модели на 30B требуется A100 на 80 GB (около $17 500). Связка работает медленнее на один запрос при 10 кандидатах (7.9 с для DeepSeek Coder 33B против 10.4 с для связки вокруг модели 1.3B), но параллелится на дешёвых картах.

Что это за тип верификации

Здесь речь идёт о выборе среди множества сгенерированных вариантов, а не о проверке одного изменения с последующим исправлением, причём судья не сильнее генератора. Он узкоспециализирован: дообучен на выводах тех же малых генераторов с результатами тестов в роли меток, то есть оценивает код из того же распределения (in-distribution). Это делает более точным распространённое утверждение о бесполезности слабого верификатора. Без дообучения в режиме zero-shot эти модели как судьи были почти бесполезны; обученная под конкретную задачу модель на 3B параметров сравнялась с коммерческой моделью. Эксперименты проводились только на Java с тестами разного качества из бенчмарков, поэтому авторы предлагают повторить исследование на других языках.

Связанные страницы

  • cross-model-code-review - как этот результат уточняет тезис о том, что слабый рецензент бесполезен
  • verification-dynamics-llms - почему проверять вывод слабого генератора проще, чем вывод сильного
  • rl-finetune-beats-frontier - ещё один пример того, как малая модель, обученная под одну узкую оценку, обходит передовые модели
  • local-ai-is-not-opus - экономика развёртывания малых локальных моделей