Phase 07: Transformers Deep Dive

BERT Modélisation du langage masqué

GPT prédit le mot suivant. BERT prédit un mot manquant. Une phrase de différence et une demi-décennie de tout en forme d'embedding.

Type: Build

Languages: Python

Prerequisites: Phase 7 · 05 (Full Transformer), Phase 5 · 02 (Text Representation)

Time: ~45 minutes

Le problème

En 2018, chaque tâche de PNL sentiment, NER, QA, entailment a entraîné son propre modèle à partir de zéro sur ses propres données étiquetées. Il n'y avait pas de point de contrôle "comprendre l'anglais" prétrainé que vous puissiez affiner. ELMo (2018) a montré que vous pouviez pré-entraîner les emblèmes contextuels avec un LSTM bidirectionnel; cela a aidé mais n'a pas généralisé.

BERT (Devlin et coll. 2018) a demandé: et si nous prenions un encodeur transformateur, l'entraînons sur chaque phrase sur Internet, et le forçons à prédire les mots manquants du contexte des deux côtés?

Le résultat: en 18 mois, BERT et ses variantes (RoBERTa, ALBERT, ELECTRA) ont dominé tous les classements de PNL existants.

En 2026, les modèles encodés uniquement sont toujours l'outil idéal pour la classification, la récupération et l'extraction structurée. Ils fonctionnent 510x plus rapidement par jeton que les décodeurs et leurs intégrations sont l'épine dorsale de chaque pile de récupération moderne. ModernBERT (décembre 2024) a poussé l'architecture vers le contexte 8K avec Flash Attention + RoPE + GeGLU.

Le concept

!Masked language modeling: pick tokens, mask them, predict originals

Le signal d'entraînement

Prenez une phrase:the quick brown fox jumps over the lazy dog- Je suis désolé .

Masquer 15% des jetons au hasard:

input:  the [MASK] brown fox jumps [MASK] the lazy dog
target: the  quick brown fox jumps  over  the lazy dog

Exercez le modèle pour prédire les jetons originaux à des positions masquées.[MASK]à la position 1 peut utiliser brown fox jumpsC'est ce que le GPT ne peut pas faire.

Les règles du masque BERT

Parmi les 15% des jetons sélectionnés pour la prédiction:

  • 80% sont remplacés par [MASK]- Je suis désolé .
  • 10% sont remplacés par un jeton aléatoire.
  • 10% restent inchangés.

Pourquoi pas toujours ?[MASK]Parce que ...[MASK]Le modèle est formé à s'attendre à ce que la[MASK]Les résultats obtenus par le système de calcul de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position de la position

Prédiction de la phrase suivante (NSP) et pourquoi elle a été abandonnée

BERT original a également été formé sur NSP: donné deux phrases A et B, prédire si B suit A. RoBERTa (2019) l'a abolie et a montré que NSP a blessé, pas aidé.

Ce qui a changé en 2026: ModernBERT

Le papier ModernBERT 2024 a reconstruit le bloc avec des primitifs 2026:

ComponentOriginal BERT (2018)ModernBERT (2024)
PositionalLearned absoluteRoPE
ActivationGELUGeGLU
NormalizationLayerNormPre-norm RMSNorm
AttentionFull denseAlternating local (128) + global
Context length5128192
TokenizerWordPieceBPE

Et contrairement à la pile 2018, il est natif Flash-Attention. L'inférence est 23x plus rapide à la longueur de séquence 8K que DeBERTa-v3 avec de meilleurs scores GLUE.

Cas d'utilisation qui choisissent encore un codeur en 2026

TaskWhy encoder beats decoder
Retrieval / semantic search embeddingsBidirectional context = better embedding quality per token
Classification (sentiment, intent, toxicity)One forward pass; no generation overhead
NER / token labelingPer-position output, natively bidirectional
Zero-shot entailment (NLI)Classifier head on top of encoder
Reranker for RAGCross-encoder scoring, 10x faster than LLM rerankers

Faites-le

Étape 1: masquer la logique

