DeepMind заявляет, что ее нейросеть пишет программы не хуже среднего программиста / Хабр
DeepMind создала систему искусственного интеллекта под названием AlphaCode, которая, по ее словам, «пишет компьютерные программы на конкурентоспособном уровне». Систему проверили на соответствие задачам кодирования, используемым в соревнованиях среди людей, и обнаружила, что программа оказалась среди 54% лучших.
По мнению DeepMind, это значительный шаг вперед для автономного кодирования, хотя навыки AlphaCode не обязательно репрезентативны для задач программирования, с которыми сталкивается средний кодер.
Ориол Виньялс, главный научный сотрудник DeepMind, отмечает, что исследование все еще находится на ранней стадии, но его результаты приблизили компанию к созданию гибкого ИИ для решения сложных задач кодирования. «Мы воодушевлены потенциалом AlphaCode для помощи программистам и не-программистам в написании кода, повышении производительности или создании новых способов создания программного обеспечения», — сказал Виньялс.
В одном примере задачи, где тестировалась AlphaCode, участников просили найти способ преобразовать одну строку случайных повторяющихся букв s и t, используя ограниченный набор входных данных:
«Вам заданы две строки s и t, каждая из которых состоит из строчных букв латинского алфавита. Вы собираетесь посимвольно напечатать строку s, начиная с первого символа и заканчивая последним.
Когда вы собираетесь напечатать какой-то символ, вместо того, чтобы нажать на кнопку, печатающую этот символ, вы можете нажать кнопку «Backspace». Нажатие на эту кнопку удаляет последний напечатанный символ, который еще не был удален (или ничего не делает, если все напечатанные символы уже удалены или вы еще не напечатали ни одного символа). Например, если строка s — «abcbd», и вы нажимаете на кнопку Backspace вместо печати первого и четвертого символа, в результате получится строка «bd» (первое нажатие Backspace не удалит ни одного символа, а второе нажатие этой кнопки удалит символ «c»). Другой пример: если s равна «abcaa», и вы нажимаете Backspace вместо двух последних букв, получается «a».
Вы должны определить, можно ли получить строку t, если вы попробуете набрать строку s, нажимая Backspace вместо нажатия кнопок, соответствующих некоторым (возможно, ни одному) буквам строки s».
AlphaCode сгенерировал большее количество возможных ответов и отсеял их, запустив код и проверив вывод, как это сделал бы человек-конкурент.
Систему протестировали на 10 задачах, которые решали 5000 пользователей на сайте Codeforces. В среднем она входит в число 54,3% лучших по ответам.
DeepMind отмечает, что текущий набор навыков AlphaCode в настоящее время применим только в области соревновательного программирования, но ее возможности открывают дверь для создания будущих инструментов, которые сделают программирование более доступным.
Многие другие компании работают над аналогичными приложениями. Например, в августе 2021 года OpenAI выпустила Codex — новую систему, которая автоматически преобразует в код простые английские фразы. Codex основан на GPT-3.
Однако пока системы далеки от того, чтобы просто взять на себя работу программистов-людей. Код, который они производят, часто содержит ошибки, а, поскольку алгоритмы обычно обучаются на библиотеках общедоступного кода, они иногда воспроизводят материалы, защищенные авторским правом.
Так, в июне 2021 года Microsoft и GitHub представили помощника программиста Copilot на базе нейросети Codex от Open AI. Система обучена работать с различными фреймворками и языками программирования. В августе вышла усовершенствованная версия Codex, которая переводит английские фразы в программный код.
Разработчики заметили, что нейросетевой помощник генерирует строчки из проектов с открытым исходным кодом, не подчиняясь первоначальной лицензии. Они также стали жаловаться, что Copilot вместо нескольких строк нужного кода генерирует десятки строк с цитатами и комментариями из проектов с открытым исходным кодом. GitHub уточнила, что Copilot обычно не воспроизводит точные фрагменты кода, а создает производные работы из ранее полученных входных данных. Компания утверждает, что это происходит лишь в 0,1 % случаев.
Затем GitHub признал, что при обучении Copilot разработчики использовали весь доступный в репозиториях сервиса публичный код без учета типа лицензии.
Также выяснилось, что производимый Copilot код примерно в 40% содержит ошибки и уязвимости.
Создан помощник программистов, который будет писать за них код. Видео
ПО Софт
|
Поделиться
Microsoft запустила сервис Copilot, представляющий собой виртуального помощника программиста на базе искусственного интеллекта. Он изучает код и комментарии к нему и предлагает разработчику функции и целые строки для добавления в этот код. Такой подход ускоряет процесс написания программ и отказаться от поиска решений в интернете. К тому же в процессе работы Codex обучается и с каждым разом становится все умнее. Инструмент полностью бесплатный.
Виртуальный коллега-программист
Copilot развернут на базе GitHub, одного из крупнейших в мире Git-репозиториев. С 2018 г. он принадлежит Microsoft. Open AI тоже имеет определенные связи с корпорацией. Как сообщал CNews, в 2019 г. она вложила в этот стартап $1 млрд.
Виртуальный помощник программиста обучен взаимодействовать с различными фреймворками (средами разработки). Он понимает несколько языков программирования, но на момент публикации материала Copilot был заточен в первую очередь под JavaScript, Go, Python, Ruby и TypeScript.
Copilot постоянно обучается и со временем начинает давать все более дельные советы
Со слов главы GitHub Нэта Фридмана (Nat Friedman), Copilot – это именно помощник программиста, а не его заменитель. Это находит свое отражение и в названии проекта.
Copilot, утверждает Фридман, даст разработчикам возможность писать более качественный код. Он даже может позволить ускорить этот процесс за счет быстрого поиска решения возникших в ходе написания кода проблем. Другими словами, Copilot может заменить программистам поиск решений в интернете.
Как работает Copilot
В основе системы Copilot лежит система искусственного интеллекта Codex за авторством специалистов OpenAI. Для ее обучения были задействованы ресурсы самого GitHub, то есть миллионы строк кода в файлах, хранящихся в открытых репозиториях.
В теории, Copilot можно сравнить с коллегой-программистом, который постоянно смотрит в чужой монитор и дает советы. Система изучает код, над которым в данный момент идет работа, и заодно комментарии в нем.
Первый взгляд на Copilot
На основе этих данных Copilot начинает предлагать добавить в код одну или несколько строк или функций в зависимости от выполняемой работы. Разработчик сам решает, последовать совету искусственного интеллекта или отклонить его.
Решения программиста тоже влияют на обучение Copilot. Чем больше он взаимодействует с системой, тем быстрее она обучается программированию на различных языках, и тем более полезными становятся ее советы. Как следствие, процесс программирования при наличии постоянно набирающегося знаний помощника, пусть и виртуального, постепенно ускоряется.
На момент публикации материала Copilot был доступен в виде дополнения (плагина) к бесплатному редактору Microsoft Visual Studio Code. Также он работает и через любой современный в браузер в GitHub Codespaces. Оценить возможности Copilot сможет любой разработчик, без каких-либо ограничений.
Классическое программирование уходит в прошлое
Крупные компании делают все возможное, чтобы процесс программирования стал проще, быстрее и понятнее. Их действия также направлены на снижение порога входа в эту сферу, чтобы начать писать код мог почти каждый.
10 простых шагов: как уберизировать поездки сотрудников и сэкономить 30% бюджета на корпоративный автопарк
ПО
Немалую роль в этом играет и сама Microsoft. За месяц до запуска Copilot она создала инструмент для написания ПО без развитых навыков программирования. Проект получил название Microsoft Power Apps, и он пригодится тем, кто пишет на языке Power Fx.
С его помощью пользователи смогут разрабатывать программы в формате диалога с компьютером. Например, при разработке приложения в сфере электронной коммерции можно будет описать в диалоге желаемую цель на естественном английском языке: «find products where the name starts with ‘kids» («найти продукты, название которых начинается со слова «детский»» — англ).
Скоро писать программный код смогут абсолютно все
После этого Power Apps задействует алгоритмы искусственного интеллекта и предложит варианты преобразования этого запроса в формулу Microsoft Power Fx. Пользователю же останется только выбрать наиболее подходящий вариант, например «Filter(‘BC Orders’ Left(‘Product Name’, 4)=»Kids»)».
В октябре 2020 г. Microsoft выложила в открытый доступ приложение Lobe для создания готовых моделей машинного обучения. Lobe дает возможность создавать такие модели даже тем, кто не умеет программировать — от пользователей нужно лишь загрузить в нее данные, а всю работу программа выполнит сама.
CNews Analytics: Рейтинг операторов фискальных данных 2023
ритейл
Lobe полностью бесплатна. Результат ее работы затем можно использовать в сторонних ПО и устройствах.
Но дальше всех пошла компания Amazon. Пока Microsoft развивает помощников программиста, Amazon продвигает сервис, полностью заменяющий разработчика.
В июне 2020 г. CNews писал, что Amazon запустила сервис Honeycode для создания приложений без необходимости написания программного кода. Проект полностью бесплатный, и использовать его могут как обычные потребители, так и крупные компании. К примеру, Slack, разработчик одноименного мессенджера, уже заявила о готовности к использованию Honeycode в своей работе.
- Лучший российский софт для видеосвязи: ищем замену Teams и Zoom
Эльяс Касми
К искусственному интеллекту, который учится писать код | MIT News
Обучение кодированию включает в себя понимание того, как структурировать программу и как правильно заполнить каждую мельчайшую деталь. Неудивительно, что это может так расстраивать.
Новый ИИ для написания программ, SketchAdapt, предлагает выход. Обученный на десятках тысяч примеров программ, SketchAdapt учится составлять короткие высокоуровневые программы, позволяя второму набору алгоритмов находить нужные подпрограммы для заполнения деталей. В отличие от аналогичных подходов к автоматизированному написанию программ, SketchAdapt знает, когда следует переключиться со статистического сопоставления с образцом на менее эффективный, но более универсальный режим символического мышления, чтобы заполнить пробелы.
«Нейронные сети довольно хорошо передают структуру, но не детали, — говорит Армандо Солар-Лезама, профессор Лаборатории компьютерных наук и искусственного интеллекта (CSAIL) Массачусетского технологического института. «Разделяя работу — позволяя нейронным сетям обрабатывать высокоуровневую структуру и используя стратегию поиска для заполнения пробелов, — мы можем писать эффективные программы, которые дают правильный ответ».
SketchAdapt — результат сотрудничества Solar-Lezama и Джоша Тененбаума, профессора CSAIL и Центра изучения мозга, разума и машин Массачусетского технологического института. Работа будет представлена на Международной конференции по машинному обучению 10-15 июня.
Синтез программ, или обучение компьютеров программированию, уже давно является целью исследователей ИИ. Компьютер, который может сам себя программировать, с большей вероятностью быстрее выучит язык, будет бегло общаться и даже смоделирует человеческое мышление. Все это привлекло Солар-Лезама к работе в качестве аспиранта, где он заложил основу для SketchAdapt.
Ранняя работа Solar-Lezama, Sketch, основана на идее, что низкоуровневые детали программы могут быть найдены механически, если имеется высокоуровневая структура. Помимо других приложений, Sketch вдохновил дочерние компании на автоматическую оценку домашних заданий по программированию и преобразование нарисованных от руки диаграмм в код. Позже, когда популярность нейронных сетей росла, студенты из лаборатории вычислительной когнитивной науки Тененбаума предложили сотрудничество, из которого сформировался SketchAdapt.
Вместо того, чтобы полагаться на экспертов для определения структуры программы, SketchAdapt вычисляет ее с помощью глубокого обучения. Исследователи также добавили особенность: когда нейронные сети не уверены, какой код и где разместить, SketchAdapt запрограммирован на то, чтобы оставить пустое место для заполнения поисковыми алгоритмами.
«Система сама решает, что ей известно, а что нет», — говорит ведущий автор исследования Максвелл Най, аспирант кафедры мозга и когнитивных наук Массачусетского технологического института. «Когда он застревает и у него нет знакомых шаблонов для рисования, он оставляет заполнители в коде. Затем он использует стратегию «угадай и проверь», чтобы заполнить пробелы».
Исследователи сравнили производительность SketchAdapt с программами, созданными по образцу проприетарного программного обеспечения Microsoft RobustFill и DeepCoder, преемников функции Excel FlashFill, которая анализирует соседние ячейки, чтобы предлагать предложения по мере ввода — научились преобразовывать столбец имен в столбец соответствующих адресов электронной почты, например. RobustFill использует глубокое обучение для написания высокоуровневых программ на основе примеров, в то время как DeepCoder специализируется на поиске и заполнении низкоуровневых деталей.
Исследователи обнаружили, что SketchAdapt превзошел свои переработанные версии RobustFill и DeepCoder при выполнении соответствующих специализированных задач. SketchAdapt превзошел программу, подобную RobustFill, при преобразовании строк; например, написание программы для сокращения номеров социального страхования до трех цифр, а имен — до их первой буквы. SketchAdapt также добился большего успеха, чем программа, подобная DeepCoder, при написании программ для преобразования списка чисел. Обученный только на примерах программ обработки трехстрочных списков, SketchAdapt смог лучше перенести свои знания в новый сценарий и написать правильные четырехстрочные программы.
В еще одном задании SketchAdapt превзошел обе программы в преобразовании математических задач с английского языка в код и вычислении ответа.
Ключом к его успеху является способность переключаться с сопоставления нейронных паттернов на символический поиск на основе правил, говорит Ришаб Сингх, бывший аспирант Solar-Lezama, а ныне научный сотрудник Google Brain. «SketchAdapt узнает, сколько требуется распознавания образов для написания знакомых частей программы и сколько символических рассуждений требуется для заполнения деталей, которые могут включать новые или сложные концепции».
SketchAdapt может писать очень короткие программы. Что-то большее требует слишком много вычислений. Тем не менее, по словам исследователей, он предназначен скорее для дополнения программистов, чем для их замены. «Наша цель — предоставить инструменты программирования тем, кто в них нуждается», — говорит Най. «Они могут сказать компьютеру, что они хотят сделать, и компьютер может написать программу».
В конце концов, программирование всегда развивалось. Когда Fortran был представлен в 1950-х годах, он должен был заменить людей-программистов. «Ее полное название было Fortran Automatic Coding System, и ее целью было писать программы так же, как и люди, но без ошибок», — говорит Солар-Лезама. «На самом деле он автоматизировал многое из того, что программисты делали до Fortran. Это изменило природу программирования».
Другой соавтор исследования — Люк Хьюитт. Финансирование было предоставлено Управлением научных исследований ВВС США, MIT-IBM Watson AI Lab и Национальным научным фондом США.
ИИ может писать код, как люди — ошибки и все такое
Некоторые разработчики программного обеспечения теперь позволяют искусственному интеллекту помогать писать свой код. Они обнаруживают, что ИИ так же несовершенен, как и люди.
В июне прошлого года GitHub, дочерняя компания Microsoft, которая предоставляет инструменты для размещения и совместной работы над кодом, выпустила бета-версию программы, которая использует ИИ для помощи программистам. Начните вводить команду, запрос к базе данных или запрос к API, и программа под названием Copilot догадается о вашем намерении и напишет все остальное.
Алекс Нака, специалист по обработке данных биотехнологической фирмы, подписавшийся на тестирование Copilot, говорит, что программа может быть очень полезной и изменила его методы работы. «Это позволяет мне тратить меньше времени на поиск в браузере документов или примеров API на Stack Overflow», — говорит он. «Мне кажется, что моя работа превратилась из генератора кода в его дискриминатора».
Но Нака обнаружил, что ошибки могут проникать в его код по-разному. «Были случаи, когда я упускал какую-то тонкую ошибку, когда принимал одно из его предложений», — говорит он. «И это может быть очень сложно отследить, возможно, потому, что кажется, что он делает ошибки, которые имеют другой вкус, чем те, которые сделал бы я».
Риск того, что ИИ сгенерирует ошибочный код, может быть на удивление высоким. Исследователи из Нью-Йоркского университета недавно проанализировали код, сгенерированный Copilot, и обнаружили, что для определенных задач, где безопасность имеет решающее значение, код содержит недостатки безопасности примерно в 40% случаев.
Цифра «немного выше, чем я ожидал», — говорит Брендан Долан-Гавитт, профессор Нью-Йоркского университета, участвовавший в анализе. «Но способ обучения второго пилота на самом деле заключался не в том, чтобы писать хороший код, а просто в том, чтобы создавать такой текст, который будет следовать заданной подсказке».
Несмотря на такие недостатки, Copilot и аналогичные инструменты на базе ИИ могут возвестить кардинальные изменения в том, как разработчики программного обеспечения пишут код. Растет интерес к использованию ИИ для автоматизации более рутинной работы. Но Copilot также выявляет некоторые подводные камни современных методов искусственного интеллекта.
«Похоже, он делает ошибки, которые имеют другой вкус, чем те, которые сделал бы я».
Алекс Нака, специалист по данным
При анализе кода, доступного для плагина Copilot, Долан-Гавитт обнаружил, что он содержит список запрещенных фраз. Очевидно, они были введены для того, чтобы система не выпалила оскорбительные сообщения или не скопировала известный код, написанный кем-то другим.
Оге де Моор, вице-президент по исследованиям в GitHub и один из разработчиков Copilot, говорит, что безопасность была проблемой с самого начала. Он говорит, что процент ошибочного кода, указанный исследователями Нью-Йоркского университета, актуален только для подмножества кода, в котором более вероятны недостатки безопасности.
Де Мур изобрел CodeQL, инструмент, используемый исследователями Нью-Йоркского университета, который автоматически выявляет ошибки в коде.