fbpx
  • ContraCode: нейросеть находит функционально схожий код

    ContraCode — это нейросеть для поиска функционально схожего кода программ. Модель предобучали с помощью contrastive pre-training подхода. Предобученную нейросеть затем дообучили на задачах вывода типов и суммаризации кода. Во время предобучения исследователи трансформируют компилятор, чтобы сгенерировать эквивалентные по функционалу и отличные по тексту части программ. По результатам экспериментов, дообученная нейросеть обходит state-of-the-art на задачах вывода типов и суммаризации кода для языка JavaScript. ContraCode улучшает точность суммаризации на 7.9% в сравнении с supervised подходами и на 4.8% в сравнении с RoBERTa.

    Описание проблемы

    Большинство существующих подходов к обучению представлениям обучаются с учителем на специфичных размеченных датасетах. Исследователи предлагают self-supervised алгоритм ContraCode, который выучивает представления кода без привязки к задачам. Подход не требует размеченные данные для обучения.

    ContraCode pre-training improves code summarization accuracy by 7.9% over supervised approaches and 4.8% over RoBERTa pre-training. Moreover, our approach is agnostic to model architecture; for a type inference task, contrastive pre-training consistently improves the accuracy of existing baselines.

    Контрастивное предобучение

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

    Визуализация процесса обучения

    Модель предобучали на коде 1.8 миллионов неразмеченных методов на JavaScript. Код методов извлекли из публичных репозиториев на GitHub. В качестве архитектуры брали LSTM и Transformer.

    Дообучение на целевых задачах

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