Исследование ошибок и их исправление в коде LLM

Исследование китайских ученых выявило, что некорректный код LLM часто содержит синтаксические и runtime ошибки. Эксперименты с исправлением ошибок показали улучшение качества программ. Важно избегать недопустимого использования API и учитывать особенности генерации длинных описаний
Новости 2024 07 08

Исследование ошибок и их исправление в коде LLM

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

Выбор моделей и бенчмарков

Для исследования ошибок и их исправления в коде LLM были выбраны 7 моделей. Бенчмарк для оценки эффективности этих моделей включал образцы из HumanEval+, MBPP+ и APPS+, а также реальный эталонный тест RWPB из репозиториев GitHub, созданных в 2024 году. Ученые провели обширное исследование, генерируя код с помощью моделей и выявляя ошибки, чтобы предложить методы их устранения. Результаты показали, что LLM обладают разной эффективностью в генерации кода, меньшее количество строк кода обычно соотносится с более высокой сложностью, а неправильный код часто содержит больше комментариев. Ошибки в использовании API и неоптимальная реализация алгоритмов являются распространенными проблемами, которые влияют на качество генерируемого кода.

Условия эксперимента

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

Основные выводы исследования

Исследование китайских ученых на 7 популярных моделях LLM позволило выявить интересные выводы о генерации кода. Оказалось, что сгенерированный код обычно имеет меньше строк, но более высокую сложность, особенно у модели Claude-3. Неверный код содержит больше комментариев, что может быть связано с сложностью проблем, на которых учатся модели. Сложные описания проблем приводят к неполноте синтаксических структур в коде, а неправильное использование API становится основной причиной ошибок времени выполнения.

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

Ошибки и их классификация

Исследование проводимое китайскими учеными на 7 популярных LLM позволило выделить три основных типа ошибок и 12 вторичных типов ошибок. Синтаксические ошибки, хотя составляют наименьшую долю, все же играют свою роль в классификации, включая неполную структуру синтаксиса, неверный отступ и ошибки импорта библиотеки. Ошибки времени выполнения, более распространенные, охватывают такие аспекты как неправильное использование API, отсутствие определений или неправильная проверка граничных условий. Наконец, функциональные ошибки связаны с неправильной логикой программы и могут включать непонимание и логические ошибки, галлюцинации, ошибки формата ввода/вывода и незначительные ошибки, такие как неправильная инициализация или неоптимальный код. Ученые разработали таксономию ошибок, которая поможет более эффективно выявлять и исправлять ошибки в сгенерированном коде LLM.

Синтаксические ошибки

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

Ошибки времени выполнения

Ошибки времени выполнения в программировании возникают во время выполнения кода и могут быть разделены на пять подтипов. Неправильное использование API является одной из основных причин таких ошибок, включая ошибки типа AttributeError, TypeError и ValueError. Ошибка атрибута возникает при недопустимой ссылке на отсутствующий атрибут API, в то время как TypeError проявляется при неправильном применении API к объекту неправильного типа. Значительная часть ошибок времени выполнения связана с неправильным использованием API, что может привести к некорректной работе программы. Важно исправлять и предотвращать такие ошибки, чтобы обеспечить правильное функционирование программного обеспечения и избежать проблем в процессе выполнения кода.

Функциональные ошибки

Функциональные ошибки в программировании представляют собой ситуации, когда код ведет себя неправильно и не соответствует ожиданиям, установленным функциональными требованиями. В данном контексте функциональные ошибки делятся на четыре основных подтипа. Первый подтип - "Непонимание и логическая ошибка" - возникает, когда модели искусственного интеллекта сталкиваются со сложными описаниями задач и испытывают трудности в полном понимании требований и установлении правильной логики. Второй подтип - "Галлюцинации" - описывает ситуации, когда генерируемый код выглядит синтаксически правильным, но фактически неверен или лишен семантического смысла. Третий подтип - "Ошибка формата ввода/вывода" - относится к неправильному порядку входных и выходных данных, а также к некорректной точности выходных данных. Наконец, четвертый подтип - "Незначительные ошибки" - включает в себя проблемы, такие как неверная инициализация переменных, использование неоптимальных алгоритмов и бесконечные циклы, которые могут привести к неправильной работе программы.

Предложенный метод исправления ошибок

Авторы исследования разработали метод исправления ошибок, предлагая шаблон промпта для улучшения кода, сгенерированного LLM. Этот шаблон включает в себя описание проблемы программирования, неверного кода, категорию ошибок и результат выполнения компилятора. Путем последовательных итераций исправления ошибок с использованием этого шаблона ученые смогли значительно улучшить качество кода, исправляя синтаксические, runtime и функциональные ошибки. Результаты показали, что GPT-4 успешно исправляет значительный процент неправильных кодов с помощью данного метода, синтаксические ошибки были полностью устранены за одну итерацию, а runtime и функциональные ошибки также значительно улучшались. Важным выводом является то, что методика использования промпта для исправления ошибок сгенерированных LLM оказалась действенной и эффективной при работе с разными типами кодов.

Эффективность метода

Исследование показало, что предложенный метод исправления ошибок при использовании GPT-4 демонстрирует значительную эффективность. Первая итерация позволяет исправить 24,1% неправильного кода, а дополнительные 6,6% ошибок решаются на второй итерации. С учетом различных видов ошибок, синтаксические недочеты были успешно устранены уже после первой итерации. Для ошибок времени выполнения удалось исправить 23% уже на первом этапе и еще 16% - на втором. Что касается функциональных ошибок, 23% было исправлено после первой итерации, и лишь 3% требовали дополнительного внимания на втором этапе. Таким образом, предложенный метод показывает хорошие результаты в исправлении ошибок кода, что является важным шагом в развитии и совершенствовании инструментов генерации программного кода.

Заключение

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

Поиск