Задача CodeSearchNet по улучшению поиска семантического кода


Как разработчики, мы прекрасно понимаем, насколько сложно найти соответствующий код с помощью запроса на естественном языке. Теперь GitHub выпустил большой набор данных кода и комментариев на естественном языке с целью дальнейшего исследования семантического поиска кода вместе с таблицей лидеров CodeSearchNet Challenge для поощрения участия.

Как объясняется в репозитории GitHub, CodeSearchNet представляет собой набор наборов данных и тестов, которые исследуют проблему извлечения кода с использованием естественного языка. Это сотрудничество между GitHub и группой Deep Program Understanding в Microsoft Research — Cambridge и исследователями, Хамелем Хусейном, Хо-Хсианг Ву, Тиферет Газит, Милтиадисом Алламанисом и Марком Брокшмидтом, которые объясняют предысторию инициативы и дают полный отчет о том, как набор данных был создан в архиве.
В качестве введения исследователи отмечают, что, хотя глубокое обучение коренным образом изменило наш подход к задачам восприятия, таким как распознавание изображений и речи, и продемонстрировало существенные успехи в работе с данными на естественном языке, его трудно распространить на поисковый код. Они отмечают:
Стандартные методы поиска информации плохо работают в области поиска кода, так как часто существует небольшой общий словарный запас между условиями поиска и результатами (например, рассмотрите метод deserialize_JSON_obj_from_stream, который может быть правильным результатом для запроса «читать данные JSON»). Еще более проблематично то, что оценка методов для этой задачи чрезвычайно сложна, поскольку для этой задачи не было создано существенных наборов данных; вместо этого сообщество пытается обойтись небольшими наборами данных из связанных контекстов (например, объединение вопросов на веб-форумах с фрагментами кода, найденными в ответах).
Чтобы иметь возможность применять методы глубокого обучения к поиску семантического кода, CodeSearchNet Corpus был программно получен путем очистки репозиториев с открытым исходным кодом и объединения отдельных функций с их (обработанной) документацией в виде аннотации на естественном языке.
Как указано в репозитории GitHub, основной набор данных состоит из 2 миллионов пар (комментарий, код) из библиотек с открытым исходным кодом. Конкретно, комментарий — это комментарий функции или метода верхнего уровня (например, строки документации в Python), а код — это целая функция или метод. В настоящее время набор данных содержит код Python, Javascript, Ruby, Go, Java и PHP.
В документе также объясняется, что для целей CodeSearchNet Challenge был определен набор реалистичных запросов и экспертных аннотаций для вероятных результатов. Он состоит из 99 запросов на естественных языках в паре с вероятными результатами для каждого из шести языков программирования, в которых каждая пара запрос / результат была помечена экспертом-человеком, что указывает на релевантность результата для запроса.
Challenge использует тест Weights & Biases для отслеживания и сравнения моделей, обученных на этом наборе данных. Помимо таблицы лидеров, вы можете увидеть сравнения моделей и подробные сведения о наборах прогонов.

Объявляя о конкурсе CodeSearchNet Challenge в блоге GitHub, Хамель Хусейн еще раз подчеркивает, насколько оно актуально для разработчиков и их повседневного опыта:
Поиск кода для повторного использования, вызова или выяснения того, как другие решают проблему, — одна из самых распространенных задач в день разработчика программного обеспечения. Однако поисковые системы для кода часто разочаровывают и никогда полностью не понимают, чего мы хотим, в отличие от обычных поисковых систем. Мы начали использовать современные методы машинного обучения для улучшения поиска кода, но быстро поняли, что не можем измерить наш прогресс.
Поделившись этим постом в Hacker News, он отмечает:
Причина, по которой мы рады разместить эти данные, заключается в том, что мы верим, что сообщество сможет внедрять инновации и продвигать современные достижения намного быстрее, если они будут предоставлены в удобном формате для исследователей машинного обучения.
В другом комментарии к Hacker News обсуждаются преимущества использования Challenge (который в настоящее время не имеет других стимулов, кроме «давайте двигаться вперед») — это степень прозрачности, которую он предлагает. Согласно плакату mloncode:
Ты можешь видеть:
— Вся информация системного журнала, включая использование CPU / GPU, со средой выполнения и типом используемой карты GPU — Обширное ведение журнала прогресса обучения модели — Все артефакты и метаданные модели — Ссылка на код на GitHub с кодом, который запускал это данные. — Все, что отправлено в стандартный вывод (для регистрации) и т. Д.
Это обеспечивает исключительную воспроизводимость и понимание, что очень полезно. С помощью этих инструментов сообщество может увидеть, используется ли метод «объединить все:», сколько времени требуется для обучения модели, какие ресурсы потребляются и т. Д.
Хотя будет интересно увидеть результаты сообщества машинного обучения, как работающие разработчики мы надеемся, что эта задача решит или, по крайней мере, улучшит основные проблемы поиска семантического кода.

Изображение предоставлено: блог GitHub


Добавить комментарий