Uncategorized

AI Weekly: перспективы и ограничения инструментов машинного программирования

Повысьте уровень технологий и стратегии корпоративных данных на Transform 2021.


Машинное программирование, автоматизирующее разработку и обслуживание программного обеспечения, становится все более популярным благодаря искусственному интеллекту. Во время конференции разработчиков Build в мае Microsoft подробно рассказала о новой функции в Power Apps, которая использует языковую модель OpenAI GPT-3, чтобы помочь людям в выборе формул. Intel ControlFlag может самостоятельно обнаруживать ошибки в коде. А TransCoder от Facebook преобразует код с одного языка программирования в другой.

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

По словам Джастина Готчлиха, главного исследователя искусственного интеллекта в подразделении машинного программирования Intel, инструменты предложения и проверки кода на основе ИИ обещают существенно сократить расходы на разработку, позволяя кодировщикам сосредоточиться на более творческих, менее повторяющихся задачах. Готчлих возглавляет работу над ControlFlag, который объединяет машинное обучение, формальные методы, языки программирования и компиляторы для обнаружения нормальных шаблонов кодирования, выявления аномалий в коде, которые могут вызвать ошибку.

«До появления систем программирования на основе машинного обучения или искусственного интеллекта у программистов были десятки, а возможно, и сотни инструментов, которые помогали им работать более продуктивно, создавать код с меньшим количеством логических ошибок, улучшать производительность программного обеспечения и т. Д. Однако почти все эти системы были «основаны на правилах», – сказал Готчлих VentureBeat по электронной почте. «Несмотря на свою полезность, системы, основанные на правилах, по своей сути ограничены в объеме правилами, которые они в них запрограммировали. Таким образом, если возникнут новые вещи, системы должны будут обновляться людьми. Более того, эти основанные на правилах системы всегда были подвержены человеческим ошибкам при создании закодированных в них правил. Например, программисты могут случайно создать правило для поиска определенного типа ошибки, но неправильно определить правила для его поиска. Эта скрытая ошибка в системе правил может остаться незамеченной навсегда ».

Готчлих утверждает, что системы на основе ИИ предлагают преимущества по сравнению с системами, основанными на правилах прошлых лет, потому что ИИ может обучаться самостоятельно без присмотра, что позволяет ему использовать массивные базы данных кода. При обучении без учителя в алгоритм вводятся «неизвестные» данные, для которых не существует ранее определенных меток. Система должна научиться классифицировать данные, обрабатывая их, чтобы изучить их структуру.

Например, ControlFlag был обучен более чем 1 миллиарду немаркированных строк кода для выявления стилистических вариаций в языке программирования. Что касается TransCoder, он научился переводить между C ++, Java и Python путем анализа корпуса GitHub, содержащего более 2,8 миллиона репозиториев. Microsoft обучила программу выявления ошибок на наборе данных из 13 миллионов рабочих элементов и ошибок от 47 000 разработчиков из репозиториев AzureDevOps и GitHub. Алгоритмы платформы проверки кода DeepCode были обучены с использованием миллиардов строк кода, взятых из общедоступных проектов с открытым исходным кодом.

Генерация кода против дополнения

Конечно, есть разница между инструментами кодирования на базе искусственного интеллекта, которые могут генерировать код целиком, и, конечно же, дополнением рабочего процесса программиста. Последнее встречается чаще. Такие стартапы, как Tabine (ранее Codota), разрабатывают платформы, которые предлагают и автозаполняют скрипты на Python, C, HTML, Java, Scala, Kotlin и JavaScript. Ponicode использует AI, чтобы проверить точность кода. Механизм Intel Machine Inferred Code Similarity может определять, когда два фрагмента кода выполняют похожие задачи, даже если они используют разные структуры и алгоритмы. DeepCode, как и Amazon, предлагает систему на основе машинного обучения для проверки кода всего приложения.

«В настоящее время мы видим множество помощников с искусственным интеллектом, которые позволяют разработчикам программного обеспечения повысить скорость и точность своей работы. И причина доступности большего количества вспомогательных инструментов, чем инструментов автоматизации, заключается в том, что автоматизация на основе ИИ просто еще не достигла требуемого уровня точности », – сказал VentureBeat генеральный директор Ponicode Патрик Жубер. «Наша отрасль все еще молода, и даже несмотря на то, что мы уже видим потенциал автоматизации с помощью генераторов кода на основе ИИ, мы должны признать, что автоматически сгенерированный код по-прежнему практически невозможно поддерживать, а общее качество еще не соответствует нужным стандартам. В то время как некоторые инженеры работают над будущим автоматизации на основе искусственного интеллекта, моя команда и я вместе со многими другими заинтересованными сторонами посвящаем себя созданию инструментов, которые можно использовать уже сегодня. Я считаю, что через несколько лет будет достаточно инструментов, чтобы охватить все этапы жизненного цикла разработки ».

