Как Facebook создал транскомпилятор с использованием глубокого обучения

Facebook AI Research (FAIR) недавно опубликовал свою статью Неконтролируемый перевод языков программирования, в которой рассматривается транскомпиляция, то есть перевод между исходными кодами на разных языках.

Транскомпилятор, транспилятор или компилятор исходного кода - это переводчик, который выполняет преобразование между языками программирования, которые работают на аналогичном уровне абстракции.

- из бумаги

В этой статье мы обсудим работу модели TransCoder и посмотрим, как она работает. Но сначала давайте быстро рассмотрим традиционные подходы к транскомпиляции, улучшение которых является мотивацией для применения глубокого обучения.

  1. Первоначальной целью транскомпиляторов было достижение переносимости кода, то есть кроссплатформенной поддержки. Это было сделано путем преобразования кода с языка более высокого уровня на язык относительно более низкого уровня (машинный код или язык ассемблера).
  2. Современные транскомпиляторы приходят вместе с новыми языками (TypeScript, Dart и т. Д.) И конвертируют эти языки в соответствующие вездесущие языки.

Этот вид транскомпиляции выполняется путем создания синтаксических деревьев из источника и использования рукописных подходов на основе правил для преобразования. Их создание требует много времени и глубоких знаний как исходного, так и целевого языков. Более того, перевод с языка с динамической типизацией (например, Python) на язык со статической типизацией (например, Java) требует определения типов переменных, которые являются сложными (и не всегда возможными) сами по себе.

Примечание. Логика, лежащая в основе упомянутой ниже архитектуры, предполагает, что задача перевода кода очень похожа на задачу перевода на обычный язык.

Модель TransCoder

Архитектура TransCoder - это, по сути, модель от последовательности к последовательности с трансформационным вниманием.

Однако то, что делает его особенным, - это то, как его обучают.

Идея обучения довольно проста:

Модель предполагает, что существует общий скрытый вектор пространство, разделяемый языками. Таким образом, модель обучается таким образом, что входные данные отображаются в это скрытое пространство, где семантически похожий контент ближе.

Модель обучается кодировать источник в скрытое пространство, а затем генерировать цель из этого скрытого вектора. Для этого TransCoder реализует 3 принципа Неконтролируемого машинного перевода для предварительного обучения, что делает его намного более эффективным:

1. Инициализация

Первый принцип инициализирует модель с помощью кросс-языковой языковой модели (XLM), то есть кодировщика. Здесь мы случайным образом маскируем определенный процент токенов из кода и пытаемся их предсказать. В результате фрагменты кода, которые выражают одни и те же инструкции, отображаются в одно и то же представление независимо от языка программирования.

2. Автоматическое кодирование шумоподавления (DAE)

Как упоминалось ранее, мы используем архитектуру кодировщика-декодера с преобразователями. Кодер можно инициализировать напрямую, так как он имеет архитектуру XLM. Проблема заключается в декодере преобразователя, который не знает, как использовать скрытые представления источника для генерации целевого кода.

Следовательно, мы совместно обучаем кодировщик и декодер с шумными входами (маски в случайных положениях, отсутствующие токены, замененные токены и т. Д.) Для генерации полной шумоподавленной последовательности. Делая это, мы достигаем 2-х вещей:

  1. Декодер обучен работать даже с шумными выходами кодировщика.
  2. Кодировщик обучен, чтобы стать устойчивым для кодирования даже зашумленного ввода.

3. Обратный перевод

Для создания переводов достаточно только предварительной подготовки XLM и автоматического кодирования шумов. Однако качество этих переводов, как правило, низкое, поскольку модель никогда не обучается делать то, что от нее ожидается во время тестирования, то есть переводить код с одного языка на другой.

Обратный перевод был первоначально введен для повышения производительности машинного перевода с учителем. Однако в конечном итоге это стало важным аспектом неконтролируемого машинного перевода.

Во-первых, мы соединяем исходный перевод с целевым (источник - это основная истина) с переводом от цели к исходному (цель - это исходная истина). Очевидно, что в такой настройке сгенерированные цель и источник соответственно зашумлены. Затем модель от источника к целевой модели обучается со слабым контролем для восстановления целевых последовательностей из зашумленных исходных последовательностей, сгенерированных целевой моделью, в исходную модель, и наоборот. Эти две модели обучаются параллельно.

Межъязыковая языковая модель (XLM)

В XLM paper предлагается метод предобучения кросс-языковой языковой модели. В документе обсуждаются:

  1. Общий словарь вложенных слов. Обработка всех языков с использованием одного и того же общего словаря, созданного с помощью парного кодирования байтов (BPE).
  2. Моделирование причинно-следственных связей (CLM): прогнозирование вероятности того, что слово будет иметь все предыдущие слова.
  3. Моделирование языка с масками (MLM): случайная выборка 15% токенов в качестве маски в 80% случаев и с помощью случайного токена в 20% случаев и, таким образом, их прогнозирование.

В свете недостатка этих методов, заключающегося в том, что их нельзя использовать для обучения на параллельных корпусах (на разных языках), авторы вводят метод под названием Моделирование языка перевода (TLM), который является расширением MLM. Вместо того, чтобы рассматривать потоки одноязычного текста, параллельные предложения объединяются и маскируются случайным образом и обрабатываются вместе.

Если вы заинтересованы в более глубоком изучении модели XLM, подумайте о прочтении моей статьи о XLM.

Полученные результаты

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

Пример правильного перевода:

Пример неправильного перевода:

Подробные результаты и анализ можно найти здесь.

Заключительное примечание. На практике «кросс-язычность» модели сильно зависит от общих токенов (точек привязки) для разных языков. В результате модель XLM, обученная на английском и французском языках, обеспечит лучшее межъязыковое представление, чем модель, обученная на английском и китайском языках, из-за другого алфавита, который уменьшает количество точек привязки.

- от авторов

Заключение

Мы обсудили необходимость транскомпиляции; затем общая архитектура и шаблон предварительного обучения TransCoder.

Если вам интересно узнать точную конфигурацию модели, обратитесь к статье.

использованная литература