machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Детальный анализ настроений (часть 3): тонкая настройка трансформаторов

Дата публикации Sep 9, 2019

Источник:Pixabay

Это третья часть серии по детальному анализу настроений в Python.Части 1а также2охватил анализ и объяснение шести различных методов классификации в мелкозернистом наборе данных Stanford Sentiment Treebank (SST-5). В этом посте мы рассмотрим, как улучшить прошлые результаты, создавтрансформатор-на основе модели и применения трансферного обучения, мощный метод, который былдоминирующие таблицы задач НЛПнедавно.

Отпервая статьяв этой серии были получены следующие точности классификации и оценки F1 для набора данных SST-5:

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

Что делает трансформаторы такими мощными?

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

  • Само-вниманиеЭто механизм, который используют преобразователи для представления различных позиций входной последовательности и изучения отношений между ними.
  • Многогранное вниманиеТрансформеры делегируют задачу самосохранения нескольким «головам», т.е.совместное участие в информации с разных позиций в последовательностииз разных подпространств представления. Это позволяет им эффективно масштабировать (с большими наборами данных), используянеконтролируемое обучение,
  • Передача обучения: Последние ведущие методы на основе трансформаторовтрансферное обучение- то есть, используя знания, извлеченные из предыдущей настройки (например, неконтролируемое обучение), и применяя их к другой настройке (например, классификация настроений или ответы на вопросы). Это достигается с помощью двухэтапного процесса:pretraining, с последующимтонкая настройка, илиприспособление.
Источник:«Состояние трансферного обучения в НЛП» Себастьяна Рудера

По сути, все топовые трансформаторные методы в последнее время (GPT,БЕРТ,XLNet) использовать такой подход последовательного обучения передачи. Внутренне они тренируютязыковая модельна этапе предварительной подготовки используются немаркированные данные из большого корпуса, после чего дополнительный пользовательский модуль (прикрепленный к языковой модели) настраивается на пользовательские данные. Ниже приведена визуализация этого подхода для BERT для нескольких наборов эталонных данных.

Источник:Devlin et al. 2019

Важность целей предварительной подготовки

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

  • OpenAI GPTиспользуетслева направоЦель языкового моделирования во время предварительной подготовки - то есть научиться прогнозировать наиболее вероятный следующий токен в последовательности в направлении слева направо, как это происходит на естественном языке (по крайней мере, для английского). Такие модели обычно называютклассическийязыковые модели илипричинныйязыковые модели. Слово «причинно-следственная связь» здесь относится к тому факту, что вероятность появления токена в определенном месте была вызвана последовательностью токенов, предшествовавших ему.
  • БЕРТиспользуетзамаскированныйязыковая модельв своей основе, полученной путем случайной маскировки 15% токенов последовательности во время предварительной подготовки - это позволяет модели узнать, как предсказать токены, которые пришли до или после предыдущего токена (он обучендвунаправленнымв отличие от ГПТ). В дополнение к маскировке, BERT использует цель прогнозирования следующего предложения, где модель учится прогнозировать, следует ли предложение после предыдущего. Этот подход требует более длительного времени обучения по сравнению с моделированием причинно-следственных связей, поскольку маскирование части токенов приводит к меньшему обучающему сигналу.
  • XLNetиспользуетперестановкаЦель языкового моделирования - в отличие от BERT, он маскирует каждый токен последовательности случайным образом (не только 15% из них) во время предварительной подготовки. Таким образом, модель учится прогнозироватьслучайные токеныпоследовательности в обоих направлениях, что позволяет модели учитьсязависимостимежду токенами (не только те токены, которые наиболее вероятны в данной последовательности). Как можно себе представить, это дороже с точки зрения времени обучения и требует гораздо большей языковой модели для достижения хорошего базового уровня.

В оставшейся части этого поста мы будем работать с моделью трансформатора, обученной с использованиемпричинныйцель языкового моделирования (похожа, но намного меньше, чем GPT / GPT-2)


Строим Трансформер

С этим фоном позади мы можем перейти к некоторому кодированию!

Читать набор данных

