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

За пределами традиционных контекстно-свободных представлений

Хотя предварительно обученные вложения слов, которые мы видели в части 1, оказали огромное влияние, у них есть серьезное ограничение - они предполагают, что значение слова относительно стабильно во всех предложениях. Это не так. Многозначность изобилует, и мы должны остерегаться огромных различий в значении одного слова: например, горит (прилагательное, описывающее что-то горящее) и горит (сокращение от словосочетания литература); или получить (глагол для получения) и получить (потомство животного)

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

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

Например, рассмотрим неполное предложение «Обслуживание было плохим, но еда была ______». Чтобы предсказать следующее слово как «вкусный» или «восхитительный», модель должна не только запомнить, какие атрибуты используются для описания еды, но также уметь определять, что союз «но» вносит контраст, так что новое Атрибут имеет противоположное чувство «бедный».

Эти вложения слов не зависят от контекста - они изучаются на основе параллелизма слов, а не последовательного контекста. Итак, в двух предложениях «Я ем яблоко» и «У меня есть телефон Apple» два слова «яблоко» относятся к очень разным вещам, но они все равно разделяют тот же вектор вложения слов.

От поверхностного к глубокому предварительному обучению

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

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

Предварительно обученные модели, основанные на языковом моделировании, можно рассматривать как аналог ImageNet для НЛП. Было показано, что языковое моделирование охватывает многие аспекты языка, относящиеся к последующим задачам, такие как долгосрочные зависимости, иерархические отношения и настроение. Одним из самых больших преимуществ языкового моделирования является то, что обучающие данные предоставляются бесплатно с любым текстовым корпусом и что доступны потенциально неограниченные объемы обучающих данных.

Стандартный способ ведения проектов НЛП был - вложения слов, предварительно обученные на больших объемах немаркированных данных с помощью таких алгоритмов, как word2vec и GloVe, используются для инициализации первого уровня нейронной сети, остальная часть которой затем обучается на данные конкретной задачи. Однако многие из современных моделей для контролируемых задач НЛП - это модели, предварительно обученные языковому моделированию (что является неконтролируемой задачей), а затем тонко настроенные (контролируемые) с помеченными данными, относящимися к задаче. В основе недавних достижений ULMFiT, ELMo, OpenAI transformer и BERT лежит один ключевой сдвиг парадигмы - переход от простой инициализации первого уровня наших моделей к предварительному обучению всей модели с помощью иерархических представлений для достижения современного состояния. широкий спектр задач в обработке естественного языка, включая классификацию текста, ответы на вопросы, логический вывод естественного языка, разрешение кореференции, маркировку последовательностей и многие другие. Все эти подходы позволяют нам предварительно обучить неконтролируемую языковую модель на большом массиве данных, таком как все статьи в Википедии, а затем точно настроить эти предварительно обученные модели для последующих задач.

Вложения из языковых моделей (ELMo)

Мотивация для ELMo заключается в том, что встраивание слов должно включать как характеристики уровня слова, так и контекстную семантику. Решение очень простое - вместо того, чтобы использовать только последний уровень глубокой языковой модели bi-LSTM в качестве представления слова, представления ELMo являются функцией всех внутренних уровней bi-LSTM. ELMo получает векторы каждого из внутренних функциональных состояний каждого слоя и объединяет их взвешенным образом, чтобы получить окончательные вложения. Глубокие представления превосходят те, которые получены только из верхнего уровня LSTM.

Интуиция заключается в том, что состояния более высокого уровня контекста захвата bi-LSTM, в то время как более низкий уровень хорошо захватывает синтаксис. Это также показано эмпирически путем сравнения производительности заделки 1-го и 2-го слоев. В то время как 1-й уровень лучше работает с тегами POS, 2-й уровень обеспечивает лучшую точность для задачи устранения неоднозначности.

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

