Пропустить к основному контенту

Искусственный интеллект

Код по требованию: как улучшить качество генерации кода нейросетями

02.01.2026·10 мин

Автор: Денис Аветисян


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

Исследование демонстрирует, что модель QW-3B, обученная на исходном наборе данных и пяти оптимизированных версиях, генерирует код, демонстрируя зависимость качества генерации от выбора обучающего набора данных применительно к задачам APPS.
Исследование демонстрирует, что модель QW-3B, обученная на исходном наборе данных и пяти оптимизированных версиях, генерирует код, демонстрируя зависимость качества генерации от выбора обучающего набора данных применительно к задачам APPS.

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

Несмотря на значительный прогресс в генерации кода большими языковыми моделями (LLM), систематической оценки эффективности различных методов оптимизации обучающих данных до настоящего времени не проводилось. В работе ‘On the Effectiveness of Training Data Optimization for LLM-based Code Generation: An Empirical Study’ представлено крупномасштабное эмпирическое исследование пяти широко используемых техник оптимизации данных, демонстрирующее, что синтез данных наиболее эффективен для повышения функциональной корректности генерируемого кода. Комбинирование методов, в свою очередь, может значительно улучшить качество кода, особенно при сочетании синтеза и рефакторинга. Какие дальнейшие стратегии оптимизации данных позволят еще больше раскрыть потенциал LLM в задачах автоматической генерации программного обеспечения?


Иллюзии и Реальность Автоматической Генерации Кода

В последнее время наблюдается стремительный рост применения больших языковых моделей (БЯМ) для автоматической генерации программного кода. Эта тенденция открывает значительные перспективы для автоматизации рутинных задач программирования, ускорения разработки и снижения затрат. БЯМ способны генерировать код на различных языках программирования, исходя из текстового описания требуемой функциональности или на основе существующих фрагментов кода. Потенциал автоматизации простирается от создания простых скриптов до разработки сложных приложений, позволяя программистам сосредоточиться на более сложных и творческих аспектах разработки, а также существенно расширяя возможности для людей без специальных навыков в программировании.

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

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

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

Пять различных методов оптимизации обучающих данных позволяют находить уникальные решения для задач.
Пять различных методов оптимизации обучающих данных позволяют находить уникальные решения для задач.

Оптимизация Данных: Путь к Надежному Коду

Оптимизация обучающих данных является критически важным фактором повышения производительности моделей генерации кода. Недостаточное качество или объем данных напрямую влияют на способность модели к обобщению и точности генерируемого кода. Улучшение данных позволяет снизить количество ошибок, повысить скорость обучения и улучшить способность модели решать более сложные задачи кодирования. Эффективная оптимизация позволяет получить более надежные и полезные модели, способные эффективно выполнять поставленные задачи, а также адаптироваться к новым условиям и требованиям.

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

Синтез данных использует большую языковую модель (LLM), функционирующую в роли «учителя», для автоматической генерации новых примеров кода и соответствующих описаний. Этот процесс позволяет расширить обучающую выборку, создавая разнообразные сценарии и краевые случаи, которые могут быть недостаточно представлены в исходном наборе данных. Сгенерированные примеры включают как код, так и текстовое описание его функциональности, что обеспечивает более полное обучение модели и улучшает ее способность к генерации кода на основе текстовых запросов. Важно отметить, что качество сгенерированных данных напрямую влияет на эффективность обучения, поэтому требуется тщательная настройка и валидация «учителя» LLM.

Комплексное применение методов оптимизации данных, включающее синтез, рефакторинг, очистку, выборку и аугментацию, направлено на устранение ограничений, присущих исходным наборам данных. Эти ограничения часто проявляются в виде недостаточного объема данных, несбалансированности классов, или отсутствия разнообразия в представленных примерах. Устранение этих недостатков позволяет повысить способность модели к обобщению — то есть, к корректной работе с новыми, ранее не встречавшимися входными данными. В результате, модель демонстрирует улучшенную производительность и надежность при решении задач генерации кода в различных контекстах и при различных входных параметрах.

Количественная Оценка Качества Кода и Модели

Функциональная корректность оценивается с использованием метрик, таких как AvgPassRatio и Pass@K, которые определяют долю успешно выполненных тестовых случаев. AvgPassRatio представляет собой среднее отношение успешно пройденных тестов ко всем тестам, в то время как Pass@K оценивает вероятность успешного выполнения хотя бы одного из K тестовых примеров. Эти метрики позволяют количественно оценить способность модели правильно решать задачи, основываясь на результатах выполнения набора тестов, и служат ключевым показателем эффективности при оценке различных методов улучшения кода.

При оценке производительности моделей на эталонных наборах данных APPS и CodeContests было зафиксировано улучшение результатов до 60.80% и 74.06% соответственно, при использовании метрики Pass@1. Pass@1 измеряет долю случаев, когда модель успешно выполняет задачу с первой попытки. Данный показатель позволяет количественно оценить способность модели к немедленному и корректному решению задач, представленных в указанных бенчмарках, и демонстрирует значительное повышение функциональной корректности после применения оптимизаций.

Для количественной оценки различий между исходным и оптимизированным наборами данных обучения используется метрика Fréchet Inception Distance (FID). В данном случае, FID вычисляется на основе векторных представлений кода, полученных с помощью модели CodeBERT. FID измеряет расстояние между распределениями этих векторных представлений, при этом меньшее значение FID указывает на более высокую степень схожести между исходными и оптимизированными данными. Это позволяет объективно оценивать, насколько сильно процесс оптимизации данных изменяет их статистические свойства и, как следствие, может повлиять на производительность модели.

