Как использовать модель BERT?
Предварительная подготовка и точная настройка
Пройти 1
Целью предварительной подготовки является изучение языка и контекста. BERT изучает язык, тренируясь одновременно над двумя задачами без присмотра. Они есть,
- Модель маскированного языка (MLM)
- Предсказание следующего предложения (NSP)
Для MLM BERT берет предложение со случайными словами, заполненными масками. Цель состоит в том, чтобы вывести эти токены маски. Это похоже на заполнение пробелов, это помогает BERT понять двунаправленный контекст внутри предложения.
В NSP BERT принимает два предложения и определяет, действительно ли второе предложение следует за первым. Это своего рода проблема бинарной классификации.
Это помогает BERT понимать контекст в разных предложениях, а используя оба предложения вместе, BERT хорошо понимает язык.
Целью тонкой настройки является дальнейшее обучение BERT очень конкретным задачам НЛП. Например, в вопросе-ответе нам просто нужно заменить полностью связанные выходные слои новым набором выходных слоев, которые могут в основном выводить ответ на вопрос, который мы хотим получить из определенного отрывка. Затем мы можем провести контролируемое обучение с набором данных для ответов на вопросы, это не займет много времени, так как с нуля изучаются только выходные параметры. Остальные параметры модели немного доработаны, в результате чего время обучения сокращается.
Проход 2
На практике и MLM, и NSP обучаются одновременно.
Входные данные представляют собой набор из двух предложений, некоторые слова которых замаскированы. Каждый токен — это слово, и мы преобразуем каждое из этих слов во вложения, используя предварительно обученные вложения.
Выходная сторона имеет C, который представляет собой двоичный вывод, показывающий, следует ли предложение B за предложением A в контексте. Каждый из T здесь представляет собой вектор слов, который соответствует выходным данным для проблемы модели маскированного языка. Таким образом, количество векторов слов, которые мы вводим, такое же, как и векторов слов, которые мы выводим на этапе тонкой настройки.
Обычно для задач классификации мы настраиваем его, передавая токены (вложения?) предложений в BERT, который в конечном итоге дает метку класса в качестве вывода в C.
Проход 3
Как генерируются вложения из токенов? Первоначально вложения строятся из трех векторов,
- Вложения токенов
- Вложения сегментов
- Вложения позиций
Вложения токенов — это предварительно обученные векторы (в статье используется словарный запас 30 тыс.). Вложения сегментов — это номера предложений, закодированные в вектор. Позиционные вложения — это положение слова в предложении. Добавление этих векторов дает входную кодировку для BERT. Встраивание сегментов и позиций помогает сохранить порядок слов в контексте.
Во время обучения нам нужно свести к минимуму потери, два ключевых момента:
- Все векторы в выходных данных имеют одинаковый размер.
- Все векторы в выходных данных генерируются одновременно.
Нам нужно взять каждый вектор слова и передать его в полносвязный выходной слой с тем же количеством нейронов, равным количеству токенов в словаре (30k, если мы обратимся к бумаге). А затем мы применим слой softmax, это преобразует вектор слова в распределение, а фактическая метка будет горячим кодировщиком фактического слова. Итак, мы сравниваем эти распределения, а затем обучаем сеть, используя кросс-энтропийные потери.
На выходе есть все слова, хотя эти входы вообще не были замаскированы. Однако потеря учитывает только предсказание замаскированного и игнорирует другие слова, выводимые сетью. Это делается для того, чтобы больше внимания уделялось прогнозированию этих значений маски.
На этом завершается то, как мы можем предварительно обучить и настроить BERT для его использования.
Если мы сложим Encoder Transformers в 12 слоев, это будет BERT-базовый, если 24 BERT-большой и так далее.
Пришло время использовать BERT в реальной жизни. (Часть — 4?)