Для Жубера наиболее интригующими категориями инструментов машинного программирования сегодня являются автозаполнение и анализ кода. Системы автозаполнения, такие как Tabnine и Kite, используют ИИ для анализа семантики и понимания кода, автозаполнения функций с учетом семантического содержания и цели кода. Что касается инструментов анализа кода, таких как Snyk и DeepCode, они предназначены для поиска уязвимостей в коде и предложения действий по их устранению – часто с удивительной скоростью и точностью.

«Когда мы видим многочисленные утечки и ошибки в любом программном обеспечении, в том числе созданном ведущими транснациональными корпорациями, мы можем согласиться с тем, что [the software] промышленность еще не созрела. Инструменты кодирования на базе ИИ в основном предназначены для расширения возможностей разработчиков и расширения возможностей благодаря большей скорости и эффективности », – добавил Жубер. «За этими преимуществами, ориентированными на разработчиков, я считаю, что мы находимся на пути к тому, чтобы позволить инженерам-программистам создавать программное обеспечение промышленного уровня, в котором качество, инновации и скорость достигаются систематически … Автозаполнение [in particular is] позволяя разработчикам программного обеспечения сосредоточиться на самой сложной части своей кодовой базы и снимая бремя ручного написания длинных строк кода ».

Ограничения

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

Пытаясь решить эту проблему, IBM недавно выпустила CodeNet, набор данных из 14 миллионов выборок с 500 миллионами строк кода, написанных на 55 языках программирования. Компания утверждает, что обширные аннотации, добавленные в CodeNet, делают его подходящим для разнообразного набора задач в отличие от других наборов данных, специализированных для конкретных задач программирования. Исследователи из IBM уже провели несколько экспериментов с CodeNet, включая классификацию кода, оценку сходства кода и завершение кода.

«Я предполагаю, что в следующем десятилетии системы понимания семантики кода, вероятно, станут одной из наиболее важных областей машинного программирования в ближайшее десятилетие», – сказал Жубер. «Это зависит от области применения системы машинного программирования. Для небольших программ, таких как модульные тесты или регрессионные тесты, сегодня стали реальностью полные программные синтезаторы. Тем не менее, что касается более крупных программ, для систем машинного программирования в настоящее время невозможно с вычислительной точки зрения генерировать потенциальные тысячи или миллионы строк кода без помощи программиста ».

Борис Паскалев, соучредитель и генеральный директор DeepCode, называет создание пары строк кода с ИИ «скорее игрушкой, чем прорывом в производительности». Он утверждает, что в то время как такие методы, как обработка естественного языка, хорошо работают с текстом, поскольку существуют фиксированные ограничения на слова и синтаксис, которые необходимо понимать, код не тот.

«Поскольку формальных правил разработки программного обеспечения нет, [programming] – это искусство, которое требует полного понимания кода и намерений разработчика создать что-то, что работает, как ожидалось, без ошибок », – сказал Паскалев VentureBeat. «Поскольку мы дошли до использования машинного обучения и нейронных сетей для кода, мы все еще находимся только в фазе« изобретения колеса »… машинное обучение уже оказалось очень полезным для кода, но только после того, как оно исчезнет. посредством семантического машинного обучения – представления кода: убедитесь, что все семантические факты, переменные, переходы и логические взаимосвязи четко представлены и учтены моделью обучения ».

По мнению Паскалева, недавние исследования показывают, что ИИ еще предстоит пройти путь, прежде чем он сможет надежно генерировать код. В июне группа исследователей из Калифорнийского университета в Беркли, Корнелла, Чикагского университета и Иллинойского университета в Урбане-Шампейне выпустила APPS, эталонный тест для генерации кода из спецификаций естественного языка. Команда протестировала несколько типов моделей в APPS, включая OpenAI GPT-2, GPT-3 и версию GPT-3 с открытым исходным кодом под названием GPT-Neo. В ходе экспериментов они обнаружили, что модели могут научиться генерировать код, решающий более простые проблемы, но не без синтаксических ошибок. Примерно 59% решений вводных задач GPT-3 содержали ошибки, в то время как наиболее эффективная модель – GPT-Neo – достигла точности только 10,15%.

«При генерации кода из цельной ткани, как правило, возникают проблемы как с указанием цели, так и с получением результатов», – сказал VentureBeat генеральный директор Tabine Дрор Вайс. «Намерение пользователя может быть указано на естественном языке путем предоставления примеров, написания кода на языке более высокого уровня или другими способами. Но в большинстве случаев это намерение не дает полной спецификации желаемого поведения. Кроме того, сгенерированный код может следовать иным путем, чем задумал разработчик. Таким образом, разработчику может быть сложно оценить, точно ли код выполняет желаемую операцию ».

