<НА ГЛАВНУЮ

VERINA: новый стандарт оценки генерации проверяемого кода с помощью LLM и формальных доказательств

VERINA представляет комплексный бенчмарк для оценки LLM в генерации проверяемого кода, объединяя код, формальные спецификации и доказательства с разным уровнем сложности.

Проблема верификации при генерации кода с помощью LLM

Большие языковые модели (LLM), используемые в инструментах вроде Cursor и GitHub Copilot, значительно повышают продуктивность программирования. Однако из-за вероятностной природы этих моделей они не могут гарантировать формальную корректность сгенерированного кода, что приводит к ошибкам и снижает эффективность при использовании LLM для критически важных задач.

Ограничения существующих бенчмарков

Существующие бенчмарки, такие как HumanEval и MBPP, сосредоточены на генерации кода и не охватывают формальные спецификации или доказательства. Многие проекты по верификации затрагивают только отдельные задачи и предполагают, что остальные элементы предоставляются человеком. Например, DafnyBench и miniCodeProps ориентированы на генерацию доказательств, а AutoSpec и SpecGen восстанавливают спецификации и доказательства из кода, написанного человеком. Интерактивные системы теорем, например Lean, предлагают перспективы для генерации проверяемого кода с LLM, поддерживая построение доказательств с промежуточными шагами. Тем не менее, существующие бенчмарки на Lean ограничены по охвату задач и качеству.

Представляем VERINA: комплексный бенчмарк

VERINA (Verifiable Code Generation Arena), созданный исследователями из Университета Калифорнии и Meta FAIR, закрывает эти пробелы, объединяя задачи генерации кода, спецификаций и доказательств. В набор входит 189 программных задач, оформленных в Lean, с подробными описаниями проблем, формальными спецификациями, реализациями кода и тестовыми наборами с полным покрытием строк.

Все задачи вручную проверены и уточнены для ясности и точности, взяты из MBPP, LiveCodeBench, LeetCode и других источников, с разным уровнем сложности. Каждая задача включает тесты для проверки положительных и отрицательных сценариев, что обеспечивает глубокую оценку.

Структура набора данных: VERINA-BASIC и VERINA-ADV

VERINA разделен на два поднабора:

  • VERINA-BASIC: 108 задач, переведенных из кода на Dafny, включая 49 задач из MBPP-DFY50 и 59 из CloverBench, переведенных с помощью модели OpenAI o3-mini и проверенных вручную.

  • VERINA-ADV: 81 более сложная задача из курсов по теореме доказательства, где студенты формализовали решения в Lean, взятые с LeetCode и LiveCodeBench.

Набор данных поддерживается строгим контролем качества: подробные описания, полное покрытие кода тестами и 100% успешное прохождение тестов с эталонными спецификациями.

Оценка LLM на VERINA: результаты и вызовы

Анализ девяти современных LLM на VERINA выявил четкую иерархию результатов:

  • Генерация кода достигает наивысших успехов.
  • Генерация спецификаций имеет средние показатели.
  • Генерация доказательств остается самой сложной, с pass@1 ниже 3.6% у всех моделей.

VERINA-ADV сложнее во всех трех задачах. Итеративное улучшение доказательств с помощью модели o4-mini повысило успехи на простых задачах с 7.41% до 22.22% после 64 итераций, но улучшения на сложных задачах ограничены. Наличие эталонных спецификаций значительно улучшает генерацию кода, показывая, что формальные спецификации эффективно направляют синтез.

Перспективы и значение

VERINA задает новый стандарт оценки генерации проверяемого кода, объединяя код, спецификации и доказательства в одном бенчмарке. Несмотря на небольшой размер для дообучения, он служит прочной основой для будущих исследований. Масштабирование с помощью автоматической аннотации, улучшение метрик с использованием более мощных проверов, включая LLM и SMT-солверы, а также решение сложных отношений корректности — перспективные направления для повышения качества генерации спецификаций и надежности верификации.

Для дополнительной информации ознакомьтесь с статьей, карточкой набора данных и страницей GitHub. Следите за проектом в Twitter и присоединяйтесь к сообществам ML для обновлений.

🇬🇧

Switch Language

Read this article in English

Switch to English