Автозаполнение, когда приложение предсказывает следующий элемент ввода текста, стало удобным и широко используемым инструментом в современных задачах обмена сообщениями и других письменных задачах. Это также одна из наиболее важных функций интегрированной среды разработки (IDE) для компьютерного программирования. Недавние исследования показали, что автозаполнение может быть обеспечено за счет глубокого обучения, что позволяет программным языковым моделям достигать значительного повышения точности за счет обучения на реальных наборах данных, собранных в результате действий программистов в среде IDE. Однако распространенная проблема с менее популярными языками программирования заключается в том, что доступных наборов данных IDE может быть недостаточно для обучения.

В статье Улучшение автозаполнения кода с помощью трансферного обучения исследовательская группа из Facebook показывает, как возможности трансферного обучения могут сделать возможным предварительное обучение на примерах кодовых последовательностей без IDE, без автозаполнения и на разных языках до того, как начнется штраф. -настройка на задачу прогнозирования автозаполнения. Предлагаемый подход повышает точность модели более чем на 50 процентов на очень маленьких наборах данных точной настройки и более чем на 10 процентов на 50 000 помеченных примерах.

В сообществах программного обеспечения в репозитории GitHub доступен огромный корпус коммитов с открытым исходным кодом на всех основных языках программирования. И нет никаких сомнений в том, что этот код фиксируется и действия разработчиков в среде IDE связаны интуитивно понятной взаимосвязью. Поэтому было бы полезно, если бы можно было использовать знания из этих коммитов при моделировании поведения при создании кода. Поскольку существуют, несомненно, общие концепции и конструкции, которые повторяются во всех языках программирования, исследователи предлагают переносить знания с более популярных языков программирования на другие, где размеченных данных недостаточно.

Наборы данных исследования были получены в результате реальной деятельности разработчиков в Facebook и сосредоточены на популярном языке программирования Python и менее популярном языке Hack. Команда сначала обучила множество одноязычных моделей на Hack или Python, а также несколько многоязычных моделей на обоих языках. Чтобы эффективно распознавать и прогнозировать редкие и новые токены из открытого словаря, они применили два подхода к токенизации: кодирование пар байтов (BPE) и механизм кодирования биграмм + копирование. Чтобы протестировать эффекты трансферного обучения, они использовали две современные модели производительности прогнозирования кода - GPT-2 и PLBART - и оценили производительность как онлайн-, так и автономных моделей.

Команда разработала свои обширные эксперименты, чтобы ответить на три вопроса:

  • Как модели автозаполнения выигрывают от сочетания неконтролируемого предварительного обучения с точной настройкой под конкретную задачу? Как их результаты улучшаются при офлайн- и онлайн-оценке?
  • Каков эффект предварительного обучения для большого набора данных исходного кода, полученного в результате внешней разработки кода? Можно ли настроить предварительно обученные языковые модели программного обеспечения при автозаполнении IDE для достижения большей точности с меньшим количеством реальных примеров?
  • Учитывая случай, когда большой корпус обучения доступен на одном языке, но не доступен на другом, может ли предварительное обучение многоязычной модели на языке с большим количеством обучающих данных принести пользу языку с меньшим объемом данных?

Команда суммировала свой вклад и экспериментальные результаты следующим образом:

  1. Предварительно обучите две модели языка программного обеспечения преобразователя GPT-2 и BART на файлах исходного кода, полученных в результате фиксации контроля версий, и покажите, как их производительность при прогнозировании автозаполнения улучшается за счет точной настройки на 2,18 процента реальных последовательностей кода IDE.
  2. Модель GPT-2 обучается на двух реальных наборах данных: кодовых последовательностях, зарегистрированных во время разработки IDE, и выборе автозаполнения. Третий вариант предварительно обучен на первом корпусе и настроен на втором корпусе, чтобы продемонстрировать, как сочетание предварительного обучения и точной настройки конкретной задачи приводит к более совершенной модели, превосходящей базовую модель на 3,29 процента.
  3. Покажите, что предварительное обучение на другом языке программирования повышает точность на 13,1% при сравнении модели, предварительно обученной на примерах взлома и тонко настроенной на 10 000 примеров Python, с обучением только на примерах Python.
  4. Докажите, что улучшения по этим трем параметрам переноса обучения - задаче, предметной области и языку - приводят к увеличению использования инструмента автозаполнения на 3,86 процента, 6,63 процента, 4,64 процента соответственно, путем сравнения этих моделей с помощью онлайн-тестов A / B.

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

Статья Улучшение автозавершения кода с помощью трансферного обучения находится на arXiv.

Автор: Геката Хе | Редактор: Майкл Саразен, Чейн Чжан

Мы знаем, что вы не хотите пропустить какие-либо новости или научные открытия. Подпишитесь на нашу популярную рассылку Synced Global AI Weekly, чтобы получать еженедельные обновления AI.