Различные способы вставить трансформатор в вашу модель

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

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

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

ДАННЫЕ

Собираем набор данных из Kaggle. Набор данных по категориям новостей содержит около 200 тыс. Заголовков новостей с 2012 по 2018 год, полученных от HuffPost. В наши задачи входит категоризация новостных статей на основе двух разных текстовых источников: заголовков и кратких описаний. Всего у нас более 40 различных типов новостей. Для простоты, учитывая время вычисления нашего рабочего процесса, мы используем только подгруппу из 8 классов.

Мы не применяем никакой предварительной очистки; мы позволяем нашим BERT делать все волшебство. Наша рабочая среда - Tensorflow с великолепной библиотекой преобразователей Huggingface. Более подробно, мы используем голый трансформатор модели Берта, который выводит необработанные скрытые состояния без какой-либо конкретной головы наверху. Он доступен как подкласс модели Tensorflow и может быть легко использован в нашей сетевой архитектуре для тонкой настройки.

ОДИН БЕРТ

В качестве первого конкурента мы представляем единую структуру BERT. Он получает только один ввод текста, который является результатом объединения двух наших текстовых источников. Это нормальное явление: любая модель может получать на входе конкатенированные функции. Для трансформеров этот процесс превозносится путем объединения ввода со специальными жетонами.

BERT ожидает, что входные данные будут в определенном формате: есть специальные маркеры для обозначения начала ([CLS]) и конца предложений / текстовых источников ([SEP]). В то же время токенизация включает в себя разделение входящего текста на списки токенов, доступных в словаре. Слова, не входящие в словарный запас, обрабатываются с помощью техники кусочков слов; где слово постепенно разбивается на подслова, которые являются частью словаря. Этот процесс может быть легко выполнен с помощью предварительно обученного токенизатора Huggingface; нам нужно только позаботиться о прокладке.

Мы заканчиваем тремя матрицами (токен, маска, идентификаторы последовательностей) для каждого источника текста. Они являются входами наших трансформаторов. В случае одного BERT у нас есть только один набор матриц. Это связано с тем, что мы одновременно передаем нашему токенизатору две текстовые последовательности, которые автоматически объединяются (с токеном [SEP]).

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

Наш простой BERT обеспечивает точность 83% наших тестовых данных. Результаты указаны в приведенной ниже матрице недоразумений.

ДВОЙНОЙ БЕРТ

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

С этими настройками мы можем достичь точности 84% наших тестовых данных.

СИАМСКИЙ БЕРТ

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

Наша сиамская структура достигает 82% точности по нашим тестовым данным.

РЕЗЮМЕ

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

ПРОВЕРИТЬ РЕПО НА GITHUB

Оставайтесь на связи: Linkedin

ССЫЛКИ

Kaggle: Два BERT лучше, чем один

Kaggle: Bert-base TF2.0