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

Эти два фактора делают еще более важным повышение производительности труда, и самые последние улучшения в моделях обработки естественного языка (natural language processing или NLP) на основе искусственного интеллекта (ИИ) делают это реальностью. Благодаря своему размеру, базовой архитектуре, обучающим данным и режиму новейшее поколение современных моделей NLP, называемых генеративными предварительно обученными преобразователями (generative pre-trained transformer или GPT), может переводиться между многими языками, в том числе из текста в код. Внедрение этой мощной возможности в инструменты, которые могут использовать разработчики, уже доказало свою неоценимую ценность, поскольку позволяет разработчикам лучше справляться со своей работой и открывает доступ к созданию программного обеспечения для менее технических специалистов.
Наряду со взрывным ростом программного обеспечения для всевозможных вариантов использования и бизнес-приложений за последнее десятилетие появился эквивалент количества рабочих мест, требующих опыта программирования для создания этого программного обеспечения. И нехватка талантов препятствует попыткам многих компаний создать эффективное программное обеспечение.
Как только в компании создается команда разработчиков, проблемы не прекращаются. Требования к созданию программного обеспечения, особенно с точки зрения качества, безопасности и скорости доставки, становятся все более сложными. Удивительно, но разработчики тратят всего около 30-40% своего времени на разработку новых функций или улучшение существующего кода. Это связано с тем, что большая часть их работы также включает в себя написание тестов, внесение исправлений и решение проблем безопасности. Старшие разработчики также будут проводить часть своего времени, обучая младших в своей команде и проводя проверки кода. Все эти элементы вместе взятые могут повлиять на скорость доставки и экономическую эффективность программного проекта. Это также предоставляет прекрасную возможность объединить ИИ с человеческими разработчиками, чтобы помочь устранить многие из этих недостатков.
Благодаря успехам, достигнутым в области NLP на основе глубокого обучения за последние пару лет, появился ряд инструментов, в основе которых лежит ИИ, предназначенных для повышения производительности и качества кода разработчиков. В частности, модели, которые используют эти инструменты, могут анализировать код для выявления ошибок и недостатков, эффективно выполняя некоторые из наиболее утомительных частей проверки кода. Несколько таких инструментов, выпущенных недавно, таких как CodeGuru и DeepCode, смогли найти уязвимости, которые было трудно идентифицировать людям, а также обнаружили, что 50% изученных запросов на вытягивание имели проблемы.