Некоторая базовая предварительная обработка выполняется на наборе данных SST-5 с использованием Pandas. Обратите внимание, что метки классов уменьшаются на 1 (чтобы быть в диапазоне [0, 1, 2, 3, 4]), потому что PyTorch ожидает, что метки будут индексироваться с нуля.

Токенизация и кодирование данных

Первый шаг в обработке данных - выполнить токенизацию с помощью токенайзера WordPiece— [см. раздел 4.1 в этой статьеБольше подробностей]. Мы используемBertTokenizerкак реализовано в HuggingFace'spytorch_transformersбиблиотека, Затем токенизированный текст кодируется в последовательности целых чисел, которые должны обрабатываться нашей моделью преобразователя. После этогоPyTorchDataLoaderсоздан для загрузки образцов в партии для обучения.

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

Обратите внимание, что в этом примере мы фиксируем максимальную длину последовательности равной 256 - теоретическимаксимальная длина последовательности, которую может обработать BERTи кодировщики аналогичной модели - 512, но, поскольку SST-5 - сравнительно небольшой набор эталонных данных с относительно короткими выборками, мы сокращаем максимальную длину последовательности токенов до 256, чтобы уменьшить использование памяти и размер модели.

Токен специальной классификации‘[CLS]’добавляется в конце каждой последовательности - этот токен используется в задачах классификации как совокупность представления каждой последовательности, чтобы узнать, к какому классу принадлежит последовательность. Для последовательностей, которые короче 256, токен заполнения‘[PAD]’добавлен, чтобы гарантировать, что все партии остаются одинакового размера для загрузки в память GPU во время обучения.

Построить модель трансформатора

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

Источник:Child et al.

В коде PyTorch приведенная выше структура выглядит следующим образом.

БазаTransformerкласс, который наследуется от PyTorch'snn.moduleопределено. Входная последовательность (в нашем случае текст для классификации настроений) подается в блоки трансформатора путем суммирования токена последовательности и встраивания позиции. Каждый последующий блок трансформатора состоит из следующих модулей:

  • Нормализация слояВ сущности, нормализация применяется к мини-пакетам во время обучения, чтобы упростить оптимизацию (математически) - это повышает производительность модели по сравнению с ненормализованной сетью. Нормализация уровня позволяет выбирать мини-пакеты произвольного размера, изменяя размер, по которому вычисляется статистика пакета (среднее значение / дисперсия) для каждого пакета - это было эмпирически показано для повышения производительности при последовательных входах в рекуррентных нейронных сетях (RNN) , Для превосходного интуитивного объяснения нормализации слоя, прочитайтеэто сообщение в блоге Кейта Курита,
  • Само-внимание: Использует PyTorch'sMultiHeadAttentionмодуль для инкапсуляции логики самообслуживания преобразователя, то есть способности преобразователя кодировать позиционную информацию и извлекать из нее уроки во время обучения.
  • Выбывать: Классическая методика регуляризации в нейронных сетях для уменьшения переоснащения - это делаетсявведение случайного шума во время тренировочного процесса,
  • Модуль прямой связи: Выполняет прямой проход, включая нормализацию другого слоя, со скрытым слоем и нелинейностью (обычноРЕЛУилиДжелу) с последующим выпуском.

Две «маски» определены в модуле прямой связи нашей сети.

  • Обивка маски: Это маскирует токены дополнения ([‘PAD’]) введено ранее, чтобы сделать каждую последовательность одинаковой длины для каждой партии. Это указывает на то, что модель маскирует эти токены во время логического вывода, чтобы модуль самоконтроля игнорировал их. Маска дополнения специфична для каждой партии.
Подкладочная маска:NAACL 2019 учебные слайды
  • Маска внимания: Маска внимания включена, так как в этом методе используется модель причинного языка - она ​​маскирует предыдущие токены во входных данных ниже в соответствии с моделью причинного языка. Маска указывается одинаково для всех партий с использованием верхней треугольной матрицы (torch.triu), установив значение всех элементов выше главной диагонали равным отрицательной бесконечности.
Внимание маска:NAACL 2019 учебные слайды

