I had strings, but now I’m free. There are no strings on me
TR;DL
Project CodeNet — это большой набор данных, предназначенный для обучения ИИ программированию, который состоит из 14 миллионов примеров кода, около 500 миллионов строк кода на более чем 55 различных языках программирования.
«Софт ест мир», — написал американский предприниматель Марк Андриссен в 2011 году. Перенесемся в наши дни — программное обеспечение используется в финансовых услугах и здравоохранении, смартфонах и умных домах. Сегодня даже автомобили содержат более 100 миллионов строк кода.
Однако такие большие объемы кода сложно отлаживать, поддерживать и обновлять, особенно когда предприятия стремятся модернизировать свою устаревшую программную инфраструктуру. В результате мы находимся в новой эпохе, когда важно использовать преимущества современных технологий, таких как искусственный интеллект и гибридное облако, для создания новых решений, которые могут модернизировать процессы в конвейере информационных технологий.
Зайдите на Project CodeNet. Большой набор данных, предназначенный для обучения искусственного интеллекта программированию, он состоит из примерно 14 миллионов примеров кода и около 500 миллионов строк кода на более чем 55 различных языках программирования, от современных, таких как C++, Java, Python и Go, до устаревших языков, таких как COBOL, Pascal и Fortran.
Но чтобы понять значение этого набора данных, мы должны сначала сделать посмотреть в прошлое.
Следующий рубеж ИИ: язык машин
Компьютерных специалистов давно интересовала возможность, когда компьютер программирует компьютеры. Может ли ИИ упростить понимание, разработку и развертывание кода — языка машин? Можно, но добиться этого нелегко.
Проблема заключается в системах, основанных на правилах.
Возьмем перевод на язык программирования. Если бы это было легко и системы, основанные на правилах, работали бы, и ранние языки программирования, такие как COBOL, уже были бы преобразованы. Но у языков программирования есть контекст. Значение любого утверждения связано с контекстом, и его получение и перевод, как и в случае с человеческими языками, сложны и требуют много времени.
Чем больше становится программа, тем труднее ее переводить. На человеческом языке контекст может быть ограничен параграфом или около того, здесь контекст может относиться к нескольким библиотекам кода. Контекст — это вызов для ИИ.
Грубо говоря, системы, основанные на правилах, могут успешно переводить от 50 до 60 процентов программы. Часть программы может быть переведена достаточно хорошо, остальную часть обычно приходится переводить вручную, используя сложные правила.
Развитие ИИ для кода
Здесь ИИ может помочь, потому что он может действовать как люди.
Project CodeNet, в частности, может стимулировать алгоритмические инновации для извлечения этого контекста с помощью последовательных моделей, точно такие же, что мы применяем в человеческих языках, чтобы сделать более значительную ясность в машинном понимании кода, как и в машинной обработки кода.
Project CodeNet уникален благодаря образцам кода, отобранным на открытых соревнованиях по программированию на протяжении многих лет. Он уникален не только по размеру и масштабу, но и по качеству метаданных и аннотаций с богатым набором информации, будь то размер кода, объем памяти, время работы ЦП или состояние, что указывает на принятие или типы ошибок.
Более 90 процентов проблем связаны с соответствующим описанием проблемы, содержащим краткую формулировку проблемы, спецификацию входного и выходного формата. Для более чем половины проблем программирования (то есть семи миллионов образцов кода) мы также курировали входные и выходные образцы из описания проблемы, что является ключом к определению эквивалентности двух образцов кода на разных языках, что может стимулировать методы обучения с подкреплением для перевода кода.
Мы предоставляем их как часть набора данных — удобную функцию Project CodeNet. Пользователи могут выполнять принятые образцы кода для извлечения дополнительных метаданных и проверки правильности выходных данных генеративных моделей ИИ. Это позволит исследователям программировать эквивалентность намерений при переводе одного языка программирования на другой.
Богатые метаданные и разнообразие примеров кода и проблем, которые они решают, открывают Project CodeNet для множества вариантов использования. Набор данных можно использовать для поиска кода и обнаружения копий. Образцы кода в Project CodeNet помечены статусом принятия, и мы можем изучить методы искусственного интеллекта, чтобы отличать правильный код от проблемного.
Метаданные Project CodeNet также позволяют отслеживать эволюцию представления от проблемного до принятого, что может быть использовано для изучения автоматического исправления кода. Каждый образец кода помечен временем выполнения ЦП и объемом памяти, что полезно для регрессионных исследований и прогнозирования.
Учитывая обилие программ, написанных на множестве языков, мы считаем, что Project CodeNet может служить эталонным набором данных для перевода из источника в источник и делать для ИИ и кода то, что набор данных ImageNet много лет назад сделал для компьютерного зрения.
Модернизация и эксплуатация программной инфраструктуры также важны с точки зрения бизнеса. Мы коснулись этого в прошлом году, когда IBM анонсировала несколько новых возможностей, в том числе IBM WatsonAIOps и Accelerator для модернизации приложений, предназначенных для автоматизации конвейера информационных технологий.
Например, крупный автомобильный клиент обратился к IBM с просьбой помочь обновить актив стоимостью 200 миллионов долларов, состоящий из 3500 файлов Java нескольких поколений. Эти файлы состояли из более чем одного миллиона строк кода, разработанного за десять лет с использованием технологии Java нескольких поколений.
Это был сложный монолитный код приложения, не подходивший для облачных сред. Применяя наш стек AI для кода, мы сократили продолжающийся год бизнес-процесс миграции кода до четырех недель, модернизировали и создали более 25 новых облачных микросервисов путем рефакторинга устаревшего монолитного кода приложения.
Наша команда рада предоставить исследователям и разработчикам набор данных и набор технологий, которые просты в использовании и понимании, одновременно помогая в разработке алгоритмов, которые будут способствовать развитию ИИ для кода. Мы надеемся, что с помощью Project CodeNet будут приносить пользу для бизнеса по мере того, как предприятия начинают свой путь модернизации ИТ.