Trefon.
← Wszystkie notatki 8 min

Transformery encoder-only: BERT, embeddingi i rerankery

Część 2 serii o architekturach. Dwukierunkowa atencja, cel treningowy maskowanego modelowania języka (MLM) z regułą 80/10/10, dlaczego enkodery nie potrafią generować, ale nadal są właściwym narzędziem do klasyfikacji, embeddingów i rerankerów, oraz co zmieniły współczesne enkodery, takie jak ModernBERT.

Jacek Trefon
  • deep dive
  • transformer
  • architektura
  • BERT
  • embeddingi

Modele encoder-only (tylko enkoder) niczego nie piszą, a są wszędzie. Większość modeli embeddingowych stojących za wyszukiwaniem w RAG i rerankerów, które sortują jego wyniki, to enkodery. To część 2 serii o architekturach, po modelach decoder-only.

Dwukierunkowa atencja

Blok enkodera jest taki sam jak blok dekodera, czyli atencja plus MLP z połączeniami rezydualnymi i normalizacjami, z jedną różnicą: nie ma maski przyczynowej. Każdy token patrzy na każdy inny token, przed sobą i za sobą. Słowo „bank” w zdaniu „the river bank flooded” („zalało brzeg rzeki”) widzi w tej samej warstwie „river” po lewej i „flooded” po prawej.

To sprawia, że enkodery bardzo dobrze rozumieją całe wejście naraz i nie potrafią generować od lewej do prawej. Reprezentacja tokenu zależy od tokenów, których podczas generowania jeszcze by nie było.

Trening: maskowane modelowanie języka (MLM)

Nie wytrenujesz modelu dwukierunkowego do przewidywania następnego tokenu, bo model już go widzi. BERT (Devlin i in., 2019) zamiast tego ukrywa część tokenów i każe modelowi je odtworzyć:

  • wybieranych jest 15% pozycji;
  • z nich 80% jest zastępowanych tokenem [MASK], 10% losowym tokenem, a 10% zostaje bez zmian;
  • funkcja straty jest liczona tylko na wybranych pozycjach.

Podział 80/10/10 ma znaczenie. Przy inferencji model nigdy nie widzi [MASK], więc nie może się nauczyć, że uwagi wymagają tylko zamaskowane pozycje. Każdy token musi nieść użyteczną reprezentację. BERT używał też przewidywania następnego zdania; RoBERTa (Liu i in., 2019) pokazała, że można z niego zrezygnować i zamiast tego trenować model dłużej na większej ilości danych.

Ceną jest wydajność: sygnał treningowy daje tylko 15% tokenów, podczas gdy dekoder uczy się z każdej pozycji.

Gdzie są parametry

Ta sama arytmetyka co w dekoderach: 12·L·d² plus embeddingi. BERT-base, przy L = 12, d = 768 i słowniku o rozmiarze 30 522:

bloki                 12 × 12 × 768²  =  84,9M
embeddingi  (30 522 + 512 + 2) × 768  =  23,8M
razem                                 ≈ 108,8M    (opublikowane: 110M, z biasami i normalizacjami)

To jedna dziesiąta małego dekodera i po części właśnie o to chodzi. Enkodery można tanio uruchomić na milionach dokumentów.

Do czego służą enkodery

  • Embeddingi. Połącz reprezentacje tokenów w jeden wektor na tekst (pooling), zwykle przez średnią albo token [CLS]. Wytrenuj model tak, żeby podobne teksty lądowały blisko siebie. Te wektory napędzają wyszukiwanie gęste (tę stronę omawia notatka o RAG).
  • Rerankery. Cross-encoder czyta zapytanie i kandydujący fragment razem, w jednym dwukierunkowym przebiegu, i zwraca wynik trafności. Każdy token zapytania może patrzeć na każdy token fragmentu, dlatego cross-encoder jest dużo dokładniejszy niż porównanie dwóch niezależnych embeddingów i dużo droższy.
  • Klasyfikacja i ekstrakcja. Wykrywanie intencji, analiza sentymentu, rozpoznawanie encji nazwanych i wykrywanie danych osobowych (PII) to tanie, szybkie zadania, w których czytanie całego wejścia w obie strony to dokładnie to, czego chcesz.

W takich zadaniach enkoder o 100–400 mln parametrów jest często dokładniejszy w przeliczeniu na milisekundę niż promptowanie dekodera 27B.

Współczesne enkodery

Oryginalny BERT zatrzymywał się na 512 tokenach i miał wyuczone embeddingi pozycji. ModernBERT (Warner i in., 2024) przeniósł z powrotem do enkoderów ulepszenia z ery dekoderów: rotacyjne embeddingi pozycji, kontekst 8192 tokenów, naprzemienną atencję globalną i lokalną ze względu na wydajność oraz trening na dużo większej ilości danych, w tym na kodzie. Enkodery nie zniknęły; po cichu nadrobiły zaległości.

Zasady, których się trzymam

  1. Używaj enkodera do oceniania, dopasowywania i klasyfikacji, a dekodera do generowania.
  2. Wyszukuj bi-encoderem, rerankuj cross-encoderem. Tani recall, potem droga precyzja.
  3. Rób fine-tuning małych enkoderów na własnych etykietach. W wąskich zadaniach klasyfikacji kilka tysięcy przykładów na enkoderze rzędu 100 mln parametrów często wygrywa z dużym modelem promptowanym zero-shot.

Źródła: Devlin i in., BERT (NAACL 2019). Liu i in., RoBERTa (2019). Reimers i Gurevych, Sentence-BERT (2019). Warner i in., ModernBERT (2024). Liczby parametrów są policzone na podstawie opublikowanej konfiguracji BERT-base.

Masz podobny problem?

Opisz swój problem

30-minutowa rozmowa techniczna z inżynierem, który to buduje. Bez działu sprzedaży, bez slajdów.