DOI: 10.15514/ISPRAS-2026-38(2)-8
Д.А. Авагян, ORCID: 0009-0009-2409-7357 <david_avagyan@list.ru>
Московский государственный университет имени М.В. Ломоносова,
Россия, 119991, Москва, Ленинские горы, д. 1.
Аннотация. Большие языковые модели находят всё более широкое применение в разработке программного обеспечения. Однако исследование корректности генерируемого ими кода осложняется недостаточной формализацией понятия корректности программ. В данной работе описан вероятностный подход к оценке корректности кода, генерируемого нейросетями. Предложена метрика корректности TSA (Test Suite Accuracy), естественным образом выводимая в данной формализации, а также проводится сравнение с метрикой Pass@1. Проведённые эксперименты с 5 языковыми моделями Phi-1, Phi-2, Phi-3-mini-4k, Phi-4-mini и Qwen2.5-Coder подтверждают описанные теоретические свойства метрик. Практическим результатом проведённого исследования являются набор задач HumanEval++, расширяющий набор данных HumanEval+, и построенная на его основе реализация метрики TSA.
Ключевые слова: большие языковые модели; программная инженерия; генерация кода; качество кода; корректность кода; метрики.
Для цитирования: Авагян Д.А. Оценка корректности сгенерированного нейросетями кода: вероятностный подход. Труды ИСП РАН, том 38, вып. 2, 2026 г., стр. 111–128.
DOI: 10.15514/ISPRAS-2026-38(2)-8
Любое программное обеспечение следует определённому жизненному циклу [1], который принято разбивать на несколько стадий:
Каждая из стадий характеризуется набором процессов и задач, для решения которых могут применяться большие языковые модели. Некоторыми примерами таких задач служат генерация кода и спецификации, проектирование программных интерфейсов, поиск уязвимостей, дедупликация кода, оценка трудоёмкости задач [2-11].
В данной статье рассматривается задача генерации программного кода по условию на естественном языке. Одной из основных проблем при решении этой задачи является оценка качества полученного решения. В общем случае ставится задача оценки качества программы независимо от модели, с помощью которой эта программа сгенерирована.
Качество программы – составное понятие, не имеющее на данный момент единого формального определения. Термин «качество программы» в научных работах может быть неразрывно связан с такими свойствами, как корректность, эффективность, безопасность и уязвимость, поддерживаемость, читаемость, сложность, соответствие стилистическим требованиям, стабильность выполнения, модульность, надёжность и масштабируемость [12-29]. Некоторые из перечисленных свойств кода, как правило, оцениваются с помощью фиксированного набора тестов [30-35], тогда как другие требуют привлечения асессоров [19, 36-40]. В ряде работ качество программ оценивается на основе текстового расстояния до эталонной программы [41-44]. Тем не менее, ключевым свойством качественной программы может считаться корректность, поскольку анализ и оценка остальных свойств некорректной программы не имеет смысла.
Корректность кода, в свою очередь, также может рассматриваться как составное свойство программы. Синтаксическая корректность кода обеспечивается успешной сборкой, запуском и завершением программы, тогда как семантическая корректность – это свойство кода правильно решать поставленную задачу. Анализ корректности кода требует рассмотрения как наиболее вероятных входных данных, так и краевых случаев, соответствующих условию исходной задачи.
Основным методом проверки корректности программ является модульное и функциональное тестирование. Применимость подхода в каждом конкретном случае зависит от наличия полного тестового множества и окружения для запуска программ. Стоит отметить, что полнота тестового покрытия зависит от модели вычислений, используемой для описания программы. Как следствие, понятие корректности и её оценка также зависят от модели вычислений.
Наиболее распространённой метрикой, используемой для оценки корректности программ, сгенерированных нейросетями, является Pass@k – это оценка вероятности того, что хотя бы одна из программ, случайно выбранных из сгенерированных моделью, проходит все тесты [30]. Значения метрики для всего набора задач усредняются для оценки общих способностей нейросети к генерации корректного кода. Так, в метрике учитывается итеративность процесса генерации кода нейросетями, однако номер первой итерации, на которой нейросеть сгенерировала корректный код, не влияет на значение метрики. Таким образом, при оптимизация метрики Pass@k положительно подкрепляет недетерминированность модели, то есть решения, генерируемые нейросетью после оптимизации метрики, могут регулярно оказываться неверными. В связи с этим свойством из семейства Pass@k в данном исследовании рассматривается только метрика Pass@1, равная доле задач в тестовой выборке, для которых нейросеть с первого раза сгенерировала код, проходящий все тесты.
В статье [45] в качестве оценки качества работы языковой модели используется мера её скалиброванности, то есть свойства предсказывать вероятность корректности собственного ответа. Для хорошо скалиброванных моделей в качестве оценки корректности сгенерированного кода предлагается использовать непосредственно вероятность этого кода как последовательности токенов с точки зрения самой языковой модели. Для оценки скалиброванности авторы [45] применяют метрики ECE (Expected Calibration Error), Brier Score и Skill Score. При этом корректность самих программ оценивается как по тестам (Pass@k), так и по эталонному решению (Exact-Match). Стоит отметить, что настоящая работа нацелена на исследование метрик корректности кода напрямую, тогда как идея оценки скалиброванности модели ортогональна понятию корректности программ, а конкретная метрика качества кода, на которой базируется метод оценки скалиброванности, при этом не фиксируется в статье [45].
В условиях отсутствия тестов и канонических решений оценивать корректность генерируемых программ необходимо иными способами. В работе [46] вводится понятие некогерентности – вероятности того, что две случайные сгенерированные моделью программы дают разные ответы (или демонстрируют принципиально разное поведение) на случайных входных данных. Ввиду теоремы Райса [47] прямое вычисление корректности по введённому определению в общем случае невозможно, поэтому авторы [46] оценивают корректность через оценку некогерентности с помощью конечного множества сгенерированных программ и входных данных. При этом вероятностное распределение программ задаётся исследуемой языковой моделью, а распределение входов – непосредственно авторами. Определение корректности кода, на котором построено исследование [46], также легло в основу настоящей работы, а идея оценки корректности генерируемого кода на базе конечного множества программ и тестов реализована иным образом, описанным далее в разделе 2.
Метрика Pass@k описана в статье [30] совместно с набором данных HumanEval, содержащим 164 задачи на языке Python, собранные и размеченные вручную. Каждая задача сопровождается фрагментом кода на Python, содержащим сигнатуру целевой функции, которую требуется реализовать, и документирующую строку с описанием функционала и примерами тестов. В среднем каждая задача покрыта 7-8 тестами, чего оказывается недостаточно для полноценного тестирования программ даже на простых задачах из набора HumanEval. Будучи одним из наиболее популярных наборов данных в области кодогенерации, HumanEval также переведён на десяток других языков, включая Java, C#, Golang, Kotlin и TypeScript [48]. В рамках фреймворка EvalPlus [49], основанного на EvalPerf [29], построены наборы данных HumanEval+ и MBPP+, содержащие задачи из оригинальных наборов HumanEval [30] и MBPP [50] со значительно расширенным тестовым покрытием. В настоящей работе для исследования корректности программ на языке Python, решающих простые алгоритмические задачи, используется адаптированная версия набора данных HumanEval+. Отметим, что выводы, полученные в результате экспериментов, могут не обобщаться на иные языки программирования или типы задач.
Широкое применение наборов данных HumanEval [30] и MBPP [50], а также их расширенных версий HumanEval+ и MBPP+ [49] в современных исследованиях сопряжено с риском утечки тестовых данных в тренировочные выборки языковых моделей, поскольку задачи из этих наборов данных могут быть частью открытых наборов, используемых при обучении. Несмотря на это, оригинальные работы, в которых представлены языковые модели Phi-1 [8], Phi-2 [51-52], Phi-3-mini-4k [53], Phi-4-mini [50-51] и Qwen2.5-Coder [52-53], рассматриваемые в настоящем исследовании, содержат значения метрики Pass@k (как правило, Pass@1), вычисленной авторами на этих данных. Согласно результатам из перечисленных работ, лишь при оценке моделей Phi-1 [8] и Qwen2.5-Coder [52-53] были проведены дополнительные исследования качества работы модели в условиях возможной утечки данных HumanEval в обучающую выборку. Однако часть этих исследований проведена с использованием другой большой языковой модели для оценки качества работы предложенной модели, а также небольшого набора новых задач, составленных и размеченных авторами вручную. В настоящей статье соответствующие риски дополнительно не рассматриваются, а условия задач оставлены в оригинальном виде для возможности сравнения результатов экспериментов с другими научными работами. Выбор моделей для проведения экспериментов обоснован, с одной стороны, имеющимися вычислительными ресурсами, а с другой, – целью исследования поведения метрик корректности генерируемого кода в зависимости от качества работы модели.
В данной работе описано формальное теоретико-вероятностное определение корректности кода, основанное на подходе из работы [46]. Исходя из этого определения введена метрика корректности сгенерированного кода TSA (Test Suite Accuracy), позволяющая сравнивать языковые модели и ранжировать их по качеству более точно, чем метрика Pass@1.
Вклад работы состоит в следующем:
Дальнейшее изложение имеет следующую структуру. Раздел 2 содержит описание метрики TSA и теоретического базиса, лежащего в основе рассматриваемого вероятностного определения корректности кода. В этом же разделе сформулирована метрика Pass@1 в рамках описанной формализации понятия корректности кода, а также приведены результаты анализа свойств метрик TSA и Pass@1. В разделе 3 рассматриваются детали подготовки и результаты экспериментов, подтверждающих описанные свойства метрик.
В данном разделе приводится определение корректности кода, аналогичное определению из работы [46] и лежащее в основе исследования, а также описание метрики TSA и её статистических свойств.
Пусть – множество входов программы, а – множество выходов. Программой будем называть функцию , осуществляющую отображение входов в выходы. В действительности программа может зацикливаться или завершаться неуспешно на некотором подмножестве входов. Корректность кода определяется с учётом этого факта, но допустимо считать такие результаты работы программы элементами множества : это не повлияет на определение корректности.
Поскольку программы , рассматриваемые в данном исследовании, являются результатом генерации большими языковыми моделями, то множество возможных программ является вероятностным пространством. Введём также вероятностное распределение на множестве входов : оно может отражать практические знания автора задачи или программы об ожидаемых и невозможных входах. Определим степень надёжности программы как вероятность того, что она возвращает правильный ответ на случайном входе . Если задача допускает множество различных верных ответов для каждого входа , то определение степени надёжности корректируется соответственно: . В данной работе именно степень надёжности программы используется в качестве оценки корректности программы. Абсолютно корректной является программа со степенью надёжности равной 1.
Отметим, что для заданной задачи множества , и вероятностное распределение на множестве постоянны, а значит для заданной программы её степень надёжности также постоянна. Однако для её вычисления требуется определить результат программы на всех входах из множества с ненулевой вероятностью, что почти никогда не реализуемо на практике, поскольку множество может иметь бесконечную мощность. Для решения этой проблемы рассмотрим разбиение множества на конечное число множеств , – группы входов, для которых . Суть разбиения состоит в выделении независимых групп входов, отвечающих различным требованиям к программе в соответствии с условием задачи. Для оценки корректности программы строится конечное множество тестов , состоящее из групп тестов , . Каждая группа тестов должна содержать не менее одного теста , то есть должно содержать некоторую трансверсаль множеств , . Это свойство множества тестов будем называть полнотой тестового покрытия: оно необходимо для верной оценки корректности программы.
Для оценки корректности программы необходимо вычислить результат её работы лишь на конечном множестве тестов . Пусть – ый тест из множества , а . Вероятность группы тестов обозначим через . Пусть для сгенерированной программы вероятность успешного прохождения теста равна . Для фиксированной программы это значение всегда равно 1 или 0, но в условиях генерации программы из распределения на множестве индикатор события успешного прохождения теста становится случайной величиной , имеющей распределение Бернулли .
Рассмотрим случайную величину
Для заданной программы функция TSA оценивает степень её надёжности с помощью полного конечного тестового покрытия . Для практического вычисления этой функции требуется также задать вероятности отдельных тестов и групп входов . Построенная функция является оценкой корректности и называется TSA (англ. Test Suite Accuracy – точность на группах тестов).
При рассмотрении конкретной задачи и фиксировании множества тестов значение TSA постоянно для каждой программы , однако при генерации случайных программ функция TSA становится случайной величиной, принимающей значения из отрезка , с дискретным распределением. Для оценки средней надёжности программ, генерируемых конкретной языковой моделью, может использоваться математическое ожидание TSA, оцениваемое средним значением TSA для нескольких программ , . Это усреднение равносильно оценке вероятностей путём усреднения индикаторов успешности прохождения конкретного теста сгенерированными программами и последующему вычислению математического ожидания TSA с оцененными значениями , поскольку функция TSA линейна относительно . Если же рассматриваются различные задачи (а значит и множества , , и соответствующие вероятностные распределения), то соответствующие функции TSA являются случайными величинами на разных вероятностных пространствах, поэтому полученные значения TSA для каждой задачи можно также усреднить по всему набору задач для оценки общей способности нейросети к генерации корректного кода.
Исследуем статистические свойства метрики TSA. Поскольку функция TSA линейна относительно , то математическое ожидание
Величина , где , равна оценке вероятности успешного прохождения случайного теста из группы случайной программой . Так, метрика TSA основана на оценках степени надёжности программы на группах входов , полученных на конечных группах тестов .
Для вычисления дисперсии TSA сделаем несколько предположений. Первое предположение заключается в независимости случайных величин при различных . На практике это означает, что соответствие случайной программы требованиям из условия задачи, заложенным в тестах из разных групп входов, независимо. Иными словами, соответствие программы одному требованию из условия задачи не влияет на её соответствие другим требованиям. Второе предположение состоит в том, что тесты в каждой группе упорядочены по возрастанию сложности. Формально это ограничение выражается неравенствами
Это требование можно интерпретировать следующим образом: если программа не прошла тест , то на тесте её результат также окажется неверным с вероятностью 1. При этом случаи генерации программ, проходящих более сложные тесты, но не проходящих более простые, исключаются из рассмотрения как маловероятные. Отметим, что эти требования лишь упрощают вычисление дисперсии TSA, однако не являются частью определения метрики, поэтому могут не учитываться в её практических реализациях. Например, для многих задач тесты в действительности имеют одинаковую сложность в смысле рассматриваемого ограничения.
С учётом описанных предположений, значение дисперсии TSA оценивается на основе ковариации случайных величин следующим образом.
Рассмотрим несколько частных случаев.
Следствие 1. Пусть все тесты в каждой группе тестов равновероятны, то есть . Тогда
то есть метрика TSA равна взвешенной сумме среднего числа пройденных тестов в каждой группе.
Следствие 2. Пусть в каждой группе содержится всего один тест, то есть . Тогда
то есть метрика TSA равна взвешенному среднему числу пройденных тестов, при этом все тесты считаются независимыми.
Следствие 3. Если в следствии 1 положить все группы входов равновероятными, то есть , то получим
то есть метрика TSA равна среднему числу пройденных тестов в каждой группе.
Следствие 4. Если в следствии 3 предположить, что все группы тестов содержат одинаковое число тестов, то есть , то получим
то есть метрика TSA равна среднему числу пройденных тестов.
Следствие 5. Наконец, объединим условия из предыдущих следствий, то есть предположим, что в каждой группе содержится всего один тест и все тесты равновероятны. Тогда
то есть метрика TSA равна среднему числу пройденных тестов, при этом все тесты считаются независимыми.
Пусть с помощью одной языковой модели получено различных программ , , решающих одну и ту же задачу и тестирующихся на одном и том же полном наборе тестов . Тогда сами программы можно считать независимыми, а значения их метрик – независимыми и одинаково распределёнными случайными величинами. Ввиду конечности их математического ожидания и дисперсии по центральной предельной теореме
где математическое ожидание и дисперсия могут быть оценены по формулам выше.
Теперь рассмотрим свойства метрики Pass@1 [30] в рамках описанного вероятностного определения корректности кода. После введения случайных величин аналогично тому, как это сделано для метрики TSA, метрика Pass@1 выражается в виде произведения
поскольку прохождение всех тестов в группе равновероятно прохождению наиболее сложного теста в этой группе, согласно одному из предположений для вычисления дисперсии TSA. Нетрудно вычислить математическое ожидание и дисперсию метрики:
Пусть . Оценим сверху дисперсию каждой из метрик корректности кода.
где при , иначе . В предположении, что , достигается нижняя оценка суммы , и оценка дисперсии улучшается:
.
Аналогичным образом оценивается дисперсия Pass@1: , где при , иначе . Отметим, что эта оценка не зависит от числа тестов в группах и от весов каждой группы входов , поэтому, в отличие от оценки дисперсии TSA, она не улучшается в случае равновероятных групп входов.
Зафиксируем значение и для каждой из метрик определим количество групп входов , при котором дисперсия гарантированно не превысит . Для метрики TSA в случае одинаковых весов у всех групп входов получаем оценку . Для метрики Pass@1 при подходит любое ; при меньших в случае не существует гарантированно подходящих , но при при подойдут значения .
Для фиксированных значений и также можно определить минимальное количество генерируемых программ , при котором дисперсия усреднённой метрики этих программ в соответствии с центральной предельной теоремой не превысит заданного порога . При неизвестном в случае TSA имеет место оценка , а для Pass@1 справедливо . Отметим, что содержательно введённый параметр является аналогом параметра base‑rate из работы [45] для вычисления Unskilled Reference Brier Score и для конкретной модели может быть определён аналогичным образом на практике.
Полученные оценки дисперсии приводят к следующим выводам.
Для анализа поведения метрик корректности кода Pass@1 и TSA проведены эксперименты с использованием кода, сгенерированного пятью языковыми моделями. Генерация и тестирование кода выполнены на основе набора данных HumanEval++, построенного в рамках настоящего исследования. В данном разделе описаны результаты проведённых экспериментов. Сгенерированные программы, построенный набор задач и код тестирующей среды доступны в репозитории на GitLab [58].
Одной из ключевых особенностей метрики TSA является необходимость в полном тестовом покрытии и разбиении тестов на независимые группы, соответствующие различным требованиям из условия задачи. Существующие открытые наборы данных задач, предназначенные для обучения и тестирования языковых моделей, не предоставляют разбиение тестов на группы по данному принципу. В данной работе за основу взят набор HumanEval+ [49], содержащий 164 задачи, покрытые более чем 125000 тестов. Выбор данных обоснован популярностью набора HumanEval [30] и количеством тестов в HumanEval+, достаточным для получения точных оценок качества кода.
Оригинальный набор HumanEval+ представлен в текстовом формате JSONL, где каждая строка является JSON объектом с описанием условия задачи и тестирующего кода на Python. В рамках данного исследования набор данных был разбит на отдельные файлы, соответствующие различным задачам и содержащие условие задачи на языке Python, код канонического решения, текстовые файлы с входными и выходными данными тестов (по одному тесту в строке). Описание условий задач и тестов приведено к единому формату для всех задач набора, что упрощает обработку сгенерированных решений на этапе тестирования. Тесты каждой задачи нумеруются с 1, а их разбиение на группы описывается отдельным файлом в формате YAML. Разбиение тестов на группы произведено автоматически путём классификации входных и выходных данных; код каждого классификатора подготовлен и верифицирован вручную. В результате классификации тестов каждой задаче соответствует от 3 до 8 групп тестов. Код классификатора для каждой задачи также стал частью нового набора HumanEval++ [59].
Полученный набор является расширяемым по множеству задач и тестов и разбиению тестов на группы. Формат описания файлов, необходимых для воспроизведения тестирования и расширения набора задач, описан в репозитории проекта на GitLab [58].
Для генерации кода, решающего задачи из набора HumanEval++, использовались 5 языковых моделей: Phi-1 [8], Phi-2 [51-52], Phi-3 [53], Phi-4 [54-55] и Qwen2.5-Coder [56-57]. Каждая из моделей запускалась 5 раз для последующего анализа дисперсии метрик качества кода. Число весов моделей и ключевые параметры генерации приведены в табл. 1.
Табл. 1. Языковые модели и параметры генерации.
| Модель | Число весов | Температура | top-k | top-p | max_new_tokens |
|---|---|---|---|---|---|
| Phi-1 | |||||
| Phi-2 | |||||
| Phi-3 | |||||
| Phi-4 | |||||
| Qwen2.5-Coder |
Для автоматизации тестирования языковых моделей в задаче генерации кода критически важно контролировать формат ответа нейросети. Основным инструментом управления этим форматом, помимо непосредственно параметров генерации, служит текст запроса модели. В контексте решения задач из HumanEval недостаточно точный запрос может приводить к генерации пустого тела функции, новых функций после или вместо требуемой, комментариев с пометкой TODO, лишнего кода тестов и примеров запуска функции, лишнего текста на естественном языке, текста в формате Markdown или даже корректного, но закомментированного кода. Для решения перечисленных проблем в рамках проведённых экспериментов использовался следующий запрос.
You are an experienced Python developer. Given the Python code snippet below, implement the following function to solve the problem described in the docstring. Do NOT do the following actions: - change the problem statement in any way - duplicate the function definition or change its name or signature which are already provided in the task below - generate other global functions - generate any kind of explanations, including markdown-style text - use comments containing Python code - leave all kinds of TODO-like comments - leave an empty function body (including pass statements or comments) - write tests for your own code - print anything to stdout or stderr You are ONLY allowed to implement the given function below. The function prototype is already provided in the statement below, you only need to fill in the function body. Stop generating code as soon as the given function definition ends. You may use Python standard library, but don't forget to import the necessary libraries in that case.
После генерации полного ответа нейросети к нему последовательно применялись следующие преобразования для извлечения и нормализации кода.
Скрипт для генерации кода с помощью указанных языковых моделей и тексты сгенерированных программ до и после применения перечисленных эвристик расположены в репозитории проекта на GitLab [58].
На этапе запуска полученного кода целевая функция в каждой задаче импортируется из соответствующего модуля, сгенерированного нейросетью, с помощью библиотеки importlib. Запуск функции на тестах производится в отдельном потоке, при этом для каждого теста установлено ограничение на максимальное время работы функции, равное 10 секундам, при превышении которого поток останавливается, а оставшиеся тесты текущей группы считаются непройденными. Аналогичное ограничение установлено на время прохождения всех тестов задачи, равное 20 секундам, при превышении которого задача считается полностью нерешённой. Для запуска тестов и вычисления метрик корректности кода разработана утилита командной строки, позволяющая настраивать некоторые аспекты тестирования, включая остановку запуска оставшихся тестов в группе после первой ошибки на тесте. Код утилиты и описание формата результатов её работы приведены в репозитории проекта на GitLab [58].
В табл. 2 приведены результаты работы всех пяти моделей и статистика значений соответствующих метрик качества кода, вычисленных на всех пяти фазах генерации для всех 164 задач набора данных. Выполнение тестов в каждой группе останавливалось после получения первой ошибки; веса групп тестов полагались равными. Значения метрик отмасштабированы на отрезок , для каждой метрики вычислено среднее значение, медиана, абсолютное () и относительное (RSD) стандартное отклонение и доверительные интервалы с уровнем доверия 95% и 99%. Доверительные интервалы построены на основе распределения t-Стьюдента с 819 степенями свободы.
Табл. 2. Метрики качества кода, вычисленные для 5 моделей по всему набору данных.
| Метрика | Модель | |||||
|---|---|---|---|---|---|---|
| Phi-1 | Phi-2 | Phi-3 | Phi-4 | Qwen2.5-Coder | ||
| TSA | Среднее | 25.98 | 13.25 | 12.94 | 49.36 | 85.92 |
| Медиана | 0.00 | 0.00 | 0.00 | 40.00 | 99.99 | |
| 37.29 | 25.49 | 25.72 | 43.79 | 28.14 | ||
| RSD | 1.44 | 1.92 | 1.99 | 0.89 | 0.33 | |
| 95% ДИ | [23.4; 28.5] | [11.5; 15.0] | [11.2; 14.7] | [46.4; 52.4] | [84.0; 87.8] | |
| 99% ДИ | [22.6; 29.3] | [11.0; 15.5] | [10.6; 15.3] | [45.4; 53.3] | [83.4; 88.5] | |
| Pass@1 | Среднее | 15.85 | 4.76 | 5.00 | 37.20 | 74.63 |
| Медиана | 0.00 | 0.00 | 0.00 | 0.00 | 100.00 | |
| 36.52 | 21.28 | 21.79 | 48.33 | 43.51 | ||
| RSD | 2.30 | 4.48 | 4.36 | 1.30 | 0.58 | |
| 95% ДИ | [13.4; 18.4] | [3.3; 6.2] | [3.5; 6.5] | [33.9; 40.5] | [71.7; 77.6] | |
| 99% ДИ | [12.6; 19.1] | [2.8; 6.7] | [3.0; 7.0] | [32.8; 41.6] | [70.7; 78.6] | |
Полученные значения метрик на всём наборе данных позволяют сделать такие выводы:
Табл. 3 содержит информацию о распределении абсолютного и стандартного отклонения каждой метрики, вычисленных по 5 сгенерированным программам для каждой задачи.
Табл. 3. Среднее стандартное отклонение метрик качества кода для каждой задачи в данных.
| Метрика | Модель | |||||
|---|---|---|---|---|---|---|
| Phi-1 | Phi-2 | Phi-3 | Phi-4 | Qwen2.5-Coder | ||
| TSA | 12.73 | 11.13 | 9.12 | 12.95 | 8.77 | |
| RSD | 0.49 | 0.59 | 0.39 | 0.33 | 0.15 | |
| Pass@1 | 9.49 | 7.27 | 7.49 | 12.29 | 12.07 | |
| RSD | 0.25 | 0.29 | 0.28 | 0.26 | 0.26 | |
Для моделей с низким качеством работы (Phi-1, Phi-2 и Phi-3) дисперсия TSA оказывается выше, чем у Pass@1. Для модели Phi-4 со средним качеством генерируемого кода дисперсия обеих метрик примерно одинакова, а для Qwen2.5-Coder метрика TSA обладает сильно меньшей дисперсией, чем Pass@1. Это объясняется тем, что для программ с высокой степенью надёжности, не проходящих лишь небольшую часть тестов, покрывающих, как правило, краевые случаи, метрика Pass@1 принимает значение 0, тогда как TSA останется высоким, как и для абсолютно корректных программ. При этом модели, генерирующие качественный код, склонны чаще выдавать абсолютно корректный и почти корректный код. Так, для качественных моделей метрика TSA позволяет получить более точную оценку корректности кода, а для моделей с низким качеством работы TSA даёт возможность более консервативного сравнения и ранжирования моделей на основе средних значений метрики и доверительных интервалов, нежели Pass@1.
Значение и стабильность метрики TSA зависят от ряда дополнительных условий проведения эксперимента: конкретного разбиения тестов на группы, весов групп тестов и конкретного порядка тестов в группах. Напомним, что предположение об упорядоченности тестов по сложности внутри группы не требуется для вычисления метрики TSA, а лишь упрощает оценку её дисперсии в теоретических выкладках. Для исследования зависимости значений метрики TSA от перечисленных условий проведены дополнительные эксперименты, предполагающие варьирование следующих параметров:
В табл. 4-8 приведены результаты дополнительных экспериментов.
Табл. 4. Среднее значение и стандартное отклонение метрики TSA для модели Phi-1 при разных параметрах вычисления TSA.
| Параметры вычисления TSA | Число групп тестов | |||
|---|---|---|---|---|
| Остановка при первой ошибке | Веса групп тестов | Все | 3 наибольших | 1 |
| Да | Равные | (25.98, 37.29) | (22.28, 37.40) | (16.10, 36.47) |
| Пропорциональные | (21.80, 38.61) | (21.23, 38.48) | ||
| Нет | Равные | (28.70, 38.32) | (26.71, 38.71) | (24.79, 39.72) |
| Пропорциональные | (25.16, 39.91) | (25.08, 39.80) | ||
Табл. 5. Среднее значение и стандартное отклонение метрики TSA для модели Phi-2 при разных параметрах вычисления TSA.
| Параметры вычисления TSA | Число групп тестов | |||
|---|---|---|---|---|
| Остановка при первой ошибке | Веса групп тестов | Все | 3 наибольших | 1 |
| Да | Равные | (13.25, 25.49) | (9.69, 24.18) | (4.80, 21.28) |
| Пропорциональные | (9.37, 26.07) | (8.91, 25.77) | ||
| Нет | Равные | (14.36, 26.96) | (12.23, 26.57) | (10.90, 27.85) |
| Пропорциональные | (10.93, 27.88) | (10.93, 27.88) | ||
Табл.6. Среднее значение и стандартное отклонение метрики TSA для модели Phi-3 при разных параметрах вычисления TSA.
| Параметры вычисления TSA | Число групп тестов | |||
|---|---|---|---|---|
| Остановка при первой ошибке | Веса групп тестов | Все | 3 наибольших | 1 |
| Да | Равные | (12.94, 25.72) | (9.48, 24.40) | (5.13, 21.89) |
| Пропорциональные | (9.48, 26.66) | (8.97, 26.09) | ||
| Нет | Равные | (13.87, 26.93) | (11.76, 26.94) | (10.67, 28.17) |
| Пропорциональные | (10.77, 28.39) | (10.75, 28.33) | ||
Табл. 7. Среднее значение и стандартное отклонение метрики TSA для модели Phi-4 при разных параметрах вычисления TSA.
| Параметры вычисления TSA | Число групп тестов | |||
|---|---|---|---|---|
| Остановка при первой ошибке | Веса групп тестов | Все | 3 наибольших | 1 |
| Да | Равные | (49.36, 43.79) | (44.29, 45.91) | (37.69, 48.10) |
| Пропорциональные | (43.57, 47.30) | (42.73, 47.42) | ||
| Нет | Равные | (52.04, 43.70) | (49.46, 45.35) | (47.03, 47.23) |
| Пропорциональные | (47.48, 47.18) | (47.48, 47.18) | ||
Табл. 8. Среднее значение и стандартное отклонение метрики TSA для модели Qwen2.5-Coder при разных параметрах вычисления TSA.
| Параметры вычисления TSA | Число групп тестов | |||
|---|---|---|---|---|
| Остановка при первой ошибке | Веса групп тестов | Все | 3 наибольших | 1 |
| Да | Равные | (85.92, 28.14) | (82.13, 33.79) | (75.31, 42.60) |
| Пропорциональные | (82.57, 34.94) | (81.40, 36.20) | ||
| Нет | Равные | (88.53, 25.52) | (87.56, 27.68) | (86.13, 31.36) |
| Пропорциональные | (86.57, 30.75) | (86.48, 30.79) | ||
Значения метрики TSA, полученные в рамках дополнительных экспериментов, позволяют провести следующие наблюдения:
В настоящей работе предложена метрика TSA для оценки корректности программ на основе вероятностного определения корректности кода, а также проведён сравнительный анализ свойств этой метрики с метрикой Pass@1. Описанные теоретические свойства метрик подтверждаются экспериментами, в рамках которых с помощью 5 языковых моделей Phi-1, Phi-2, Phi-3, Phi-4 и Qwen2.5-Coder сгенерированы программы для решения задач из набора HumanEval. Для экспериментов использовалась новая версия этого набора HumanEval++, построенная в рамках исследования. По результатам проведённых экспериментов метрика TSA демонстрирует меньшую дисперсию по сравнению с Pass@1 при оценке качественных моделей и не требует тонкой настройки условий тестирования для точной оценки моделей с низким качеством работы.
Давид Арменович АВАГЯН – аспирант кафедры алгоритмических языков факультета вычислительной математики и кибернетики Московского государственного университета имени М.В. Ломоносова. Сфера научных интересов: нейросетевая генерация кода, метрики качества программ.