Это 29-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления
Сначала я подробно расскажу о принципе BERT, а затем кратко расскажу об ELMO и GPT.
Подробное объяснение BERT
Полное имя БЕРТBidirectional Encoder Representation from Transformer, является неконтролируемое использование компанией GoogleБез меткиЯзыковая модель "рафинированного" текста, его архитектура - Кодировщик в Трансформере (BERT=Кодировщик Трансформера)
я здесьДетали трансформатораВсе концепции, связанные с Transformer, были подробно объяснены в , поэтому я не буду повторять их здесь.
Раньше для решения различных задач НЛП мы разрабатывали и обучали наиболее подходящую архитектуру нейронной сети для этой задачи.Ниже приведены несколько простых примеров.
Для разных задач НЛП обычно требуются разные модели, а разработка этих моделей и проверка их работоспособности требует очень больших затрат (людских ресурсов, времени, вычислительных ресурсов).Насколько хорошо было бы иметь общую архитектуру, которая может напрямую обрабатывать различные задачи НЛП?
С течением времени у многих людей, естественно, возникает эта идея, и BERT является одним из примеров воплощения этой концепции на практике.
Google предварительно обучил BERT, чтобы он выполнял две задачи одновременно:
- Заполните пропуски (cloze), академическая точка зренияMasked Language Model
- Определить, связано ли второе предложение с первым предложением в исходном тексте (Next Sentence Prediction)
Для обычного человека очень просто выполнить обе задачи. Просто взглянитеконтекстПросто знайте, что задача закрыть[MASK]
следует заполнить退了
;и醒醒吧
с последующим你没有妹妹
также очень разумно
Далее я подробно опишу детали дизайна этих двух задач в документе.
Задача 1 языковой модели BERT: Маскированная языковая модель
В BERT Masked LM (Masked Language Model) создает языковую модель, которая простоСлучайно замаскировать или заменитьЛюбое слово или слово в предложении, а затем пусть модель предскажет, какая часть покрыта или заменена контекстом, а затемПри выполнении Убытка рассчитывается только Убыток покрываемой части., это на самом деле очень простая для понимания задача, фактическая операция выглядит следующим образом:
- Случайным образом замените 15% токенов (слов или слов) в предложении следующим:
- Эти жетоны с вероятностью 80% будут заменены на
[MASK]
, например, моя собака волосатая → моя собака [МАСКА] - Существует 10% вероятность замены на любой другой токен, например моя собака волосатая → моя собака яблоко
- Есть 10% шанс, что он останется целым, например, моя собака волосатая → моя собака волосатая
- Эти жетоны с вероятностью 80% будут заменены на
- Тогда пусть модельПрогнозировать и восстанавливатьДля той части, которая покрыта или заменена, при расчете потерь она рассчитывается только на первом этапе.Случайно замаскировать или заменитьЧасть
Преимущество этого в том, что BERT не знает, какое слово [MASK] заменяет, и любое слово может быть заменено, например, яблоко, которое он видит, может быть замененным словом. Это заставляет модель не слишком полагаться на текущее слово при кодировании слова в текущий момент, а учитывать его контекст и даже выполнять «исправление ошибок» в соответствии с контекстом. Например, в приведенном выше примере, когда модель кодирует яблоко, в соответствии с контекстом, которым является моя собака, она должна кодировать яблоко в волосатой семантике вместо семантики яблока.
Языковая модель BERT, задача 2: прогнозирование следующего предложения
Сначала мы получаем пару предложений, которые принадлежат контексту, то есть два предложения, а затем нам нужно добавить к этим двум предложениям какие-то специальные токены:[CLS]上一句话[SEP]下一句话[SEP]
. то есть добавить[CLS]
, добавить между и в конце двух предложений[SEP]
, в частности, как показано на следующем рисунке
Видно, что два предложения на картинке выше явно непрерывны. Если есть такое слово сейчас[CLS]我的狗很可爱[SEP]企鹅不擅长飞行[SEP]
, видно, что эти два предложения не являются непрерывными. В реальном обучении мы сделаем количество этих двух случаев равным1:1
Token Embedding
это обычный вектор слов, то есть в PyTorchnn.Embedding()
Segment Embedding
Функция состоит в том, чтобы использовать информацию о встраивании, чтобы модель разделяла верхние и нижние предложения Мы даем токену предыдущего предложения все 0, а токену следующего предложения все 1, чтобы модель могла судить о начальной и конечной позициях. верхних и нижних предложений, например
[CLS]我的狗很可爱[SEP]企鹅不擅长飞行[SEP]
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Position Embedding
В отличие от Трансформера, это не тригонометрическая функция, а заученная
Multi-Task Learning
Этап предварительной подготовки BERT фактически объединяет две вышеупомянутые задачи, а затем добавляет все потери, такие как
Input:
[CLS] calculus is a branch of math [SEP] panda is native to [MASK] central china [SEP]
Targets: false, south
----------------------------------
Input:
[CLS] calculus is a [MASK] of math [SEP] it [MASK] developed by newton and leibniz [SEP]
Targets: true, branch, was
Fine-Tuning
Тонкая настройка BERT разделена на 4 типа.Следующий контент и изображения предоставлены преподавателем Национального тайваньского университета Ли Хунъи.Курсы по машинному обучению(Следующее содержимое изображено выше, объяснено ниже)
Если текущая задачаclassification, сначала добавьте символ, представляющий классификацию, в начале входного предложения[CLS]
, а затем передать вывод этой позиции в линейный классификатор и позволить ему предсказать класс. В течение всего процесса параметры линейного классификатора необходимо изучить с нуля, и можно выполнить точную настройку параметров в BERT.
Здесь г-н Ли Хунъи не упомянул одну вещь, именно поэтому используется первая позиция, то есть[CLS]
Вывод локации. Здесь я читаю некоторые блоги в Интернете и объясняю это, исходя из собственного понимания. Поскольку BERT — это Трансформер, а Трансформер — это Самовнимание, поэтому[CLS]
Вывод должен содержать полную информацию всего предложения, что не вызывает сомнений. Однако в векторе Само-Внимание ценность себя и себя на самом деле наибольшая, и теперь предполагается использованиеРезультат классифицируется, тогда этот результат будет на самом деле более ценным,иЭто еще одно слово или слово с практическим значением, которое неизбежно повлияет на конечный результат. но[CLS]
бессмысленно, просто заполнитель, поэтому даже если[CLS]
Не имеет значения, если ваше собственное значение в выводе составляет большую часть. Конечно, вы также можете объединить вывод всех слов в качестве окончательного вывода.
Если текущая задачаSlot Filling, вывод соответствующей позиции каждого слова в предложении отправляется в разные Linear, и прогнозируется метка слова. На самом деле это проблема классификации, но для каждого слова должна быть предсказана категория.
Если текущая задачаNLI (вывод естественного языка). То есть, учитывая предпосылку, а затем выдвигая гипотезу, модель должна оценить, верна ли гипотеза, неверна или неизвестна. По сути, это проблема трех категорий, аналогичная случаю 1, да.[CLS]
Результат можно предсказать
Если текущая задача QA (вопрос и ответ), например, как показано на рисунке выше, отправить в модель статью и вопрос (пример здесь относительно простой, ответ обязательно появится в статье), модель выведет два числа s, e, эти два числа означают, что ответ на этот вопрос попадает с s-го слова на eth-слово в статье. Для конкретного процесса мы можем увидеть следующую картину
Сначала пропустите вопрос и статью через[SEP]
После разделения и подачи в BERT получается желтый результат на рисунке выше. На этом этапе нам также нужно обучить два вектора, оранжевый и желтый на рисунке выше. Сначала произведите скалярное произведение оранжевого и всех желтых векторов, а затем передайте softmax, чтобы увидеть, какой вывод имеет наибольшее значение, например, как на картинке выше.Соответствующая выходная вероятность наибольшая, тогда мы считаем, что s=2
Точно так же мы берем скалярное произведение синего вектора и всех желтых векторов, и окончательный прогнозимеет наибольшую вероятность, поэтому e=3. В конечном итоге ответ s=2,e=3
Вы можете подумать, что здесь есть проблема, что, если окончательный вывод s>e, разве это не противоречие? На самом деле в некоторых обучающих наборах некоторые вопросы не имеют ответов, поэтому прогноз на данный момент может быть верным, то есть ответа нет.
Выше приведено подробное введение BERT, см. следующие статьи.
- Атака на BERT: гигантская сила и передача обучения в НЛП
- Интерпретация модели трансформатора бегущей рекуррентной нейронной сети с нуля
- Ли Хонги-Введение ELMO, BERT, GPT
ELMo
ЭЛМО этоEmbedding from Language Modelаббревиатура отнеконтролируемыйспособ предварительной подготовки языковых моделей для изучения представлений слов
Идея этой бумаги на самом деле очень проста, но эффект очень хороший. Его идея состоит в том, чтобы обучить языковую модель на большом количестве неразмеченных данных с помощью глубокой двусторонней языковой модели, как показано на следующем рисунке.
В реальной задаче для входного предложения мы используем приведенную выше языковую модель для его обработки и получения выходного вектора, поэтому это можно рассматривать как своего рода извлечение признаков. Но ELMo отличается от обычного Word2Vec или GloVe, вложение, полученное ELMo, имеет контекстную информацию.
В частности, для предложения длины N, скажем,, языковая модель вычисляет заданноепроисходит в условияхВероятность:
Традиционная модель N-грамм не может учитывать долгую историю, поэтому в настоящее время основным направлением является использование многоуровневого двунаправленного LSTM. сейчас, первый из LSTMСлой выведет скрытое состояние,в,количество слоев LSTM. Верхний слой, вероятность выходного слова получается после его софтмаксирования
Точно так же мы можем использовать обратный LSTM для вычисления вероятностей:
С помощью этого LSTM мы можем получить. Наша функция потерь представляет собой сумму этих двух LSTM.
Два LSTM имеют свои собственные параметрыи, а параметр Word Embeddingи параметр Softmaxявляется общим
ELMo Representations
за введенное слово, ELMo рассчитаетпредставление (вложение входного слова в слова, представления 2L вперед и назад)
в:
- это словоВстраивание, независимое от контекста
- , контекстно-зависимый
Чтобы использовать его для конкретной задачи нисходящего потока (DownStream), мы будем комбинировать скрытые состояния разных слоев.Параметры конкретной комбинации изучаются в соответствии с различными конкретными задачами. Формула выглядит следующим образом:
здесьявляется масштабным коэффициентом, ииспользуется для объединения выходных данных разных слоеввзвешенная комбинация. При решении конкретных задач параметры LSTMвсе фиксированы (или точно настроены), а основные параметры настройки толькои,конечно ELMo тут просто извлечение фичи, актуальная задача добавит какие-то другие сетевые архитектуры
GPT (генеративный предтренировочный преобразователь)
Параметры языковой модели, полученные с помощью GPT, не являются фиксированными, они будут корректироваться (обычно дорабатываться) в соответствии с конкретной задачей, чтобы полученное представление предложения могло лучше адаптироваться к конкретной задаче. Его идея также очень проста, используйтеОдносторонний трансформаторИзучите языковую модель, выполните неконтролируемое встраивание предложений, а затем точно настройте параметры Transformer в соответствии с конкретной задачей. Есть два основных различия между GPT и ELMo:
- Различные архитектуры моделей: ELMo — неглубокая двунаправленная RNN; GPT — многоуровневый преобразователь кодировщика.
- Различная обработка для последующих задач: ELMo добавляет встраивание слов в конкретные задачи в качестве дополнительной функции; GPT точно настраивает одну и ту же базовую модель для всех задач.
Неконтролируемая предварительная подготовка
Вот пояснение к вышесказанномуОдносторонний трансформатор. В статье Transformer упоминается, что блок Transformer, используемый Encoder и Decoder, отличается. В блоке декодера используется маскированное самовнимание, то есть каждое слово в предложении может обращать внимание только на все предшествующие слова, включая само себя, что является односторонним преобразователем. Структура Transformer, используемая GPT, предназначена для замены самостоятельного внимания в кодировщике на маскированное собственное внимание. Конкретная структура показана на следующем рисунке.
В частности, учитывая немаркированную ожидаемую библиотеку, мы обучаем языковую модель с оценками максимального (логарифмического) правдоподобия параметров:
Процесс обучения тоже очень прост, то есть n словвложение слов () плюс позиционное вложение (), а затем вводится в преобразователь, n выходов предсказывает следующее слово в позиции соответственно
Кодирование положения здесь не использует традиционный метод фиксированного кодирования Transformer, а динамически изучается.
Контролируемая тонкая настройка
После Pretraining нам также необходимо выполнить Fine-Tuning для конкретных задач. Гипотетический контролируемый набор данныхвводэто последовательность слов, вывод представляет собой категориальную метку, такие как задача классификации настроений
мы кладемВойдите в модель Transformer и получите вывод последнего момента верхнего слоя., пропустите его через один из недавно добавленных слоев Softmax (параметры) для классификации и, наконец, использовать CrossEntropyLoss для расчета потерь, чтобы настроить параметры Transformer и Softmax в соответствии со стандартными данными. Это эквивалентно оценке максимального правдоподобия:
Обычно мы должны настроить параметры так, чтобыМаксимум, но чтобы повысить скорость обучения и способность модели к обобщению, мы используем Multi-Task Learning, при этом делая его максимально правдоподобными
используется здесьВсе еще потеря (вероятность) предыдущей языковой модели, но используемые данные не являются предыдущими неконтролируемыми данными., вместо этого используйте данные текущей задачии использовать только, без необходимости меток
другие задачи
Для разных задач необходимо просто изменить формат входных данных.Например, для расчета подобия или вопроса и ответа входные данные представляют собой две последовательности.Чтобы использовать GPT, нам нужны специальные навыки, чтобы превратить два входных данных последовательности в одну входную последовательность.
- Классификация: для задач классификации модификация не требуется.
- Результат: для задач вывода можно использовать разделитель, чтобы отделить априорную гипотезу от гипотезы.
- Сходство: для проблемы подобия, поскольку модель односторонняя, но сходство не имеет ничего общего с порядком, порядок двух предложений должен быть обратным, а результаты двух входов должны быть добавлены, чтобы сделать окончательный предполагать.
- Множественный выбор: для вопросов, отвечающих на вопросы, контекст, вопрос объединяется, а ответ разделяется, а затем делается прогноз.
Проблемы с ELMo и GPT
Самая большая проблема с ELMo и GPT заключается в том, что традиционные языковые модели односторонние — мы предсказываем текущее слово на основе предыдущей истории. Но мы не можем воспользоваться последней информацией. такие как предложенияThe animal didn’t cross the street because it was too tired
. мы кодируемit
Необходимо использовать информацию как до, так и после семантики, потому что в этом предложенииit
может относиться кanimal
может также относиться кstreet
. в соответствии сtired
, делаем вывод, что это относится кanimal
. Но если положитьtired
изменить наwide
,Такit
относится кstreet
. Традиционные языковые модели могут использовать информацию только в одном направлении. Например, вперед RNN, в кодировкеit
когда он увиделanimal
иstreet
, но не виделtired
, поэтому определить нельзяit
Что это означает. Если это обратная RNN, она видит при кодированииtired
, но он его вообще не видитanimal
, поэтому он также не может знать, какойanimal
. Само-внимание Трансформера теоретически может обращать внимание на эти два слова одновременно, но, согласно предыдущему введению, чтобы использовать Трансформер для изучения языковой модели, необходимо использовать Маску, чтобы сделать его невидимым для будущей информации, чтобы он мог не решить это сомнительно
Примечание. Даже если ELMo обучает две RNN в обоих направлениях, одна RNN может смотреть только в одном направлении, поэтому она не может «одновременно» использовать информацию в обоих направлениях. Некоторые читатели могут спросить, моя RNN имеет много слоев, например, прямой RNN первого уровня кодируетit
время кодироватьanimal
иstreet
семантика, обратный RNN кодируетtired
Семантика , а затем RNN второго слоя могут видеть две семантики одновременно, а затем судитьit
Относится к животным. Теоретически это возможно, но на практике это сложно. В качестве контрпримера, теоретически, трехслойная (один скрытый слой) полносвязная сеть может выполнять любую функцию, так что нам нужно больше слоев полносвязной сети или CNN, RNN? Если объем данных не очень велик или если нет ограничений на структуру сети, то у нее есть много способов согласования, большинство из которых являются переоснащением. Однако из-за ограничений на структуру сети, таких как локальные специальные эффекты CNN, временные эффекты RNN и иерархическая структура многоуровневых сетей, на нее накладывается множество ограничений, так что она может лучше сходиться к лучшие параметры. Мы изучаем различные сетевые структуры (включая Resnet, Dropout, BatchNorm и т. д.), чтобы добавить в сеть дополнительные (предварительные) ограничения.
На следующем рисунке показано сравнение трех моделей, взятых из статьи BERT.