1) Tokenizacja WordPiece dzieli tekst na podsłowa; do sekwencji dodawane są tokeny [CLS] (na początku, używany jako reprezentacja całego wejścia) i [SEP] (rozdzielający segmenty). 2) Każdy token otrzymuje sumę trzech embeddingów: token, segment (A/B), pozycyjny. 3) Sekwencja przechodzi przez stos warstw enkodera Transformera (12 lub 24), z których każda zawiera Multi-Head Self-Attention bez maski przyczynowej (atencja patrzy w obie strony) oraz feed-forward sublayer z residual connections i layer normalization. 4) Pretrening: ok. 15% tokenów jest maskowanych (z czego 80% zastępowanych [MASK], 10% losowym tokenem, 10% pozostawianych) i model przewiduje oryginał (MLM); jednocześnie model klasyfikuje czy zdanie B następuje po A (NSP). 5) Fine-tuning: na końcu dodawana jest mała warstwa zadaniowa (np. liniowa nad reprezentacją [CLS] do klasyfikacji, lub spans-prediction nad wyjściami wszystkich tokenów do QA), całość trenowana jest end-to-end z małym learning rate.
Wcześniejsze modele językowe (LSTM-LM, ELMo, GPT-1) były albo jednokierunkowe, albo łączyły dwa niezależne jednokierunkowe modele, co ograniczało jakość kontekstowych reprezentacji słów. Brakowało też uniwersalnego pretrenowanego modelu, który po fine-tuningu osiągałby najlepsze wyniki w wielu różnych zadaniach NLP bez potrzeby projektowania osobnych architektur.
Stos 12 (Base) lub 24 (Large) identycznych warstw enkodera Transformera, każda z Multi-Head Self-Attention i feed-forward sublayer.
Tokenizator subwordowy ze słownikiem ok. 30 000 elementów.
Trzy uczone tablice embeddingów sumowane jako wejście do enkodera.
Specjalny token na początku sekwencji, którego końcowa reprezentacja agreguje całą sekwencję dla zadań klasyfikacji.
Warstwa wyjściowa z wagami związanymi z embedding-table, używana w pretreningu do przewidywania zamaskowanych tokenów.
Pozycyjne embeddingi są uczone i ograniczone do 512 pozycji; dłuższe dokumenty wymagają chunking, sliding window lub przejścia na warianty long-context (Longformer, BigBird).
BERT to enkoder dwukierunkowy — nie nadaje się do autoregresywnej generacji tekstu; do generacji używaj GPT-podobnych modeli dekodera lub seq2seq (T5, BART).
Późniejsze prace (RoBERTa, ALBERT) pokazały, że NSP ma niewielki lub negatywny wpływ; preferuj warianty bez NSP lub z lepszym celem (np. Sentence-Order Prediction w ALBERT).
Token [MASK] występuje tylko w pretreningu, nie w fine-tuningu — autorzy łagodzą to schematem 80/10/10. Świadomość tego jest istotna przy modyfikacjach pretreningu.
Devlin i in. publikują BERT na arXiv (październik 2018) wraz z modelami Base/Large i kodem TensorFlow.
Facebook AI pokazuje, że BERT był undertrained; usunięcie NSP, większe batche i więcej danych dają znacznie lepsze wyniki.
Hugging Face przedstawia DistilBERT — 40% mniejszy, 60% szybszy, zachowuje 97% jakości BERT-Base.
Google przedstawia ALBERT z udostępnianiem parametrów między warstwami i zastąpieniem NSP przez Sentence-Order Prediction.
Cel 'replaced token detection' okazuje się bardziej próbkowo-wydajny niż MLM.
Google ogłasza wykorzystanie BERT do rozumienia zapytań w wyszukiwarce — jedna z największych pojedynczych zmian jakościowych w historii Search.
Złożoność czasowa: O(L · n² · d). Złożoność przestrzenna: O(L · n² + n · d + L · d²).
Głębokość stosu enkodera. BERT-Base: 12, BERT-Large: 24.
Wymiar reprezentacji wewnętrznych. Base: 768, Large: 1024.
Base: 12, Large: 16.
BERT używa stałej długości 512 tokenów (limit pozycyjnych embeddingów).
Standardowy słownik to 30 522 elementy (uncased) lub 28 996 (cased).
15% tokenów wybieranych do MLM; z tego 80% [MASK], 10% losowy, 10% bez zmian.
Wszystkie parametry są aktywne dla każdego wejścia (dense forward pass), bez routingu czy sparsity.
Self-attention i FFN są w pełni równoległe po tokenach w obrębie warstwy; bez rekurencji (w przeciwieństwie do RNN/LSTM).
Operacje to gęste mnożenia macierzy (GEMM) idealne dla tensor cores; mixed-precision FP16/BF16 daje znaczne przyspieszenie.
Oryginalny BERT był pretrenowany na Google TPU; architektura mapuje się dobrze na systoliczne MMU.