Нейронный машинный перевод (NMT) - активная область исследований. Для NMT мы используем модель seq2seq, которая состоит из кодировщика и декодера - кодировщик преобразует токены исходного языка в скрытые представления, а декодер преобразует эти представления обратно в целевой язык. Архитектуры на основе трансформаторов сейчас наиболее популярны для NMT - и кодер, и декодер состоят из составных блоков Transformer.

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

Возможные решения вышеуказанных проблем: (a) Обучите одну модель для нескольких пар языков (b) повторно используйте предварительно обученную модель кодировщика-декодера чтобы избежать обучения с нуля. Хотя можно обучить единую модель на объединенном словарном запасе всех языков, языки с ограниченными ресурсами страдают из-за смещения выборки и фиксированной емкости. Кроме того, нам нужно переобучить модель, чтобы добавлять каждый новый язык, т. Е. Обучение не является постепенным.

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

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

Адаптеры

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

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

Для получения более подробной информации об адаптерах, пожалуйста, обратитесь к статье AdapterHub.

В этой статье мы обсудим наши усилия по эффективному обучению моделей перевода с индийского на английский (например, хинди - ›английский) с помощью адаптеров. Большинство существующих исследований добавляют адаптеры ко всем слои модели seq2seq. В этой статье мы исследуем

  • Все ли адаптеры одинаково важны, т. Е. Одинаково влияют на производительность?
  • Можем ли мы получить эквивалентную производительность, используя только часть адаптеров?

Потребность в предварительно обученных моделях

Обучение с нуля - не лучшая стратегия, потому что модели на основе архитектуры Transformer, как правило, очень большие, и нам нужен очень большой объем данных, чтобы получить модель, которая может хорошо обобщаться. Но у нас нет большого количества параллельных данных по многим парам индийских языков.

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

Выбор предварительно обученной модели

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

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

Среди предварительно обученных моделей для индийских языков у нас были различные возможные варианты, такие как IndicBERT (модель типа AlBERT), Muril, mBART и многие другие.

IndicBERT: это модель только для кодировщика, которая была предварительно обучена на нескольких индийских языках одновременно с использованием цели BERT. Предварительно обученный КПП для данной модели можно найти здесь. Поскольку наша задача включает в себя генерацию текста, нам нужна архитектура, подобная кодеру-декодеру, чтобы иметь возможность генерировать последовательности разной длины. Один из способов продолжить - просто наложить какой-нибудь предварительно обученный декодер на модель IndicBERT и точно настроить эту пару для нашей задачи. Мы не использовали этот подход. Вы можете сослаться на другие статьи (например, this), если хотите изучить этот подход.

mBART: это модель кодировщика-декодера, которая предварительно обучена для устранения шума на нескольких языках одновременно: модель собирает много информации о нескольких языках и хорошо справляется с задачами, связанными с генерацией текста. Мы внедрили адаптеры в эту модель в разных местах и ​​решили настроить только адаптеры, чтобы адаптировать модель (инициированную с этой контрольной точки) для перевода определенной языковой пары; таким образом сохраняя информацию, полученную во время предварительной тренировки.

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

Простая тонкая настройка

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

Например: допустим, нам нужны модели перевода для 5 языковых пар: hin-eng, guj-eng, tamil-eng, bengali-eng, marathi-eng. mBART, настроенный для каждой языковой пары, будет иметь около 2.5 GB of weights / language-pair. Итак, для этих 5 языковых пар у нас будет 2.5 x 5 = 12.5 GB весов. Представьте, сколько памяти понадобится нашему переводчику, если мы хотим охватить ›100 языков! Нам нужно найти способ повысить эффективность памяти без ущерба для производительности каждого набора данных. Мы обсудим решения этого в следующих разделах.

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

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

Расширение предыдущего примера:

Adapter weights per language pair = 100 MB 
For all 5 language pairs: 5 x 100 = 500 MB 
Pre-trained weights: 2.5 GB
Total weights: 0.5 + 2.5 = 3GB

Раньше общий вес составлял 12.5 GB, а теперь только 3 GB. Мы уменьшили объем памяти на 76%. Теперь рассмотрим сценарий, когда у нас есть сотни таких языковых пар. Самое главное, что мы можем сделать это без ущерба для точности задачи. Мы сравним результаты в следующем разделе.

Куда добавить переходники?

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

Другой вопрос, «где добавить адаптеры» относительно к определенному слою. В большинстве статей по адаптерам предлагается добавлять адаптеры после уровня прямой связи как в кодере, так и в декодере. Некоторые документы включают адаптеры и после слоя самовнимания.

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

Наши эксперименты

