Новый подход LSem2Vec: как получить вектор кода за два шага и без дорогостоящего обучения

6 сентября 202634 просмотров

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

Новый подход LSem2Vec: как получить вектор кода за два шага и без дорогостоящего обучения

Что такое эмбеддинги кода

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

В чём сложность

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

Идея LSem2Vec

Авторы работы предложили двухэтапный подход с говорящим названием LSem2Vec — LLM-extracted code Semantics to Vector embedding. Вместо попыток обучить ещё одну тяжёлую модель они соединяют уже готовые компоненты: LLM извлекает из кода его смысл, а модель эмбеддингов предложений преобразует описание в вектор. Дообучение под конкретную задачу не требуется.

Разберём процесс по шагам. На первом этапе LLM получает код и должна сформулировать, что именно он делает. Это не механический пересказ исходника, а выделение сути: модель отбрасывает второстепенные детали, чтобы в описание попадало только важное для смысла. Попутно такой подход отсекает и возможные «фантазии» больших моделей — ошибочную информацию, которая чаще всего появляется при попытке закодировать код напрямую.

Второй этап тривиален по меркам машинного обучения: описание, полученное от LLM, подаётся в модель эмбеддингов предложений. Такая модель уже обучена превращать естественный язык в осмысленные векторы, поэтому адаптировать её к синтаксису языков программирования не нужно.

Почему это работает

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

Как проверяли и что получилось

Эксперименты проводились на трёх наборах данных, составленных на разных языках программирования. Авторы целенаправленно меняли и LLM, и модели эмбеддингов, чтобы убедиться: результат не зависит от конкретной пары инструментов.

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

Статус работы

Статья была выложена на arXiv в сентябре 2024 года, последняя доступная версия — v5 от августа 2026-го. По информации авторов, работа принята журналом Frontiers of Computer Science. Значит, у подхода появилась не только страница препринта, но и рецензированная публикация. Оригинал можно найти по DOI: 10.1007/s11704-026-61288-0.

Итог

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

Часто задаваемые вопросы

Похожие материалы

Все материалы
LSem2Vec: как получить вектор кода без обучения