Методы Transfer Learning для задачи семантического анализа
ВВЕДЕНИЕ
transfer learning семантический текст
В настоящее время машинное обучение развивается огромными темпами: появляются новые и постоянно развиваются существующие алгоритмы и модели, с помощью машинного обучения решаются всё новые и новые задачи. Машинное обучение позволяет в автоматическом режиме и с высокой скоростью решать рутинные задачи, экономит ресурсы - как финансовые, так и человеческие. Однако ввиду того, что появляющиеся модели, как правило, только усложняются и становятся более объёмными, обучение этих моделей становится всё более трудоёмким и долгим процессом. Более того, поскольку модели становятся более сложными и с большим количеством параметров, для их качественного обучения требуются всё большие объёмы данных.
Ввиду этого, в последнее время становится очень популярным направление Transfer Learning - использование опыта, полученного при решении одной задачи, для решения другой. Подобно тому, как человек, научившись ездить на роликах, может применить этот опыт при обучении езде на коньках, алгоритм машинного обучения, научившись классифицировать объекты на несколько определённых классов, может использовать этот опыт на задаче классификации на абсолютно другие классы.
Главная идея такого подхода состоит в том, что алгоритм, решая первую задачу, учится определять ключевые признаки объектов, а затем по этим признакам распределять их по классам. Таким образом, если классы изменятся при переходе ко второй задаче, главное свойство алгоритма выделять ключевые признаки объектов по-прежнему можно будет использовать, необходимо будет лишь заново обучить алгоритм распределять объекты по классам в зависимости от признаков, что сделать гораздо быстрее, чем тренировать алгоритм с нуля.
В рамках данной работы для исследования эффективности методов с применением Transfer Learning будет рассмотрена одна задача из области NLP - Natural Language Processing (обработки естественного языка), а именно, задача семантического анализа. Имеется база коротких текстов, в которых упоминается банк «Тинькофф» на различных форумах и в социальных сетях. Упоминания разделяются на три класса тональности: «Негативная», «Позитивная», «Не определено». Требуется по тексту определить, к какому классу он относится.
Цель и задачи исследования: исследование методов Transfer Learning для задачи семантического анализа и их экспериментальное сравнение. Исследование будут проводиться на данных, содержащих упоминания компании Тинькофф Банк на различных Интернет-ресурсах.
Структура работы: структура работы обусловлена целью и задачами исследования. Работа состоит из введения, разбора применяемых в работе моделей, экспериментов, а также заключения и списка литературы.
В работе описано несколько реализованных моделей для классификации текстов, которые сравниваются между собой с использованием различных метрик, таких как точность, полнота, F-мера.
I. TRANSFER LEARNING
Transfer Learning (TL) - подход в машинном обучении, который позволяет применить опыт, накопленный при решении одной задачи, для решения другой, связанной задачи. Например, опыт, полученный при решении задачи распознавания автомобилей, можно применить в задаче распознавания грузовиков.
Transfer Learning достаточно часто используется при работе с нейронными сетями. Как правило, для обучения нейронной сети «с нуля» необходимо достаточно большое количество данных и большое количество времени и компьютерных ресурсов, причём чем более глубокая модель обучается, тем больше данных и ресурсов необходимо. Если же для новой задачи использовать предобученную модель, обучение займёт в десятки и сотни раз меньше времени. Более того, зачастую количество доступных размеченных данных может быть очень мало, TL позволяет обойти и эту проблему.
Lisa Torrey и Jude Shavlik в книге [1] описали 3 основных преимущества использования Transfer Learning:
Рисунок 1. График сравнения производительности с применением TL и без него
1. Higher start - первоначальные результаты предобученной модели на новой задаче лучше результатов «чистой» модели
2. Higher slope - предобученная модель, как правило, обучается быстрее «чистой»
3. Higher asymptote - предобученная модель сходится к более хорошим результатам, чем обучаемая с нуля
Существует несколько базовых подходов:
1) Обучение модели с целью переиспользования:
Допустим, необходимо решить задачу А, для которой существует сравнительно небольшое количество данных. Можно найти связанную задачу Б, для которой данных достаточно, обучить модель на этих данных и затем использовать эту модель уже для решения задачи А. Причём подходов к использованию обученной модели также существует множество: можно просто использовать модель, но с другими данными, а можно дообучить некоторые части модели под новые данные. Подход с дообучением уже обученной модели называется fine-tuning - тонкая настройка параметров.
Рисунок 2. Использование предобученной модели для задачи классификации
2) Использование предобученной модели:
Иногда проще не обучать свою модель, а взять уже обученную. Множество библиотек (например, Keras [2]) предоставляют в своём API [3] уже обученные модели для решения различных задач. Также подобные модели можно найти в свободном доступе в сети Интернет. Отличным примером такого подхода является использование, например, модели AlexNet [4] для классификации изображений: изначальная модель обучена для классификации на 1000 классов, но, заменив последний слой и немного дообучив модель, можно классифицировать на произвольное количество классов.
3) Feature extraction:
Ещё один подход в глубоком обучении - поиск (извлечение) наиболее важных признаков из данных с помощью ранее обученной модели. Поскольку при обучении нейронная сеть, например, учится выявлять наиболее важные признаки из входных данных, этот факт можно использовать при решении задач на схожих входных данных. Такой подход, например, часто используется при решении задач компьютерного зрения, поскольку он позволяет уменьшить размер исходных данных, оставив в них только наиболее важные признаки. Пример данного подхода - использование выходов предпоследнего слоя AlexNet, например, для обучения SVM на задаче классификации изображений. Выходы из AlexNet, в данном случае, будут признаками, которые нейронная сеть посчитала наиболее важными для изображения, поэтому использование их в SVM вместо исходного изображения даст хорошие результаты.
1.1 Transfer Learning в задачах обработки естественного языка
Начиная с 2013 г. для работы с любыми задачами обработки естественного языка использовались такие языковые модели, как word2vec и GloVe [5]. Данные модели предварительно обучаются на большом количестве данных, а затем позволяют достаточно просто и быстро преобразовать сырой текст в числовые векторы (embeddings - эмбеддинги), чтобы в дальнейшем преобразованные данные использовать в следующей модели для решения конкретной задачи. Проблема такого подхода заключается в том, что слово переводится в один и тот же числовой вектор, независимо от контекста, в котором оно использовано. Например, слово «сел» в предложении «человек сел на стул» и «мой телефон сел» имеет абсолютно разное значение, однако модели, упомянутые выше, никак не используют этот факт. Другими словами, проблема подходов, подобных word2vec, заключается в том, что они теряют контекст и семантику предложения, рассматривая отдельные слова.
2018 год в некотором роде стал переломным для сферы NLP - появилось некое подобие ImageNet [6], применимое к задачам обработки языка. ImageNet - организация, которая с 2010 г. проводит одноимённое соревнование по классификации изображений. В датасет ImageNet к 2010 г. входило порядка 1 миллиона изображений, разделённого на 1000 классов. В 2011 г. лучший результат показывал алгоритм, который классифицировал изображения с 25% ошибкой, однако в 2012 году глубокая свёрточная сеть под названием AlexNet показала результат с ошибкой классификации всего 16%. Начиная с этого момента, сообщество стало предлагать новые модели, основанные на архитектуре AlexNet, и показывающие всё лучшие и лучшие результаты, а что самое важное - эти модели стали переиспользоваться для решения задач детекции объектов на изображении, семантической сегментации, распознавания на видео и других. Модели, обученные на огромном датасете ImageNet, позволили эффективно применять полученный ими опыт для решения других задач и сейчас решение задач компьютерного зрения без использования предобученной на ImageNet модели считается безрассудным [7].
II. МОДЕЛИ TRANSFER LEARNING
2.1 Архитектура Transformer
Архитектура Transformer была предложена в работе «Attention Is All You Need» в 2017 г. [8]. Данная архитектура будет рассмотрена, поскольку на её основе были разработаны несколько новых моделей, применяемых в NLP и позволяющих использовать преимущества Transfer Learning.
Если взглянуть на Transformer как на чёрную коробку, то это просто приложение, которое получает на вход предложение на одном языке и на выход отдаёт предложение на другом языке.
Рисунок 3. Применение The Transformer
Более конкретно, модель состоит из двух больших частей - блока кодировщиков (encoders) и блока декодировщиков (decoders). Каждый кодировщик (и декодировщик аналогично) имеет одну и ту же структуру и свои веса при обучении.
Рисунок 4. Верхнеуровневая архитектура The Transformer
2.1.1 Кодировщик (Encoder)
Рассмотрим подробнее Encoder:
Рисунок 5 Архитектура кодировщика
Каждый кодировщик состоит из двух основных частей: блок Self-Attention и несколько простых прямонаправленных Fully-connected слоёв. Главную роль здесь играет именно Self-Attention блок, рассмотрим его работу в деталях:
Рисунок 6. Векторы, используемые для вычислений в блоке Encoder
Первый шаг. На вход первому кодировщику передаётся предложение, где каждое слово переведено в какой-либо эмбеддинг (например, GloVe). Помимо этого, в вычисленный эмбеддинг каждого слова добавляется positional embedding, который отражает для модели позицию каждого слова в предложении, позволяет учитывать расстояния между словами и т.д.
Затем для каждого слова с помощью матриц , значения весов которых настраиваются в процессе обучения модели, вычисляется три значения - query, key, value. Эти новые вычисленные вектора имеют размерность меньше, чем входные: входные вектора имеют размерность 512, в то время как q, k и v - 64. Это не ограничение модели, а сделано для того, чтобы сделать время вычисления в self-attention блоках примерно константным значением. Полученные вектора q, k, v - это абстрактные вектора, которые понадобятся дальше для вычисления значения self-attention.
Рисунок 7. Пример вычисления эмбеддинга в блоке Encoder
Второй шаг. Будем рассматривать дальнейший процесс на примере первого слова. Вторым шагом вычисляется score для каждого слова, относительно текущего. Score показывает, насколько при кодировании текущего слова необходимо обращать внимание на другие слова в предложении. Значение вычисляется по формуле:
где i - номер текущего слова, относительно которого вычисляются значения «счёта», а j - слово, для которого вычисляется «счёт». Например, для первого слова “Thinking” значение , т.е. самого для себя, имеет значение 112, а относительно слова “Machines” - 96.
Третий и четвёртый шаги. Третий и четвёртый шаги по большей части оптимизационные. Сначала мы каждый score делим на корень из размерности вектора k (размерность q и v аналогична), чтобы получить более стабильный градиент при обучении. В работе [8] размерность вектора равна 64, поэтому деление происходит на 8.
Далее, с целью нормализовать значения «счетов» (scores) и привести их сумму к единице, мы пропускаем их через softmax-слой. На самом деле, почти всегда слово само для себя будет иметь наибольший score, однако иногда может сложиться другая ситуация. Полученные после этого шага значения в некотором роде отражают, насколько каждое слово в предложении важно при описании текущего.
Пятый шаг. Следующим шагом каждый value вектор умножается на значение коэффициента, полученного на четвёртом шаге, и все полученные значения складываются. Таким образом получается итоговое значение self-attention механизма для первого слова. Можно сказать, что алгоритм в embedding каждого слова «подмешивает» другие слова, причём чем больше слово связанно с другим, тем сильнее оно будет влиять на конечный выходной вектор.
Для оптимизации вычислительного процесса и более эффективного использования ресурсов, операции, описанные выше, выполняются в матричной форме: