CodeBlock: обучение LLM для кода с контролем 1.9% токенов повышает pass@1

Традиционное обучение языковых моделей для кода (Code LLM) применяет равномерную функцию потерь ко всем токенам ответа, предполагая, что каждый токен одинаково полезен. Новые методы токен-левел селекции ставят это под сомнение, но для кода такое маскирование может ломать синтаксически и семантически целостные единицы.

Исследователи представили CodeBlock — структурированный фреймворк разреженного контроля, который оперирует целыми блоками кода. Сначала отбираются качественные пары инструкция-ответ, затем ответ разбивается на синтаксически законченные программные блоки. Для каждого блока вычисляется полезность на основе обобщённой кросс-энтропии по ключевым токенам, а также учитывается влияние на поток данных. Блоки ранжируются по приоритету распространения или связывания важных зависимостей.

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

Эксперименты на шести бенчмарках кодогенерации показали, что CodeBlock достигает более высокого среднего pass@1 по сравнению с полным обучением (full-token SFT) и конкурентными методами селекции. При этом используется лишь 1.9% токенов ответа для супервизорного сигнала.

Метод особенно эффективен для задач, где важна точность синтаксиса и корректность потоков данных. Он позволяет значительно сократить вычислительные затраты без потери качества генерации кода.

Таким образом, CodeBlock предлагает более эффективный способ обучения кодовых LLM, ориентированный на семантически значимые единицы программы.