Всем привет! я одноклассник К
Некоторое время назад в проекте обработки естественного языка я столкнулся с некоторыми проблемами и добился некоторых успехов.Я разобрал содержимое, связанное с BERT, и поделился им со всеми, надеясь помочь вам.
если ты правобработка естественного языкаЕсли вас заинтересовала статья, возможно?《НЛП-учебник по примерам》имейте то, что хотите
Если вы ищете некоторыеЗавершенныйСвязанныйПрактический случайДля справки вы можете найти?《100 случаев глубокого обучения》найти ременьисходный код и данныеФактический боевой случай, глубокое обучение Xiaobai рекомендует начинать с?《Xiaobai Введение в глубокое обучение》Изучите эту колонку!
Эта статья была добавлена? Проект искусственного интеллекта Python, От новичка в Python до бога ИИ — все необходимые знания есть на моем GitHub:GitHub.com/Поехали, пошли/py слишком темно….
моя среда:
- Регион: Python3
- Среда глубокого обучения: TensorFlow2.4.1
- Компилятор: Jupyter Lab
Что такое БЕРТ?
BERT (Bidirectional Encoder Representation from Transformers) — технология, предложенная Google в 2018 году.модели НЛП, которая стала самой прорывной технологией в области НЛП за последние годы. Модель BERT в основном принимает структуру кодировщика самого оригинального трансформатора.
-
бумага:«BERT: предварительная подготовка глубоких двунаправленных преобразователей для понимания языка»
-
структура: Принята структура Encoder Transformer, но структура модели глубже, чем у Transformer. Кодер-трансформер содержит 6 блоков кодировщика, базовая модель BERT содержит 12 блоков кодировщика, а большая модель BERT содержит 24 блока кодировщика.
-
тренироваться: Обучение в основном делится на два этапа: этап предварительной подготовки и этап тонкой настройки. Этап предобучения аналогичен Word2Vec, ELMo и т. д. Модель предобучения получается путем обучения на большом наборе данных (модель предобучения может быть вызвана напрямую). Этап тонкой настройки — это в основном тонкая настройка, необходимая для последующего перехода к другим задачам (это та часть, которую мы хотим выполнить), например, к классификации текста, маркировке частей речи, системам ответов на вопросы и т. д. BERT может быть подстраивается под разные задачи без подгонки структуры.
-
Предтренировочное задание 1: Первая предтренировочная задача для BERTMasked LM, случайным образом охватывать часть слов в предложении, а затем использовать контекстную информацию для одновременного прогнозирования охватываемых слов, чтобы можно было лучше понять значение слов в соответствии с полным текстом. Маскированный LM находится в центре внимания BERT.
-
Предтренировочное задание 2: вторая предтренировочная задача BERT – это прогнозирование следующего предложения (NSP), задача прогнозирования следующего предложения. Эта задача в основном предназначена для того, чтобы модель могла лучше понять взаимосвязь между предложениями.
На рисунке выше представлена структурная схема BERT, рисунок слева представляет процесс предварительной подготовки, а рисунок справа — процесс тонкой настройки для конкретных задач.
Что касается приведенного выше описания, то его достаточно, чтобы понять, что происходит на начальном этапе. Тратьте меньше времени на изучение самых важных вещей и будьте более продуктивными.
Вход в BERT
Входные данные для BERT могут состоять из пары предложений (предложение A и предложение B) или одного предложения. В то же время BERT добавляет несколько специальных флагов:
- Флаг [CLS] ставится в начале первого предложения, а вектор представления C, полученный с помощью BERT, может использоваться для последующих задач классификации.
- Флаг [SEP] используется для разделения двух входных предложений, таких как входные предложения A и B, а флаг [SEP] следует добавлять после предложений A и B.
- Флаг [MASK] используется для покрытия некоторых слов в предложении.После покрытия слов с помощью [MASK] вектор [MASK], выводимый BERT, используется для предсказания того, что это за слово.
Давайте посмотрим, что происходит на примере (что происходит внутри, когда мы вводим текст)
Предположим, дано два предложения"my dog is cute"
и"he likes palying"
как входной образец
БЕРТ обратится к"[CLS] my dog is cute [SEP] he likes play ##ing [SEP]"
. В BERT используется метод WordPiece, который разбивает слова на подслова (SubWord), а некоторые слова отделяются от корня, например"palying"
станет"paly"
и"##ing"
.
После того, как BERT получает предложение для ввода, ему необходимо преобразовать слова предложения в Embedded, а Embedding представлен буквой E. В отличие от Transformer, встраивание ввода BERT получается путем добавления трех частей: встраивания токена, встраивания сегмента и встраивания позиции.
-
Token Embedding
: встраивание слов, таких как [CLS] собака и т. д., выученных в процессе обучения. -
Segment Embedding
: Он используется, чтобы различать, принадлежит ли каждое слово предложению A или предложению B. Если вводится только одно предложение, используется только EA, и оно изучается посредством обучения. -
Position Embedding
: Позиция, в которой появляется закодированное слово. В отличие от Transformer, который использует фиксированную формулу для расчета, встраивание позиции BERT также получается путем обучения. В BERT предполагается, что самое длинное предложение равно 512.
Соответствующий код выглядит следующим образом:
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
test_sentence = 'my dog is cute'
max_length = 20
bert_input = tokenizer.encode_plus(test_sentence,
add_special_tokens = True, # add [CLS], [SEP]
max_length = max_length, # max length of the text that can go to BERT
pad_to_max_length = True, # add [PAD] tokens
return_attention_mask = True, # add attention mask to not focus on pad tokens
truncation=True)
bert_input
{'input_ids': [101, 8422, 13030, 8310, 12322, 8154, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
-
input_ids
: соответствующий идентификатор серии токенов в словаре, форма (batch_size, sequence_length); -
token_type_ids
: это идентификатор предложения, соответствующего токену, форма (batch_size, sequence_length); -
attention_mask
: значение каждого элемента равно 0 или 1, не обращайте внимания на токен заполнения, а форма (размер_пакета, длина_последовательности).
Предварительная тренировка BERT
После того, как BERT вводит встраивание слов в предложение, модель обучается с помощью предварительного обучения, которое имеет две задачи.
Первый — Masked LM, который случайным образом заменяет некоторые слова на [MASK] в предложении, а затем передает предложение в BERT для кодирования информации о каждом слове и, наконец, использует информацию о кодировании T[MASK] из [MASK] для прогнозирования. правильность позиции слово.
Второй — это предсказание следующего предложения, ввод предложений A и B в BERT, предсказание того, является ли B следующим предложением A, и использование закодированной информации C из [CLS] для предсказания.
Процесс предварительной подготовки BERT можно представить на следующем рисунке.
BERT для конкретных задач НЛП
Предварительно обученную модель BERT можно настроить (этап тонкой настройки), когда она впоследствии будет использоваться для конкретных задач NLP, а модель BERT можно применять к множеству различных задач NLP, как показано на следующем рисунке.
-
Задание на классификацию пар предложений: Например, вывод на естественном языке (MNLI), оценка семантической эквивалентности предложений (QQP) и т. д., как показано на рисунке (a) выше, два предложения должны быть переданы в BERT, а затем выходное значение C из [CLS] используется для классификации пар предложений.
-
задание на классификацию одного предложения: Например, анализ тональности предложения (SST-2), оценка приемлемости синтаксиса предложения (CoLA) и т. д., как показано на рисунке (b) выше, необходимо ввести только одно предложение, нет необходимости использовать [ SEP], а затем также используйте [CLS]. Выходное значение C классифицируется.
-
вопрос и ответ задание: Например, в наборе данных SQuAD v1.1 образец представляет собой пару предложений (вопрос, абзац), вопрос представляет собой вопрос, абзац представляет собой фрагмент текста из Википедии, а абзац содержит ответ на вопрос. Цель обучения — найти начальную позицию (Начало, Конец) ответа в Абзаце. Как показано на рисунке (c) выше, вопрос и абзац передаются в BERT, и BERT прогнозирует позиции начала и конца на основе вывода всех слов в абзаце.
-
задача пометить одно предложение: Например, распознавание именованных объектов (NER), введите одно предложение, а затем предскажите категорию слова в соответствии с выходными данными T BERT для каждого слова, независимо от того, принадлежит ли оно к Человеку, Организации, Местоположению, Разному или Другому (не названное существо).
В следующей статье будет объяснено применение BERT в классификации текстов.
Справочная статья
- АР Вест V.org/PDF/1810.04…
- woohoo.brief.com/afraid/46 стоит 208 из 4…
- обнимаю test.co/docs/sudden-release…
- medium.com/AT и ROS/Features…
Наконец, я пришлю вам копию.Помогите всем получить структуру данных, предлагаемую BAT и другими производителями первого уровня, написанный большими парнями из Google и Ali, очень полезен для студентов, у которых слабые алгоритмы или которые нуждаются в улучшении (код извлечения: 9go2):
Заметки Google и Ali по чистке Leetcode
и я отсортировал7 000+ электронных книг с открытым исходным кодом, всегда есть книга, которая может вам помочь ? (код извлечения: 4eg0)