BERT: differenze tra le versioni

Da Wiki AI.
Nessun oggetto della modifica
 
(25 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
{{Template modello
|NomeInglese=Bidirectional Encoder Representations from Transformers
|Sigla=BERT
|AnnoDiCreazione=2018
|URL=https://github.com/google-research/bert
|Pubblicazione=Pre-training of Deep Bidirectional Transformers for Language Understanding
|URLPubblicazione=https://arxiv.org/pdf/1810.04805.pdf
}}
Modello bidirezionale, Encoder-only, implementato da Google nel 2019, basato sull'architettura [[transformer]] originale proposta in [[Attention Is All You Need (2017)|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 Regognition (NER)|named entity recognition]].


== Varianti di BERT ==
Questa tabella riassume le principali differenze tra BERT, DeBERTa, RoBERTa e DistilBERT, includendo anche la data di introduzione:
{| class="wikitable"
! Modello !! Introduzione !! Differenze Chiave
|-
| BERT (Bidirectional Encoder Representations from Transformers) || Ottobre 2018 || Modello originale che ha introdotto l'architettura Transformer per il Natural Language Processing (NLP). Addestrato con due obiettivi: Masked Language Modeling (MLM) e Next Sentence Prediction (NSP).
|-
| DeBERTa (Decoding-enhanced BERT with Disentangled Attention) || Giugno 2020 || Miglioramento di BERT che introduce un meccanismo di attenzione "disentangled" per modellare meglio le dipendenze tra parole. Include anche un meccanismo di decodifica migliorato.
|-
| RoBERTa (Robustly Optimized BERT Pretraining Approach) || Luglio 2019 || Versione ottimizzata di BERT che utilizza un addestramento più robusto e un dataset più ampio. Elimina l'obiettivo NSP e utilizza un approccio di masking dinamico.
|-
| DistilBERT (Distilled BERT) || Ottobre 2019 || Versione più piccola e veloce di BERT ottenuta tramite "distillazione di conoscenza". Mantiene circa il 97% delle prestazioni di BERT pur essendo il 40% più piccolo e il 60% più veloce.
|}
=== Dataset di addestramento ===
Dal paper originale:<blockquote>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.</blockquote>
=== Obiettivi Nel Pre-training ===
Nel processo di addestramento originale di BERT i compiti di [[Masked-Language-Modeling (MLM)|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: <blockquote>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 </blockquote>
=== Rappresentazione nel Pre-training auto-supervisionato ===
[[File:BERT ENCODING.png|miniatura|La rappresentazione di input e output in BERT]]
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 [https://github.com/google-research/bert/blob/master/create_pretraining_data.py]) è 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)
[[File:BERT input .png|centro|miniatura|600x600px|BERT input representation]]
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 ([https://github.com/google-research/bert/blob/eedf5716ce1268e56f0a50264a88cafad334ac61/run_pretraining.py#L148] ) .
=== 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 ([https://github.com/google-research/bert/blob/eedf5716ce1268e56f0a50264a88cafad334ac61/modeling.py#L224]), 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 (pattern di coerenza o incoerenza tra le due frasi).
In particolare:
* Il token [CLS] accumula, attraverso i layer di self-attention, una rappresentazione che cattura le relazioni tra tutti gli elementi della sequenza
* Questa rappresentazione (che è un vettore di dimensione nascosta, es. 768) viene poi passata attraverso:
** Un layer denso con attivazione tanh
** Un layer di classificazione (essenzialmente una proiezione lineare seguita da softmax)
* Il layer denso con tanh ha un ruolo importante: "distilla" dalla ricca rappresentazione del [CLS] le caratteristiche più rilevanti per determinare la relazione tra le frasi. In un certo senso, impara a "pesare" diversi aspetti della similarità/coerenza, come:
** Coerenza semantica
** Continuità tematica
** Relazioni causali
** Coerenza temporale
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, <u>non ci sarebbe una diretta necessità o incentivo per il token [CLS] di catturare e rappresentare le informazioni strutturali o relazionali tra le frasi</u>. 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.
Quanto usiamo BERT per calcolare la similarità tra frasi, tipicamente calcoliamo due embedding separati (due forward pass separate) e poi li confrontiamo.
Questo è effettivamente un "transfer" non ovvio del modello:
* Durante NSP: [CLS] frase1 [SEP] frase2 [SEP] → una singola sequenza
* Durante similarity:
** Sequenza1: [CLS] frase1 [SEP] → embedding1
** Sequenza2: [CLS] frase2 [SEP] → embedding2
** Poi confrontiamo embedding1 e embedding2
Questo solleva una questione interessante: potrebbe essere che il pre-training NSP non sia in realtà il motivo principale per cui gli embedding di BERT funzionano bene per la similarity? Forse è più rilevante il pre-training MLM (Masked Language Modeling) che forza il modello a catturare il significato semantico di ogni frase indipendentemente?
'''Infatti, alcuni studi hanno mostrato che il task NSP potrebbe non essere così cruciale come si pensava inizialmente. RoBERTa, per esempio, ha rimosso NSP dal pre-training senza significative perdite di performance.'''


=== Links ===
=== Links ===
[https://arxiv.org/pdf/1810.04805.pdf BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (24/05/2019)]
[https://arxiv.org/pdf/1810.04805.pdf BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (24/05/2019)]
[https://github.com/codertimo/BERT-pytorch Implementazione in Pytorch]
https://github.com/google-research/bert


[https://arxiv.org/pdf/1905.05583.pdf How to Fine Tune Bert for Sequence Classification?]  
[https://arxiv.org/pdf/1905.05583.pdf How to Fine Tune Bert for Sequence Classification?]  
Riga 11: Riga 120:


https://discuss.huggingface.co/t/significance-of-the-cls-token/3180
https://discuss.huggingface.co/t/significance-of-the-cls-token/3180
https://ddimri.medium.com/bert-for-classification-beyond-the-next-sentence-prediction-task-93acc1412749


[[Category:Modello]]
[[Category:Modello]]
{{#seo:
            |title=BERT
            |title_mode=append
            |keywords=BERT, Transformer, NLP, Natural Language Processing, Google, Modello Linguistico, Pre-training, Fine-tuning, Encoder, Bidirectional, Masked Language Modeling, Next Sentence Prediction, Sentence Embedding
            |description=BERT (Bidirectional Encoder Representations from Transformers) è un modello di linguaggio neurale sviluppato da Google, rilasciato nel 2018. Questo modello ha rivoluzionato il campo dell'elaborazione del linguaggio naturale (NLP) grazie alla sua capacità di comprendere il contesto delle parole in una frase in modo bidirezionale. BERT è pre-addestrato su un enorme set di dati di testo e può essere fine-tuned per diversi compiti NLP come la classificazione del testo, il riconoscimento di entità nominate e la risposta alle domande.
            |image=BERT ENCODING.png
            }}

Versione attuale delle 17:04, 10 dic 2024

BERT
Nome Inglese Bidirectional Encoder Representations from Transformers
Sigla BERT
Anno Di Creazione 2018
Versione Corrente
URL https://github.com/google-research/bert
Pubblicazione Pre-training of Deep Bidirectional Transformers for Language Understanding
URL Pubblicazione https://arxiv.org/pdf/1810.04805.pdf

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.

Varianti di BERT

Questa tabella riassume le principali differenze tra BERT, DeBERTa, RoBERTa e DistilBERT, includendo anche la data di introduzione:

Modello Introduzione Differenze Chiave
BERT (Bidirectional Encoder Representations from Transformers) Ottobre 2018 Modello originale che ha introdotto l'architettura Transformer per il Natural Language Processing (NLP). Addestrato con due obiettivi: Masked Language Modeling (MLM) e Next Sentence Prediction (NSP).
DeBERTa (Decoding-enhanced BERT with Disentangled Attention) Giugno 2020 Miglioramento di BERT che introduce un meccanismo di attenzione "disentangled" per modellare meglio le dipendenze tra parole. Include anche un meccanismo di decodifica migliorato.
RoBERTa (Robustly Optimized BERT Pretraining Approach) Luglio 2019 Versione ottimizzata di BERT che utilizza un addestramento più robusto e un dataset più ampio. Elimina l'obiettivo NSP e utilizza un approccio di masking dinamico.
DistilBERT (Distilled BERT) Ottobre 2019 Versione più piccola e veloce di BERT ottenuta tramite "distillazione di conoscenza". Mantiene circa il 97% delle prestazioni di BERT pur essendo il 40% più piccolo e il 60% più veloce.

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 rappresentazione di input e output in BERT

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)
BERT input representation

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 (pattern di coerenza o incoerenza tra le due frasi).

In particolare:

  • Il token [CLS] accumula, attraverso i layer di self-attention, una rappresentazione che cattura le relazioni tra tutti gli elementi della sequenza
  • Questa rappresentazione (che è un vettore di dimensione nascosta, es. 768) viene poi passata attraverso:
    • Un layer denso con attivazione tanh
    • Un layer di classificazione (essenzialmente una proiezione lineare seguita da softmax)
  • Il layer denso con tanh ha un ruolo importante: "distilla" dalla ricca rappresentazione del [CLS] le caratteristiche più rilevanti per determinare la relazione tra le frasi. In un certo senso, impara a "pesare" diversi aspetti della similarità/coerenza, come:
    • Coerenza semantica
    • Continuità tematica
    • Relazioni causali
    • Coerenza temporale

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.

Quanto usiamo BERT per calcolare la similarità tra frasi, tipicamente calcoliamo due embedding separati (due forward pass separate) e poi li confrontiamo.

Questo è effettivamente un "transfer" non ovvio del modello:

  • Durante NSP: [CLS] frase1 [SEP] frase2 [SEP] → una singola sequenza
  • Durante similarity:
    • Sequenza1: [CLS] frase1 [SEP] → embedding1
    • Sequenza2: [CLS] frase2 [SEP] → embedding2
    • Poi confrontiamo embedding1 e embedding2

Questo solleva una questione interessante: potrebbe essere che il pre-training NSP non sia in realtà il motivo principale per cui gli embedding di BERT funzionano bene per la similarity? Forse è più rilevante il pre-training MLM (Masked Language Modeling) che forza il modello a catturare il significato semantico di ogni frase indipendentemente?

Infatti, alcuni studi hanno mostrato che il task NSP potrebbe non essere così cruciale come si pensava inizialmente. RoBERTa, per esempio, ha rimosso NSP dal pre-training senza significative perdite di performance.

Links

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (24/05/2019)

Implementazione in Pytorch

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

https://ddimri.medium.com/bert-for-classification-beyond-the-next-sentence-prediction-task-93acc1412749