Ученые-компьютерщики оценили, как большие языковые модели (LLM) отвечают на вопросы по кодированию на Java с сайта вопросов и ответов StackOverflow, и, как и другие до них, обнаружили, что результаты неудовлетворительны.
В препринте под названием «Исследование устойчивости и надежности генерации кода модели большого языка» аспиранты Ли Чжун и Цзилун Ван описывают, как они собрали 1208 вопросов по программированию из StackOverflow, включающих 24 распространенных API Java, а затем оценили ответы, предоставленные четырьмя различные LLM с поддержкой кода на основе их средства проверки API под названием RobustAPI.
RobustAPI предназначен для оценки надежности кода, которую ученые определяют как устойчивость к сбоям и неожиданным вводам, а также устойчивость к высоким рабочим нагрузкам. Предполагается, что отклонение от правил API может иметь последствия для выполнения кода в производственных средах.
Они утверждают, что тесты кода, написанные людьми или машинами, фокусируются только на семантической корректности и не могут создать среду тестирования, в которой можно было бы проверить неожиданный ввод. Чтобы решить эту проблему, они использовали статический анализ для изучения структуры кода без проведения тестов, что, по их мнению, обеспечивает полный охват. Средство проверки API просматривает абстрактное синтаксическое дерево, чтобы записать методы вызова и структуры управления, чтобы определить последовательность вызовов, а затем проверяет ее на соответствие правилам использования API.
Например, этот фрагмент будет помечен как неспособный заключить код в блок try-catch для обработки сбоев.
RandomAccessFile raf = new RandomAccessFile("/tmp/file.json", "r"); byte[] buffer = new byte[1024 * 1024]; int bytesRead = raf.read(buffer, 0, buffer.length); raf.close();
Ученые из Калифорнийского университета в Сан-Диего протестировали GPT-3.5 и GPT-4 от OpenAI, а также еще две открытые модели, Meta’s Llama 2 и Vicuna-1.5 от организации больших модельных систем. И они сделали это с помощью трех разных тестов для своего набора вопросов: нулевой, в котором в приглашении ввода не было предоставлено ни одного примера правильного использования API; одноразовый – нерелевантный, при котором приведенный пример не имеет отношения к вопросу; и однократно релевантный, при котором в подсказке приводится пример правильного использования API.
Модели показали общий уровень неправильного использования API для теста нулевого выстрела следующим образом: GPT-3,5 (49,83 процента); ГПТ-4 (62,09 процента); Лама 2 (0,66 процента); и Викунья-1,5 (16,97).
Казалось бы, это говорит о том, что Llama 2 справился с испытанием с процентом неудач менее одного процента. Но это неверная интерпретация результатов: отсутствие сбоев в Llama связано с тем, что он не предлагает много кода.
«Судя по результатам оценки, все оцененные модели страдают от проблем неправильного использования API, даже для самых современных коммерческих моделей, таких как GPT-3.5 и GPT-4», — отмечают Чжун и Ван. «При нулевых настройках Llama имеет самый низкий уровень неправильного использования API. Однако частично это связано с [the fact that] большинство ответов ламы не содержат никакого кода».
Как ни странно, говорят они, GPT-4 имеет более высокий уровень неправильного использования API, чем GPT-3.5, потому что, как утверждает OpenAI, он более способен реагировать на запросы с исходным кодом. Проблема в том, что ответы GPT-4 не обязательно верны.
Для однократного нерелевантного теста оценки неправильного использования составили: GPT-3,5 (62,00 процента); ГПТ-4 (64,34 процента); Лама 2 (49,17 процента); и Викунья-1,5 (48,51 процента).
«Частота неправильного использования API Llama значительно возрастает после добавления нерелевантного кадра, поскольку у него больше достоверных ответов, содержащих фрагменты кода», — говорят исследователи. «В целом, добавление нерелевантного кадра заставляет большие языковые модели генерировать более достоверные ответы, что позволяет лучше оценить надежность и надежность кода».
А при правильном использовании API в однократном тесте LLM показали следующие результаты: GPT-3,5 (31,13 процента); ГПТ-4 (49,17 процента); Лама 2 (47,02 процента); и Викунья-1,5 (27,32). То есть объяснение требований к вопросам приводит к меньшему количеству злоупотреблений API.
Но в целом ученые считают, что еще есть над чем поработать, поскольку одной лишь генерации кода недостаточно. Код также должен быть надежным, что, несмотря на склонность разработчиков к помощникам по написанию кода чат-ботов, остается широко известной проблемой.
«Это указывает на то, что способность больших языковых моделей генерировать код [is] в настоящее время значительно улучшены, [while] надежность и устойчивость кода в реальном производстве становятся незамеченной проблемой. И возможности для улучшения этой проблемы огромны».