Добавить заголовок классификации

Нижняя часть модели использует слой линейной классификации поверх существующего трансформатора.TransformerWithClfHeadкласс наследует от базыTransformerкласс и указываетCrossEntropyLossв качестве функции потерь для оптимизации. Размер линейного слоя составляет[embedding_dimensions, num_classes]- в этом случае для существующей предварительно обученной модели и набора данных SST-5, 410 × 5

Необработанные выходные данные, то есть логиты, извлекаются из уровня классификации и передаются в функцию softmax для генерации вектора вероятности класса (1 × 5) в качестве выходных данных.

Тренировать модель

Вес модели инициализируется изпредварительно обученная модель, предоставляемая HuggingFace,и учебный скрипт [training/train_transformer.py] выполняется в наборе данных SST-5.

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

💡Линейный график прогрева: Вместо того, чтобы устанавливать постоянную скорость обучения,кусочно-линейный планировщик изpytorch-igniteопределяется для увеличения скорости обучения для ранней части обучения с последующим линейным снижением до нуля. Как правило, это хороший способ обеспечить хорошую передачу знаний в процессе обучения (аналогично «наклонно-треугольному уровню обучения» вULMFiT, Говард и Рудер, 2018).

💡Градиент накопленияТомас Вольф так хорошо описывает в своем посте:Практические советы по обучению нейронных сетей«Хороший способ имитировать пакеты больших размеров без проблем с памятью графического процессора - это накапливать градиенты. Это делается путем суммирования тензоров градиента от нескольких шагов обратного распространения итогдавызов оптимизатора для минимизации потерь - обратите внимание, что тогда потери также нужно будет разделить на количество шагов накопления. Это может позволить нам тренироваться с размерами партий, которые больше, чем те, которые фактически могут поместиться в памяти графического процессора, улучшая обучение модели.

Вывод модели

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

Этот процесс инкапсулируется с использованиемTransformerSentimentкласс, в файлеclassifiers.py, чтобы прочитать в наборе данных SST-5 в Pandas DataFrame и оценить производительность трансформатора.


оценка

Запуск обученной модели трансформатора (доступно в этой ссылке Google Drive) на тесте SST-5 видно, что причинный трансформатор повышает точность классификации почти до 50%!

Оценки макро-F1 для трансформатора также улучшены по сравнению с другими методами на основе встраивания (FastText и Flair).

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

Матрица смешения следующей лучшей модели, Flair, помещена рядом с трансформатором для сравнения.

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


Объясняя предсказания трансформатора

Следуя методике объяснения модели, показанной вЧасть 2из этой серии мы делаем визуализаторы LIME для конкретных текстовых примеров из тестового набора SST-5, используя нашу обученную модель трансформатора. Код, использованный для генерации представленных ниже визуализаций, доступен в файле.explainer.py- обученный файл модели также сделандоступно в этой ссылке Google Drive,

Пример 1:«Это не ужасно, просто ужасно посредственно.»

Истина: 1 - Предсказано: 1

Похоже, что трансформатор правильно идентифицирует слова «какой ужас" а также "посредственный”Как две наиболее важные особенности, которые способствуют тому, чтобы в этом примере была метка класса 1 (то есть сильно отрицательная). Слово "не”Отталкивает вероятность предсказания от 1 (предположительно до метки 2 или 3), но ее влияние не так сильно, как отрицательные слова в предложении. Наречие «ужасно”Также играет небольшую роль в классификации этого предложения как сильно отрицательного, что означает, что модель имеет представление о том, как модификаторы, такие как наречия, изменяют степень настроения в предложении.

Пример 2:«Актерский состав в целом превосходен ... но сам фильм просто очарователен.»

Верно: 3 - Предсказано: 3

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

Другое интересное наблюдение заключается в том, что слово «бросать»Не играет никакой роли в том, что настроения прогнозируются как нейтральные (класс 3).Всеранее использованные методы (см Часть 2), включая Флэра, ошибочно усвоили особенность важности слова «бросатьКак способствующий настроению - потому что это слово встречалось много раз в обучающих данных. Основная сила причинно-следственной языковой модели трансформатора помогает ему сделатьболее значимая связь между словами и предсказанным ярлыком настроенияНезависимо от того, сколько раз слово появилось в тренировочном наборе.