Результаты экспериментов демонстрируют существенное повышение функциональной корректности сгенерированного кода. Показатель AvgPassRatio, измеряющий среднюю долю успешно пройденных тестов, увеличился на 29.00% для бенчмарка APPS и на 35.00% для бенчмарка CodeContests. Данный прирост свидетельствует о значительном улучшении способности моделей генерировать код, удовлетворяющий требованиям тестовых случаев, и подтверждает эффективность предложенных методов оптимизации.

Анализ результатов показал, что метод синтеза данных (Data Synthesis) обеспечил наибольший прирост в функциональной корректности кода. При этом, наилучшее общее качество кода достигается при комбинировании синтеза данных с рефакторингом данных (Data Refactoring). Данная комбинация позволяет не только генерировать новые данные для улучшения производительности, но и оптимизировать существующий код для повышения его надежности и эффективности. Полученные данные свидетельствуют о синергетическом эффекте от совместного использования этих двух методов.

Выращивание Надежного Кода: Взгляд в Будущее

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

Исследования показали значительное улучшение качества генерируемого кода благодаря применению различных методов оптимизации обучающих данных. В частности, применение аугментации данных привело к повышению оценки “Code Smell Score” (CSS) на 22.69%, что свидетельствует о снижении количества проблем, связанных с читаемостью и структурой кода. Методы отбора данных продемонстрировали еще более заметный прогресс, увеличив CSS на 25.70%, в то время как синтез данных обеспечил наиболее впечатляющий результат — улучшение на 39.92%. Эти показатели подтверждают, что целенаправленное усовершенствование обучающих данных является эффективным способом повышения надежности и качества автоматически генерируемого кода.

Улучшение обучающих данных посредством устранения “кодов запаха” в коде приводит к созданию программного обеспечения, которое значительно проще понимать, изменять и расширять. Исследования показали, что выявление и исправление таких индикаторов, как избыточная сложность, дублирование кода и длинные методы, напрямую влияет на удобочитаемость и поддерживаемость программного обеспечения. В результате, разработчики тратят меньше времени на отладку и адаптацию кода, а новые функции могут быть внедрены быстрее и с меньшими рисками возникновения ошибок. Подобный подход к формированию обучающих данных позволяет автоматизированным системам генерации кода создавать более качественный и надежный программный код, способствуя повышению общей эффективности разработки.

Исследования показали, что целенаправленное улучшение обучающих данных оказывает существенное влияние на поддерживаемость генерируемого кода. В частности, применение методов рефакторинга данных позволило добиться прироста в 4.15% по индексу поддерживаемости (MI), отражающему сложность и понятность кода. Более значительные улучшения были достигнуты благодаря отбору данных — 8.12% прироста MI — и очистке данных, которая обеспечила увеличение показателя на 2.73%. Эти результаты демонстрируют, что инвестиции в качество обучающих данных не только повышают функциональную корректность, но и способствуют созданию кода, который легче понимать, модифицировать и расширять, что, в свою очередь, снижает затраты на отладку и ускоряет циклы разработки.

Улучшение качества генерируемого кода посредством оптимизации данных для обучения напрямую влияет на экономические показатели разработки программного обеспечения. Исследования показывают, что снижение количества ошибок и повышение понятности кода существенно сокращают время, затрачиваемое на отладку и исправление дефектов. Это, в свою очередь, ускоряет циклы разработки, позволяя командам быстрее выпускать новые функции и обновления. Повышение качества кода также облегчает его поддержку и модификацию в будущем, снижая долгосрочные затраты на сопровождение и повышая общую надежность программного обеспечения. Таким образом, инвестиции в оптимизацию данных для обучения моделей генерации кода окупаются за счет уменьшения расходов, повышения производительности и улучшения качества конечного продукта.

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

Исследование показывает, что оптимизация данных для обучения больших языковых моделей, особенно в контексте генерации кода, не является простой задачей улучшения существующих наборов данных. Скорее, это процесс, напоминающий выращивание экосистемы, где синтез данных демонстрирует наибольшую эффективность в повышении функциональной корректности кода. В этом можно увидеть отголоски мысли Анри Пуанкаре: «Математика — это искусство давать точные ответы на вопросы, которые никто никогда не задавал». Аналогично, оптимизация данных для LLM — это не поиск идеального набора, а создание условий для возникновения новых, неожиданных решений, поскольку в идеальном решении, как отмечает исследование, не остаётся места для дальнейшего улучшения и адаптации.

Куда Ведет Дорога?

Настоящее исследование, фокусируясь на оптимизации обучающих данных для генерации кода, лишь аккуратно приоткрывает завесу над истинной сложностью систем искусственного интеллекта. Успех методов синтеза данных в повышении функциональной корректности — не триумф инженерии, а признание того, что хаос — это не сбой, это язык природы. Гарантий, разумеется, не существует, лишь более или менее вероятные сценарии развития. Очевидно, что комбинация техник дает прирост качества, но это лишь усложнение системы, а значит — пророчество о будущей точке отказа.

Следующим шагом видится не столько поиск идеального набора данных, сколько исследование динамики их изменения во времени. Обучающие данные — не статичный ресурс, а эволюционирующая экосистема. Необходимо понять, как система реагирует на «мутации» в данных, как возникают и распространяются «вирусы» неверного кода. Стабильность — это просто иллюзия, которая хорошо кэшируется, и рано или поздно эта иллюзия рассеется.

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


Оригинал статьи: https://arxiv.org/pdf/2512.24570.pdf

Связаться с автором: https://www.linkedin.com/in/avetisyan/

Статья также опубликована на личном сайте автора.