Мы взяли данные о парах хинди-английский из набора данных бхаша для дальнейших экспериментов. Полный набор данных содержит около 260 тыс. Выборок, но мы рассмотрели 3 подмножества: мы произвольно выбрали 20 тыс., 50 тыс., 100 тыс. Выборок из полного набора данных и попытались понять эффект увеличения набора данных при точной настройке только адаптеров. Цель состоит в том, чтобы определить, какие адаптеры более важны и вносят больший вклад в оценку BLEU.

Чтобы оценить, для каких слоев нужны адаптеры, мы поэкспериментировали, заморозив некоторые слои и визуализировав, насколько результаты меняются после / до замораживания этого конкретного слоя. Если мы замораживаем определенный слой, а функция потерь и окончательная оценка BLEU не сильно меняются (по сравнению с полной тонкой настройкой), то этот слой, возможно, не нуждается в адаптере. Мы ограничили наше внимание self-attention / cross attention, feed-forward network, embedding layer и провели эти эксперименты для этих слоев. Мы обнаружили, что все эти слои значительно влияют на показатели BLEU.

Поскольку мы работаем с моделью seq2seq, у нас есть несколько экземпляров этих уровней как на стороне кодировщика, так и на стороне декодера: у нас есть уровни enc-attn, enc-ffn, dec-attn, dec-ffn и cross-attn, и к каждому из этих уровней могут быть прикреплены адаптеры.

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

Из приведенных выше таблиц мы делаем следующие наблюдения.

  • При тонкой настройке с помощью mBART для задачи перевода лучшая конфигурация адаптера - добавить адаптеры после encoder self-attention, decoder feed-forward layer и embedding layer.
  • Обратите внимание, что другие подходы NMT на основе адаптеров добавляют адаптеры ко всем уровням. Напротив, в нашей лучшей конфигурации мы опускаем следующие адаптеры : encoder feed-forward layer, decoder self-attention layer и cross-attention layer.
  • Лучшая конфигурация адаптера (например, enc-self-attn-adapter, dec-ffn-adapter, embed-adapter) работает аналогично случаю полной тонкой настройки, но есть существенная разница в размере модели и Тренировочное время.

Мы также заметили (см. Таблицу 4), что добавление адаптера после слоя внедрения имеет решающее значение и может значительно улучшить производительность модели. Обучение только адаптерам для встраивания уже принесло нам 15 баллов BLEU; другие адаптеры более мягко влияют на BLEU. Мы не видели никаких документов, освещающих эту проблему.

Далее мы выполнили полную тонкую настройку и обучили адаптеры (для guj-eng, hin-eng) на полном наборе данных и сравнили оценки BLEU (см. Таблицу 5).

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

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

Наконец, мы рассмотрим еще несколько деталей об обучении с адаптерами. Эти наблюдения основаны на нашей лучшей конфигурации адаптера.

Определение гиперпараметров

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

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

Следует ли обучать адаптеры и предварительно обученную модель вместе?

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

Здесь возникает важный вопрос, как инициализировать адаптеры. Одна из возможных стратегий инициализации - заставить их функционировать идентичность.

Конец заметок

  • Благодаря Dr. Нишант Синха за то, что руководил мной на протяжении всего проекта и помогал мне расти в мире трансформеров.
  • Спасибо команде Hugging Face за создание такой замечательной библиотеки для легкого и быстрого экспериментирования с трансформерами.
  • Работа выполнена в рамках программы Исследования искусственного интеллекта OffNote Labs. Мои впечатления от этой программы были потрясающими. У меня была возможность прочитать и обсудить несколько статей о Трансформаторах, которые помогли глубже погрузиться в эту область. Этот проект помог мне заложить основу для работы над несколькими более сложными проектами с участием Трансформеров. Вы можете найти другие мои проекты здесь. (Twitter, linkedin)

Ссылки

  • Простая масштабируемая адаптация для нейронного машинного перевода [Paper]
  • Обучение переносу на основе Pivot для нейронного машинного перевода между неанглийскими языками [Paper]
  • Параметрическое обучение передачи для НЛП [Бумага]
  • Адаптация к предметной области предварительно обученных языковых моделей [Бумага]
  • MAD-X: платформа на основе адаптера для многозадачного межъязыкового переноса [Paper]
  • AdapterHub: платформа для адаптации трансформаторов [Бумага] [Код]
  • Изучение многоязычных представлений NMT [Бумага]
  • Многоязычный нейронный машинный перевод [Бумага]
  • Исследование моделей нейронного машинного перевода на основе внимания на индийских языках [Paper]
  • Набор данных Bhasha [Ссылка]
  • Корпус параллельных наборов данных IITB hin-eng [Ссылка]