8
правок
Изменения
add categories, example, refs
'''BERT''' (англ. '''B'''idirectional '''E'''ncoder '''R'''epresentations from '''T'''ransformers) — языковая модель, основанная на архитектуре ''[https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D1%80_(%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F) трансформер''], предназначенная для предобучения языковых представлений с целью их последующего применения в широком спектре задач [[Обработка_естественного_языка | обработки естественного языка]]. == Архитектура ==
== Модель и архитектура ==
BERT представляет собой нейронную сеть, основу которой составляет композиция ''кодировщиков'' трансформера. BERT является [[Автокодировщик | автокодировщиком]].
В каждом слое кодировщика применяется двустороннее [[Механизм_внимания | внимание]], что позволяет модели учитывать контекст с обеих сторон от рассматриваемого токена, а значит, точнее определять значения токенов.
=== Представление данных ===
[[Файл:BERT_input-repr.png|450px|thumb|right|Рис.1, представление входных данных модели]]
При подаче текста на вход сети сначала выполняется его [[Обработка_естественного_языка#.D0.9F.D1.80.D0.B5.D0.B4.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0_.D1.82.D0.B5.D0.BA.D1.81.D1.82.D0.B0 | токенизация]]. Токенами служат слова, доступные в словаре, или их составные части {{---}} если слово отсутствует в словаре, оно разбивается на части, которые в словаре присутствуют. (см. рис. 1).Словарь является составляющей модели {{---}} так, в BERT-Base<ref>[https://github.com/google-research/bert#bert Github — Google Research — BERT]</ref> используется словарь около 30,000 слов.
В самой нейронной сети токены кодируются своими [[Векторное_представление_слов | векторными представлениями]] (англ. ''embeddings''), а именно, соединяются представления самого токена (предобученные), номера его предложения, а также позиции токена внутри своего предложения. Входные данные поступают на вход и обрабатываются сетью параллельно, а не последовательно, но информация о взаимном расположении слов в исходном предложении сохраняется, будучи включённой в позиционную часть эмбеддинга соответствующего токена.
Выходной слой основной сети имеет следующий вид: поле, отвечающее за ответ в задаче ''next sentence prediction''предсказания следующего предложения, а также токены в количестве, равном входному.
Обратное преобразование токенов в вероятностное распределение слов осуществляется полносвязным слоем с количеством нейронов, равным числу токенов в исходном словаре.
== Обучение ==
=== Предобучение ===
[[Файл:BERT_pre-training.png|350px|thumb|right|Рис.2, Схема этапа предобучения BERT]]
BERT обучается одновременно на двух задачах {{---}} предсказания следующего предложения (англ. ''next sentence prediction'') и генерации пропущенного токена (англ. ''masked language modeling''). На вход BERT подаются токенизированные пары предложений, в которых некоторые токены скрыты(см. рис. 2). Таким образом, благодаря маскированию токенов, сеть обучается глубокому двунаправленному представлению языка, учится понимать контекст предложения. Задача же предсказания следующего предложения есть задача бинарной классификации {{---}} является ли второе предложение продолжением первого. Благодаря ей сеть можно обучить различать наличие связи предложений между предложениями в тексте.
Интерпретация этапа предобучения {{---}} обучение модели языку.
Интерпретация этапа fine-tuning {{---}} обучение решению конкретной задачи при уже имеющейся общей модели языка.
=== Гиперпараметры ===
Гиперпараметрами модели являются <tex>H</tex> {{---}} размерность скрытого пространства кодировщика, <tex>L</tex> {{---}} количество слоёв-кодировщиков, <tex>A</tex> {{---}} количество голов<ref>[https://arxiv.org/abs/2006.16362 Multi-Head Attention: Collaborate Instead of Concatenate]</ref> в [[Механизм_внимания | механизме внимания]].
=== Данные и оценка качества ===
Предобучение ведётся на текстовых данных корпуса BooksCorpus<ref>[https://arxiv.org/abs/1506.06724 Aligning Books and Movies: Towards Story-like Visual Explanations by Watching Movies and Reading Books]</ref> (800 млн. слов), а также на текстах англоязычной [https://www.wikipedia.org/ Википедии] (2.5 млрд. слов).
Качество модели авторы оценивают на популярном для обучения моделей [[Обработка_естественного_языка | обработки естественного языка]] наборе задач [https://gluebenchmark.com/tasks GLUE]<ref>[https://arxiv.org/abs/1804.07461 GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding]</ref>.
== Реализация ==
В [https://github.com/google-research/bert#bert репозитории] Google Research доступны для загрузки и использования несколько вариантов обученной сети в формате контрольных точек обучения модели популярного фреймворка TensorFlow<ref>[https://www.tensorflow.org/ TensorFlow]</ref>. В таблице в репозитории приведено соответствие параметров <tex>L</tex> и <tex>H</tex> и моделей. Использование моделей с малыми значениями гиперпараметров на устройствах с меньшей вычислительной мощностью позволяет сохранять баланс между производительностью и потреблением ресурсов. Также представлены модели с различным типом скрытия токенов при обучении, доступны два варианта: скрытие слова целиком (англ. ''whole word masking'') или скрытие составных частей слов (англ. ''WordPiece masking'').
Также модель доступна для использования с помощью популярной библиотеки [https://pytorch.org/ PyTorch].
=== Пример использования ===
'''import''' torch
tokenizer = torch.hub.load('huggingface/pytorch-transformers', 'tokenizer', 'bert-base-cased')
text_1 = "Who was Jim Henson ?"
text_2 = "Jim Henson was a puppeteer"
<font color=darkgreen># Tokenized input with special tokens around it (for BERT: [CLS] at the beginning and [SEP] at the end)</font>
indexed_tokens = tokenizer.encode(text_1, text_2, add_special_tokens=True)
<font color=darkgreen># Convert inputs to PyTorch tensors</font>
segments_tensors = torch.tensor([segments_ids])
tokens_tensor = torch.tensor([indexed_tokens])
with torch.no_grad():
encoded_layers, _ = model(tokens_tensor, token_type_ids=segments_tensors)
<font color=darkgreen># Mask a token that we will try to predict back with BertForMaskedLM</font>
masked_index = 8
indexed_tokens[masked_index] = tokenizer.mask_token_id
tokens_tensor = torch.tensor([indexed_tokens])
masked_lm_model = torch.hub.load('huggingface/pytorch-transformers', 'modelWithLMHead', 'bert-base-cased')
with torch.no_grad():
predictions = masked_lm_model(tokens_tensor, token_type_ids=segments_tensors)
<font color=darkgreen># Get the predicted token</font>
predicted_index = torch.argmax(predictions[0][0], dim=1)[masked_index].item()
predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]
assert predicted_token == 'Jim'
== Возможности ==
=== Преимущества ===
В отличие от прежних классических языковых моделей, BERT обучает контексто-зависимые представления. Например, [[Векторное_представление_слов#word2vec | word2vec]]<ref>[https://code.google.com/archive/p/word2vec word2vec] </ref> генерирует единственный эмбеддинг для одного слова, даже если слово многозначное и его смысл зависит от контекста. Использование BERT же позволяет учитывать окружающий контекст предложения, и генерировать различные эмбеддинги в таких случаях.
== См. также ==
# [https://arxiv.org/abs/1810.04805 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding] {{---}} Оригинальная статья
# [https://en.wikipedia.org/wiki/BERT_(language_model) BERT (language model)] {{---}} статья в англоязычной Википедии
[[Категория: Машинное обучение]]
[[Категория: Обработка естественного языка]]