Исследователи искусственного интеллекта Facebook Батист Розьер и Мари-Анн Лашо, работавшие над TransCoder, согласны с оценкой Табин. «По своей сути сложно сгенерировать правильный код из неспецифических описаний проблем на естественном языке, которые могли бы соответствовать нескольким различным фрагментам кода. Более простой задачей было бы сгенерировать код из ввода, который более конкретен и ближе к выходному коду, например, псевдокод или код, написанный на другом языке », – сказали они VentureBeat. «Огромным препятствием для принятия … методов, генерирующих большие объемы кода без человеческого контроля, является то, что они должны быть чрезвычайно надежными, чтобы их можно было легко использовать. Даже инструмент, который мог бы генерировать методы с точностью 99%, не смог бы сгенерировать рабочую базу кода из сотен функций. Это могло бы ускорить процесс генерации кода, но все равно потребовало бы тестирования и вмешательства человека ».

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

«Современные алгоритмы машинного обучения могут быть не в состоянии достаточно хорошо обобщать различные задачи, чтобы соответствовать возможностям человека для кодирования интервью без больших наборов данных или гораздо более эффективных неконтролируемых методов предварительного обучения», – сказали Розьер и Лашо.

Потенциальные выгоды

Паскалев считает, что пройдет не менее пяти-десяти лет, прежде чем обработка естественного языка позволит разработчикам создавать «значимые компоненты» или даже целые приложения из простого описания. Но Готчлих настроен более оптимистично. Он отмечает, что инструменты кодирования на основе ИИ важны не только для написания кода, но и для таких менее значимых результатов, как обновление существующего кода. Для переноса существующей кодовой базы на современный или более эффективный язык, например Java или C ++, требуется опыт работы как с исходным, так и с целевым языками, а зачастую это требует больших затрат. Австралийский банк содружества потратил около 750 миллионов долларов в течение пяти лет на преобразование своей платформы с COBOL на Java.

«Глубокое обучение уже позволяет нам решать более мелкие задачи, повторяющиеся и повторяющиеся, которые загромождают рутину разработчиков программного обеспечения. Сегодня ИИ может освободить разработчиков программного обеспечения от утомительных задач, замедляя их работу и уменьшая их творческий потенциал », – сказал Готчлих. «Человеческий разум остается намного лучше, когда дело доходит до создания, инноваций и проектирования самых сложных частей нашего программного обеспечения. Я считаю, что это самый интересный способ использовать возможности машинного обучения сегодня – это дать им возможность повысить скорость выполнения этих захватывающих частей их работы с высокой добавленной стоимостью ».

Жубер и Вайс говорят, что нельзя игнорировать потенциальную ценность машинного программирования для бизнеса. По оценкам, от 19% до 23% проектов по разработке программного обеспечения терпят неудачу, и эта статистика остается неизменной в течение последних двух десятилетий. Standish Group обнаружила, что на «сложные» проекты, то есть те, которые не соответствуют ожиданиям по объему, времени или бюджету, приходится около 52% программных проектов. Часто причиной пропущенных тестов является недостаточное участие пользователей и четкие требования.

«Мы видим множество новых инструментов, использующих ИИ для улучшения устаревшего кода и помощи существующим активам в достижении промышленных стандартов. «Мы можем улучшить унаследованные рабочие процессы управления кодом для разработчиков и внести свой вклад в сокращение огромного уровня технического долга, накопившегося за последние 50 лет в индустрии программного обеспечения», – сказал Жубер. «Те времена, когда разработчикам приходилось писать и читать код построчно, прошли. Я очень рад видеть, как будут преобразованы другие этапы жизненного цикла разработки программного обеспечения и как инструменты достигнут того же уровня, что и Kite или Snyk. Использование ИИ для создания эффективного, одноцелевого, протестированного, безопасного и документированного кода без особых усилий кардинально изменит способ, которым компании-разработчики могут создавать дополнительные ценности и инновации ».

С точки зрения Вайса, инструменты кодирования на основе искусственного интеллекта могут сократить «дорогостоящие» взаимодействия между разработчиками, такие как сеансы вопросов и ответов и повторяющиеся отзывы о проверке кода, сокращая при этом процесс адаптации проекта. «[These] инструменты делают всех разработчиков на предприятии лучше. Они берут коллективный анализ кода организации и делают его доступным во время разработки всем разработчикам. Это позволяет любому разработчику в команде работать выше своего веса », – сказал он.

Для освещения ИИ отправляйте новостные подсказки Кайлу Виггерсу – и обязательно подпишитесь на информационный бюллетень AI Weekly и добавьте в закладки наш канал AI, The Machine.

Спасибо за прочтение,

Кайл Виггерс

Штатный писатель AI

VentureBeat

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

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

  • актуальная информация по интересующей вас тематике
  • наши информационные бюллетени
  • закрытый контент для лидеров мнений и льготный доступ к нашим ценным мероприятиям, таким как Преобразование 2021: Учить больше
  • сетевые функции и многое другое

Стать членом

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button