Заключительные замечания

В этой серии мы исследовали различные методы НЛП в Python для детальной классификации в наборе данных Stanford Sentiment Treebank (SST-5). Несмотря на то, что этот набор данных является чрезвычайно сложным и создает многочисленные проблемы для существующих методов классификации текста, очевидно, что текущий отраслевой стандарт в НЛП - преобразователи в сочетании с трансферным обучением - демонстрирует по своей сути превосходную производительность при выполнении задач классификации по сравнению с другими методами. Это происходит главным образом из-за базового представления языковой модели трансформера, что дает ему большую контекстную осведомленность и лучшее синтаксическое понимание учебного словаря.

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

Дополнительные эксперименты

Чтобы выжать большую производительность из трансформатора, можно попробовать несколько дополнительных экспериментов (помимо увеличения количества параметров в модели):

  • Доменные данные: В текущем подходе используется модель причинно-следственной связи (то есть модель с предварительной подготовкой HuggingFace), которая имеет 50 миллионов обучаемых параметров. Эта модель была предварительно обучена на Wikitext-103 (то есть 103 миллиона токенов из статей Википедии), как описано вУчебное пособие по NAACL, Дополнение предварительной подготовки более релевантными предметно-ориентированными данными, такими как несколько сотен тысяч обзоров фильмов, может помочь модели лучше понять типичный словарь, найденный в SST-5. Этот шаг, хотя и дорогой, поскольку требует переобучения языковой модели, является одноразовым (что можно сделать с помощьюpretraining_train.pyфайл в хранилище HuggingFace) и может привести к значительному улучшению точности классификации.
  • Моделирование языка маскиИспользование модели причинного языка в качестве цели предварительной подготовки, хотя и дешевле в обучении, может быть не самым лучшим способом достижения очень точных результатов классификации. Эксперимент с моделированием языка масок в качестве цели предварительной подготовки (при дополнении данных обучения обзорами фильмов) может привести к более точной языковой модели. Действительно,Учебное пособие по NAACLпоказывает, что предварительная подготовка с использованием цели моделирования маскированного языка привела к снижениюрастерянностьчем модель причинного языка, это означает, что эта модель могла бы работать лучше в последующих задачах, таких как классификация настроений.
  • Настройка гиперпараметра: Эксперименты с большими размерами партий (для обучения и тестирования), увеличение шагов накопления градиента и просмотр графиков разогрева с различной скоростью обучения могут привести к дополнительному приросту производительности на тестовом наборе.

Целью создания структуры анализа настроений с нуля, как описано в этой серии, было укрепление уверенности в нашей способностиоцениватьа такжеинтерпретироватьразличные методы машинного обучения, соответствующие нашей постановке задачи и имеющимся данным. Использование больших предварительно подготовленных моделей на основе трансформаторов, таких как BERT-large, XLNet или RoBERTa, конечно, даст значительно улучшенную производительность в реальных наборах данных - однако важно сбалансировать огромные вычислительные затраты на использование этих моделей по сравнению с использованием меньшие, более простые модели с хорошей целью предварительной подготовки и чистотой,хорошо аннотированный,предметно-ориентированныйданные обучения. По мере того, как все больше и больше технологий НЛП будут расширяться на огромные успехи трансформаторов в ближайшие месяцы, впереди могут быть только интересные времена!


Код и обучаемая модель

Не стесняйтесь воспроизводить результаты и делать свои собственные выводы, используя трансформатор!

Подтверждения

Весь код, использованный для этого поста, был адаптирован из превосходного примера кода в ссылках ниже:

Дальнейшее чтение

Длямногоболее подробно углубиться в трансферное обучение в НЛП, настоятельно рекомендуется пройти черезNAACL 2019 учебные слайдыСебастьян Рудер, Мэтью Питерс, Свабха Сваямдипта и Томас Вольф.

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map