Regardez !code/main.py- La fonctioncreate_mlm_batchReturne les identifiants d'entrée (avec des masques appliqués) et les étiquettes (uniquement dans les positions masquées, -100 ailleurs PyTorch ignore la convention de l'indice).

pythondef create_mlm_batch(tokens, vocab_size, mask_prob=0.15, rng=None):
    input_ids = list(tokens)
    labels = [-100] * len(tokens)
    for i, t in enumerate(tokens):
        if rng.random() < mask_prob:
            labels[i] = t
            r = rng.random()
            if r < 0.8:
                input_ids[i] = MASK_ID
            elif r < 0.9:
                input_ids[i] = rng.randrange(vocab_size)
            # else: keep original
    return input_ids, labels

Étape 2: exécuter la prédiction de MLM sur un petit corpus

Prenez un codeur à 2 couches + un chef MLM sur un vocabulaire de 20 mots, 200 phrases.

Étape 3: comparer les types de masques

Montrez comment la règle des trois sens rend le modèle utilisable sans [MASK]- Prédire une phrase non masquée et une phrase masquée.

Étape 4: tête de réglage

Remplacez la tête de MLM par une tête de classification sur un ensemble de données de sentiment de jouets. Seuls les têtes sont chargées; l'encodeur est gelé. C'est le modèle que suit chaque application BERT.

Utilisez-le

pythonfrom transformers import AutoModel, AutoTokenizer

tok = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
model = AutoModel.from_pretrained("answerdotai/ModernBERT-base")

text = "Attention is all you need."
inputs = tok(text, return_tensors="pt")
out = model(**inputs).last_hidden_state   # (1, N, 768)

Embedding models are fine-tuned BERT. sentence-transformersmodèles comme all-MiniLM-L6-v2Le codeur est le même, la perte a changé.

Cross-encoder rerankers are also fine-tuned BERT.Classification par paires[CLS] query [SEP] doc [SEP]L'attention bidirectionnelle entre requête et document est exactement ce qui donne aux encoders croisés leur avantage de qualité par rapport aux biencoders.

When not to pick BERT in 2026.Tout ce qui génère. L'encodeur n'a aucun moyen sensé de produire des jetons autoregressif.

La faire partir

Regardez !outputs/skill-bert-finetuner.md. Les compétences sont un réglage fin du BERT (choix de colonne vertébrale, spécifications de tête, données, évaluation, arrêt) pour une nouvelle tâche de classification ou d'extraction.

Exercices

  1. Easy.On court .code/main.pyConfirmer ~ 15% sont sélectionnés, et de ces ~ 80% deviennent [MASK]- Je suis désolé .
  2. Medium.Mettre en œuvre le masquage de mots entiers: si un mot est symbolisé en sous-words, masquer tous les sous-words ensemble ou pas. Mesurer si cela améliore la précision de MLM sur un corpus de 500 phrases.
  3. Hard.Exercer un petit BERT de 2 couches, d=64, sur 10 000 phrases d'un ensemble de données public.[CLS]Comparer avec une ligne de base uniquement décodeur à des paramètres correspondants

Les termes clés

TermWhat people sayWhat it actually means
MLM"Masked language modeling"Training signal: randomly replace 15% of tokens with [MASK], predict the originals.
Bidirectional"Looks both ways"Encoder attention has no causal mask — every position sees every other position.
[CLS]"The pooler token"A special token prepended to every sequence; its final embedding is used as the sentence-level representation.
[SEP]"Segment separator"Separates paired sequences (e.g. query/doc, sentence A/B).
NSP"Next sentence prediction"BERT's second pretraining task; shown to be useless in RoBERTa, dropped after 2019.
Fine-tuning"Adapt to a task"Keep the encoder mostly frozen; train a small head on top for the downstream task.
Cross-encoder"A reranker"A BERT that takes both query and doc as input, outputs a relevance score.
ModernBERT"2024 refresh"Encoder rebuilt with RoPE, RMSNorm, GeGLU, alternating local/global attention, 8K context.

Pour en savoir plus

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.