BERT
Nome: Bidirectional Encoder Representations from Transformers
Sigla: BERT
Anno di creazione: 2018
URLHomePage: https://github.com/google-research/bert
Pubblicazioni: Pre-training of Deep Bidirectional Transformers for Language Understanding; How to Fine Tune Bert for Sequence Classification?; Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks; BERT for Classification: Beyond the Next Sentence Prediction Task
Basato su: Architettura dei Transformers
Topic: Elaborazione del Linguaggio Naturale (NLP)
Modello bidirezionale, Encoder-only, implementato da Google nel 2019, basato sull'architettura transformer originale proposta in Attention Is All You Need. E' un modello pensato, by design, per essere sempre oggetto di un fine-tuning successivo, utilizzando per esempio una "testa" di classificazione o di named entity recognition.
Dataset di addestramento
Dal paper originale:
The pre-training procedure largely follows the existing literature on language model pre-training. For the pre-training corpus we use the BooksCorpus (800M words) (Zhu et al., 2015) and English Wikipedia (2,500M words). For Wikipedia we extract only the text passages and ignore lists, tables, and headers. It is critical to use a document-level corpus rather than a shuffled sentence-level corpus such as the Billion Word Benchmark (Chelba et al., 2013) in order to extract long contiguous sequences.
Obiettivi Nel Pre-training
Nel processo di addestramento originale di BERT i compiti di Masked-Language-Modeling (MLM) e Next Sentence Prediction (NSP) vengono utilizzati contemporaneamente, con un approccio multi-task.
L'obiettivo di next sentence prediction viene introdotto per avere una rappresentazione semanticamente ancora più ricca della più semplice comprensione del linguaggio fornita al modello dall'obiettivo MLM:
Many important downstream tasks such as Question Answering (QA) and Natural Language Inference (NLI) are based on understanding the relationship between two sentences, which is not directly captured by language modeling
Rappresentazione nel Pre-training auto-supervisionato

La costruzione delle sequenze di input avviene quindi avviene nel seguente modo:
- Per l'obiettivo Masked Language Model, token casuali in una sequenza vengono sostituiti con un token [MASK], e il modello viene addestrato a prevedere il token originale basandosi sul suo contesto. La funzione create_masked_lm_predictions nello script gestisce ciò selezionando i token da mascherare e preparando i token mascherati (masked_lm_ids) e le loro posizioni (masked_lm_positions). Durante l'addestramento, il modello produce previsioni per le posizioni mascherate, e la perdita viene calcolata in base a quanto bene il modello prevede i token originali (masked_lm_labels).
- Per l'obiettivo di Next Sentence Prediction, al modello vengono date coppie di frasi ed esso deve prevedere se la seconda frase segue logicamente la prima. Nello script, coppie di frasi (segmenti A e B) sono preparate con una probabilità del 50% che il segmento B segua il segmento A (is_random_next=False) o sia una frase casuale dal corpus (is_random_next=True). Il flag is_random_next serve come etichetta per questo compito. Il modello produce una previsione per questo compito binario, e la perdita viene calcolata in base all'accuratezza di queste previsioni.
Le etichette per il training sono la concatenazione di:
- Per MLM, le etichette sono gli ID dei token originali dei token mascherati. La perdita viene calcolata come l'entropia incrociata tra le probabilità predette delle posizioni mascherate e gli ID dei token veri.
- Per NSP, l'etichetta è se la seconda frase segue veramente la prima (is_random_next). La perdita è l'entropia incrociata binaria tra la previsione del modello e la relazione reale.
La codifica dei dati di training risultante (si veda il codice originale [1]) è la seguente, per la lunghezza di sequnza da 128 token:
Input Tokens (dal tokenizzatore)
[CLS] [MASK] glitter ##ed in the nearest red pool before him . gold , surely ! [SEP] but , wonderful to relate , not an irregular , shape [MASK] fragment of crude [MASK] [MASK] fresh from ##ze ' s cr ##ucible , but a bit of jewel ##er ' s hand ##ic ##raf [MASK] in the ##zzling of a plain [MASK] ring . looking at it more at ##ten ##tively [MASK] [MASK] saw that it bore the inscription [MASK] " may to cass . " like most of his [MASK] gold - [MASK] , cass was super ##sti ##tious . [SEP]
Input IDs (match col vocabolario, txt2label)
input_ids: 101 103 27566 2098 1999 1996 7205 2417 4770 2077 2032 1012 2751 1010 7543 999 102 2021 1010 6919 2000 14396 1010 2025 2019 12052 1010 4338 103 15778 1997 13587 103 103 4840 2013 4371 1005 1055 13675 21104 1010 2021 1037 2978 1997 13713 2121 1005 1055 2192 2594 27528 103 1999 1996 20838 1997 1037 5810 103 3614 1012 2559 2012 2009 2062 2012 6528 25499 103 103 2387 2008 2009 8501 1996 9315 103 1000 2089 2000 16220 1012 1000 2066 2087 1997 2010 103 2751 1011 103 1010 16220 2001 3565 16643 20771 1012 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Input Mask (concatenata nel vettore di input, motra al modello quali parti del vettore di input sono da tenere in considerazione)
input_mask: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Segment IDs (per il task di Next Sentence Prediction: gli "1" corrispondono ai token della seconda frase )
segment_ids: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Posizione Dei Token Mascherati
masked_lm_positions: 1 28 32 33 36 39 53 56 60 66 70 71 78 89 92 0 0 0 0 0
Etichette: ID dei token (MLM) e etichetta per NSP
masked_lm_ids: 2242 3238 10848 1010 3267 13675 2102 2433 2751 2062 1010 2002 1010 3507 24071 0 0 0 0 0
next_sentence_labels: 0 (0 se non segue, 1 se segue)