Например, рассмотрим предложение «Вчера состоялась премьера бродвейского спектакля». Слово «play» в приведенном выше предложении с использованием стандартных вложений слов кодирует несколько значений, например глагол играть или, в случае предложенного примера, театральную постановку. В стандартных вложениях слов, таких как Glove, Fast Text или Word2Vec, каждое вхождение слова play будет иметь одинаковое представление.

Тонкая настройка универсальной языковой модели (ULMFiT)

ULMFiT значительно превосходит современные решения по шести задачам классификации текстов, уменьшая ошибку на 18–24% для большинства наборов данных. Более того, имея всего 100 помеченных примеров, он соответствует эффективности обучения с нуля на 100-кратном увеличении объема данных.

ULMFiT основан на AWD-LSTM (который представляет собой многослойную двухуровневую сеть LSTM без внимания). Модель обучалась на корпусе WikiText-103.

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

ULMFiT выполняет три шага для достижения хороших результатов трансферного обучения в последующих задачах классификации языков:

1) Общая предварительная подготовка LM - в тексте Википедии.

2) Целевая задача Тонкая настройка LM - ULMFiT предложил два метода обучения для стабилизации процесса точной настройки. См. ниже.

  • Дискриминационная тонкая настройка мотивируется тем фактом, что разные уровни LM собирают разные типы информации. ULMFiT предложил настроить каждый уровень с разной скоростью обучения.
  • Наклонные треугольные скорости обучения (STLR) относятся к специальному планированию скорости обучения, которое сначала линейно увеличивает скорость обучения, а затем линейно снижает ее.

3) Тонкая настройка классификатора целевых задач - предварительно обученный LM дополнен двумя стандартными уровнями прямой связи и нормализацией softmax в конце для прогнозирования распределения целевых меток.

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

Open AI GPT (Генеративный предобучающий трансформатор)

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

  1. Архитектуры моделей различаются: ELMo использует неглубокую конкатенацию независимо обученных многоуровневых LSTM слева направо и справа налево, а GPT - это многослойный декодер-преобразователь.
  2. Использование контекстных встраиваний в последующих задачах различается: ELMo передает вложения в модели, настроенные для конкретных задач, в качестве дополнительных функций, в то время как GPT настраивает одну и ту же базовую модель для всех конечных задач.

Что такое трансформатор?

В своей ванильной форме Transformer включает в себя два отдельных механизма - кодировщик, который считывает вводимый текст, и декодер, который производит прогноз для задачи. Кодировщик берет входную последовательность и отображает ее в пространство более высокой размерности (n-мерный вектор). Этот абстрактный вектор подается в декодер, который превращает его в выходную последовательность. Выходная последовательность может быть на другом языке, в виде символов, копии ввода и т. Д.

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

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

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

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

OpenAI GPT, как описано в их статье, представляет собой адаптацию известного преобразователя из статьи Google Brain 2017 года Внимание - это все, что вам нужно.

В то время как в исходной версии от Google Brain использовался идентичный 6-слойный стек кодировщика-декодера, GPT использует 12-слойный стек только для декодера. Каждый уровень имеет два подслоя, состоящих из механизма самовнимания с несколькими головами и полностью связанной (позиционной) сети прямой связи.

Для обучения преобразователя OpenAI используются следующие шаги:

1. Предварительное обучение без учителя: языковая модель преобразователя была обучена неконтролируемым образом на нескольких тысячах книг из корпуса Google Книг, а предварительно обученные веса опубликованы в репозитории OpenAI GitHub. В интересах других.

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

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

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

Двунаправленные представления кодировщика от трансформаторов (BERT)

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

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

Трансферное обучение

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

Перенос обучения на последующие задачи начался примерно в 2013 году с использования контекстно-независимых векторов слов из неконтролируемого пакета моделей слов (word2vec, GloVe), чтобы затем использовать контекстно-зависимые векторы слов из моделей последовательностей (Elmo), к текущему прямому использованию обученных блоков преобразователей с дополнительный выходной слой для точной настройки конкретной задачи (ULMFiT, GPT, BERT).

Готовые предварительно обученные модели как экстракторы признаков

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

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

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

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

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

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

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