Кроме того, современные методы NLP улучшают качество кода разработчиков и ускоряют разработку, помогая автоматически заполнять разделы кода, отслеживать вывод кода на наличие ошибок и даже автоматически генерировать модульные тесты. Алгоритм OpenAI Codex, который был включен в Copilot GitHub, может делать это с поразительной точностью, вплоть до генерации кода на основе входных данных на человеческом языке (на изображении выше). Его способность делать это исходит из данных, на которых он был обучен, как на фрагментах естественного языка, так и на огромном количестве кода. Предварительное исследование его производительности, проведенное GitHub, показало, что для такой обыденной задачи, как написание HTTP-сервера, использование ИИ вместе с разработчиком сокращает время выполнения вдвое. Тот факт, что модель, лежащая в основе этого инструмента, может автоматически заполнять целые разделы кода из одного комментария, также делает программирование намного более доступным для начинающих и менее технических людей.
Мощные возможности перевода ИИ этого нового поколения моделей NLP означают, что с некоторыми ограничениями любой может использовать человеческий язык для создания необходимых фрагментов кода. Эти части программного обеспечения также могут быть на любом языке программирования, от тех, которые используются для выполнения определенных подпрограмм, таких как Python, javascript и C++, до тех, которые используются для доступа к данным в различных базах данных, таких как SQL и NoSQL. При условии, что программа, которую человек хотел бы закодировать, не слишком сложна, такие инструменты, как Codex, вероятно, могут помочь. Он оказался полезным для создания небольших веб-сайтов, получения функций Excel и преобразования того, что хотел бы пользователь, из человеческого языка в язык запросов, используемый для доступа к данным. Однако, как отмечают исследователи этих методик, модели не всегда полностью корректны. Часто создаваемый код в основном правильный, но требует некоторого вмешательства со стороны опытного разработчика. В этом смысле модели могут повысить продуктивность преподавателя-человека по программированию, поскольку они могут взять на себя ответственность за то, что ИИ сталкивается с проблемами, поскольку его использует менее опытный человек. Это также может означать, что производительность неопытных разработчиков значительно повышается, а их потребность в контроле и участии старших снижается.
Так как же работает большинство этих инструментов? Основной рабочей лошадкой этих инновационных инструментов является GPT – обычно это третье поколение таких моделей, называемое GPT-3. Эта архитектура была первоначально разработана OpenAI и обучена на огромном количестве текста из Интернета, включая прозу, цифровые книги, твиты, репозитории с открытым исходным кодом, комментарии, онлайн-статьи и многое другое.
Несколько факторов отделяют поколения GPT от предыдущих моделей NLP, основанных на глубоком обучении. К ним относятся объем данных, используемых для обучения, и способ обучения моделей, а также количество параметров, которые имеют модели, и их современная базовая архитектура. Поскольку эти модели и их предшественники представляют собой нейронные сети, количество параметров влияет на сложность отношений в данных, которые они могут собирать, а это означает, что более крупные модели могут изучать больше нюансов, чем более мелкие модели. Эти модели также обучались многозадачности и самоконтролю. Большинство нейронных сетей предназначены для выполнения одной задачи и поэтому берут специально помеченные данные, чтобы научиться выполнять эту задачу – отличным примером является AlphaGo, которая хороша в ГО, но не может играть в шахматы. Требование помеченных данных называется обучением с учителем. GPT-3, напротив, был обучен предсказывать следующее слово в последовательности, поэтому данные не нуждаются в маркировке, это основа многих задач, таких как перевод, генерация текста и ответы на вопросы.

Кроме того, существуют модели преобразователей, которые работают лучше, чем предыдущие тесты NLP, такие как модели долговременной кратковременной памяти или рекуррентные нейронные сети. Они обрабатывают целые предложения сразу, а не слово за словом, сохраняют и используют оценки сходства между словами в механизме, называемом «внимание», и кодируют информацию, связанную с определенной позицией токена в предложении (на изображении выше). Все это позволяет создать более крупную модель, которая может больше узнать, поскольку распараллеливание и рекурсия больше не являются такими проблемами, как в прошлом. Это также устраняет трудности, с которыми сталкивались предыдущие модели, связанные с забыванием отношений между далекими друг от друга словами и предложениями. Поскольку GPT-3 доступен через интерфейс прикладного программирования, предоставляемый OpenAI, его можно включить в другие продукты ИИ для программирования, что еще больше демократизирует доступ к программированию.
Чтобы продолжать создавать огромное количество программного обеспечения, необходимого для охвата всех приложений, для которых оно требуется, искусственный интеллект помогает повысить производительность разработчиков. Поскольку спрос на программистов явно превышает предложение, использование других решений для повышения производительности и качества кода уже имеющихся у компаний оказывается все более и более выгодным. С недавними значительными улучшениями в моделях NLP на основе ИИ, таких как особенно мощный GPT-3, мечта о парном программисте на основе ИИ для разработчиков становится реальностью. С такими моделями, встроенными в их повседневные инструменты, программисты могут значительно выиграть с точки зрения сокращения времени, затрачиваемого на повторяющиеся задачи, такие как написание тестов, и улучшения качества кода за счет автоматических проверок и автоматически генерируемых фрагментов кода. Даже младшие разработчики и менее технические специалисты могут извлечь выгоду из доступных сейчас возможностей преобразования текста в код. Программное обеспечение, возможно, не в состоянии съесть мир в одиночку, но ИИ, безусловно, может помочь.
© digitrode.ru