Viene eseguito un post-padding per assicurarsi che tutte le sequenze abbiano la stessa lunghezza, evidente nella funzione write_instance_to_example_files. In questa funzione, segment_ids rappresenta
while len(input_ids) < max_seq_length: input_ids.append(0) input_mask.append(0) segment_ids.append(0)
La perdita combinata (loss)
Durante il training le due funzioni di perdita vengono combinate ([2] ) .
Il token [CLS]
Quando BERT processa una sequenza di input, include il token speciale [CLS] all'inizio della sequenza. Se il compito è la Predizione della Prossima Frase (NSP), la sequenza di input consiste in due parti (due frasi) separate da un altro token speciale [SEP]. La sequenza ha quindi la forma: [CLS] frase1 [SEP] frase2 [SEP].
Per il compito di NSP, l'output corrispondente al token [CLS] viene passato attraverso un layer denso con attivazione tanh ([3]), seguito da un layer di classificazione che decide se la seconda frase segue logicamente la prima o se è una frase casuale. La capacità del token [CLS] di servire a questo scopo deriva dal fatto che la sua rappresentazione nascosta finale incorpora informazioni sull'intera sequenza, inclusa la relazione tra le due frasi.
Se BERT venisse addestrato esclusivamente con l'obiettivo di Modello di Lingua Mascherato (MLM) senza l'obiettivo di Predizione della Prossima Frase (NSP), la rappresentazione appresa dal token [CLS] sarebbe diversa. Senza l'obiettivo NSP, il token [CLS] non sarebbe specificamente addestrato per catturare una rappresentazione che comprende il tipo di informazioni necessarie per determinare la relazione tra due frasi.
Nell'addestramento di BERT con entrambi gli obiettivi (MLM e NSP), il token [CLS] viene utilizzato come punto di aggregazione per la rappresentazione dell'intera sequenza di input nel contesto della NSP: questo obiettivo costringe il modello a imparare una rappresentazione del token [CLS] che è informativa sul contenuto della prima frase e anche sul sua relazione con quella successiva, in questo modo arricchendosi di sfumature.
Se l'addestramento venisse condotto utilizzando solo l'obiettivo MLM, il token [CLS] sarebbe ancora presente e attraverserebbe i meccanismi di self-attention del modello, ma senza l'obiettivo NSP, non ci sarebbe una diretta necessità o incentivo per il token [CLS] di catturare e rappresentare le informazioni strutturali o relazionali tra le frasi. In tal caso, l'attenzione del modello si concentrerebbe sull'adattamento ai compiti di predizione dei token mancanti, influenzando così le rappresentazioni apprese da tutti i token, inclusi [CLS], verso gli aspetti rilevanti per tale compito. Senza un addestramento diretto che incoraggi [CLS] a catturare una rappresentazione comprensiva dell'intera sequenza o delle relazioni tra parti della sequenza, il significato specifico contenuto nella sua rappresentazione potrebbe essere limitato o meno definito.
Links
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (24/05/2019)
https://github.com/google-research/bert
How to Fine Tune Bert for Sequence Classification?
https://www.kaggle.com/discussions/questions-and-answers/86510
Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (SBERT): modello successivo a BERT con migliori risultati sui benchmark di Semantic Textual Similarity (STS)
https://discuss.huggingface.co/t/significance-of-the-cls-token/3180