## Title: Omówienie modelu językowego BERT (Bidirectional Encoder
Representations from Transformers) i jego podstawowych zastosowań
## Presenter: Krzysztof Nawrocki
## Date: 30.06 2025
## Participants:
Michal Mazurek (MM)
Wojciech Krzemień (WK)
Konrad Klimaszewski (KK)
Roman Shopa (RS)
Lech Raczyński (LR)
Michał Obara (MO)
Wojciech Wiślicki (WW)
Rafał Możdżonek (RM)
Krzysztof Nawrocki (KN)
## Questions/Remarks:
RS: Jak BERT radziłby sobie z językami, gdzie podział na słowa nie jest
oczywisty np. w japońskim
KN: Nie wiem, ale podejrzewam, że BERT może poradzić sobie ucząc się
statystycznie w jakim kontekście występuje jaki dany podział na słowa.
WW: Podejrzewam, że w złożonym znaku japońskim można rozpoznać części
składowe.
KK: I tokenizer i embedding layer są uczone?
KN: Embedding jest uczony z corpusu, z sąsiedztwa danego wyrazu.
Natomiast tokenizer nie jest siecią neuronową.
MM: Czy to nie jest tak, że ten samo tokenizer może być używany przez
różne modele
RM: Tak, ale bardziej zaawansowane modele mają dwie części tokenizerów.
KN: Tokenizer są różne dla różnych języków.
RS: Pytanie jak model rozpoznaje jaki to jest język w czasie
rzeczywistym. Np. jeżeli chodzi o zapożyczenia z innych języków.
KN: W przypadku Berta w fazie "douczania" używa się
Na pewno miałby problem jakby miał mieszankę językową w treningowym zbiorze.
MM:Jednym z zastosowań BERTa jest wyszukiwarka google'owska. Teraz jest
boom na Gemini. Jak to obecnie wygląda?
KN: Google nadal używa BERTA (tak się wydaje). Ale, tego nie wiemy na 100%.
RM: Podsumowania robi oczywiście Gemini.
## Odpowiedzi Gemini
Jak BERT radziłby sobie z językami, gdzie podział na słowa nie jest oczywisty np. w japońskim?
Gemini:
Doskonałe pytanie! BERT, choć opiera się na idei "tokenów" (często odpowiadających słowom lub ich częściom), radzi sobie z językami bez wyraźnych granic słów (takimi jak japoński, chiński czy tajski) dzięki zastosowaniu specjalistycznych strategii tokenizacji. Nie jest to po prostu "dzielenie po spacjach", jak w przypadku języków zachodnich.
Oto jak BERT (a właściwie jego tokenizer) radzi sobie z japońskim:
Tokenizacja Subwordowa (Subword Tokenization): To klucz do sukcesu. Zamiast dzielić tekst wyłącznie na całe słowa, tokenizery BERT dzielą go na "subwordy" (podjednostki słów). Dzięki temu model może:
Specjalistyczne Tokenizery dla Japońskiego: Dla języków azjatyckich, w tym japońskiego, stosuje się specyficzne algorytmy tokenizacji, które są trenowane na dużych korpusach tekstu japońskiego. Najpopularniejsze to:
WordPiece: Ten algorytm był używany w oryginalnym BERT. Dla japońskiego, często najpierw przeprowadza się analizę morfologiczną, a dopiero potem stosuje WordPiece.
[CLS]
私
##は
学生
##です
。
[SEP]
##
oznacza kontynuację tokenu. W tym przypadku ##は
jest traktowane jako przyrostek po "私" (ja).SentencePiece: To alternatywny algorytm, który ma przewagę, ponieważ nie wymaga wstępnej segmentacji na słowa. Uczy się on podjednostek bezpośrednio z surowego tekstu, co jest bardzo korzystne dla języków bez spacji.
_
na początku tokenu, aby wskazać, że jest to początek "słowa" lub jednostki.[CLS]
私
は
学生
です
。
[SEP]
Tokenizacja na poziomie znaków (Character-level Tokenization):Niektóre warianty BERT dla japońskiego mogą również działać na poziomie pojedynczych znaków.
[CLS]
私
は
学
生
で
す
。
[SEP]
Jak BERT na to reaguje?
Sama architektura BERT (Transformer Encoder) jest niezależna od tego, jak tekst jest tokenizowany. Dla BERT ważne jest, że na wejściu dostaje sekwencję numerycznych identyfikatorów tokenów (token IDs) oraz maskę uwagi. To, jak te identyfikatory zostały wygenerowane z surowego tekstu, jest zadaniem tokenizera.
Podsumowując:
BERT radzi sobie z językami bez oczywistego podziału na słowa, takimi jak japoński, dzięki zastosowaniu wyspecjalizowanych tokenizatorów. Te tokenizery albo wykorzystują zaawansowaną analizę morfologiczną w połączeniu z algorytmami subwordowymi (jak MeCab + WordPiece), albo uczą się podjednostek bezpośrednio z surowego tekstu (jak SentencePiece), albo w rzadkich przypadkach działają na poziomie znaków. Kluczem jest precyzyjne przygotowanie danych wejściowych, a potem standardowa architektura BERT może przetwarzać te podjednostki, aby nauczyć się kontekstowych reprezentacji.
I tokenizer i embedding layer są uczone?
Gemini:
Tak, zarówno tokenizer, jak i embedding layer są uczone (trenowane), ale w różnych fazach i w różny sposób:
Tokenizer, w kontekście modeli takich jak BERT (gdzie używa się np. WordPiece, SentencePiece, BPE), jest uczonym narzędziem.
Warstwa osadzania jest kluczową częścią samej sieci neuronowej (np. BERT) i jest uczona (trenowana) w trakcie treningu modelu językowego.
Cecha | Tokenizer (algorytm) | Embedding Layer (w modelu) |
---|---|---|
Kiedy uczony | Przed treningiem modelu językowego | W trakcie treningu modelu językowego |
Na czym uczony | Duży korpus surowego tekstu | Dane wejściowe dla modelu (token IDs) |
Czego się uczy | Słownik tokenów, zasady segmentacji tekstu | Reprezentacji wektorowych dla każdego tokena |
Wynik | Zbiór reguł segmentacji, słownik tokenów (Vocab) | Macierz wag (wektorów) dla każdego tokena w Vocab |
Mechanizm nauki | Statystyczny/algorytmiczny, heurystyczny | Optymalizacja gradientowa (backpropagation) |
Dlatego też, gdy pobierasz pre-trenowany model BERT z Hugging Face, zazwyczaj pobierasz dwie rzeczy:
Czy to nie jest tak, że ten samo tokenizer może być używany przez różne modele?
Gemini:
Tak, masz absolutną rację! Ten sam tokenizer może być, i często jest, używany przez różne modele, zwłaszcza jeśli te modele są oparte na tej samej architekturze (np. Transformer) i/lub zostały wytrenowane na podobnych danych.
Standaryzacja Wejścia: Celem tokenizera jest przekształcenie surowego tekstu w ustandaryzowaną sekwencję numerycznych identyfikatorów (token IDs), którą model neuronowy może zrozumieć. Jeśli wiele modeli oczekuje danych w tym samym formacie, jeden tokenizer może to obsłużyć.
Efektywność i Reużywalność:
Wspólne Słowniki i Reprezentacje:
"Shared Embeddings": Czasami, gdy modele są bardzo podobne (np. różne warstwy tego samego typu Transformerów), mogą nawet dzielić tę samą warstwę osadzania (embedding layer) na wejściu, co jest możliwe tylko wtedy, gdy używają tego samego tokenizera i słownika.
W bibliotece Hugging Face, bardzo często zobaczysz, że dla rodziny modeli (np. bert-base-uncased
, bert-large-uncased
, bert-base-cased
itp.), używany jest ten sam tokenizer (np. BertTokenizer
).
from transformers import AutoTokenizer
# Ten sam tokenizer jest używany dla różnych wariantów BERT:
tokenizer_bert_uncased = AutoTokenizer.from_pretrained("bert-base-uncased")
tokenizer_bert_cased = AutoTokenizer.from_pretrained("bert-base-cased") # Różni się tylko tym, że jest case-sensitive, ale mechanizm tokenizacji jest ten sam WordPiece
# Dla RoBERTa również używa się często tokenizera opartego na BPE, ale z własnym słownikiem
# i regułami, dlatego pobierasz go jako "RobertaTokenizer"
tokenizer_roberta = AutoTokenizer.from_pretrained("roberta-base")
# Ale jeśli jest to inny język, jak japoński, tokenizer będzie specyficzny:
tokenizer_japanese_bert = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese-v2")
Ważna uwaga: Chociaż ten sam tokenizer może być używany przez różne modele, zawsze należy używać tokenizera, który został wytrenowany (lub jest zgodny) z konkretnym modelem, który zamierzasz użyć. Dzieje się tak, ponieważ słownik tokenów i sposób ich generowania są fundamentalnie powiązane z tym, jak model był pre-trenowany. Niezgodność tokenizera ze słownikiem, na którym model był uczony, prowadzi do bardzo słabych wyników.
Dlatego w praktyce zawsze zaleca się ładowanie tokenizera za pomocą AutoTokenizer.from_pretrained(nazwa_modelu)
, co automatycznie zapewnia prawidłowe dopasowanie tokenizera do wybranego modelu.
Pytanie jak model rozpoznaje jaki to jest język w czasie rzeczywistym. Np. jeżeli chodzi o zapożyczenia z innych języków.
Gemini:
To jest fascynujące pytanie, które dotyka granic możliwości modeli językowych i ich wewnętrznego działania! Modele takie jak BERT nie rozpoznają języka w sensie, w jakim my, ludzie, go rozpoznajemy, czyli świadomie identyfikując strukturę gramatyczną, słownictwo czy pochodzenie. Zamiast tego, "rozpoznawanie" języka przez model jest pośrednim efektem jego treningu na ogromnych ilościach danych.
Wyjaśnijmy to na przykładach:
Tokenizacja:
Embeddings (Osadzenia):
[EMBEDDING("cat" w angielskim)]
może być blisko [EMBEDDING("kot" w polskim)]
. To pozwala modelowi na pewien poziom "rozumienia" niezależny od języka.Wagi Warstw Transformerowych:
Model nie ma "świadomości", że "manager" w polskim zdaniu to zapożyczenie z angielskiego. Traktuje je po prostu jako kolejny token.
Dla modeli jednolingwistycznych (np. polski BERT):
Dla modeli wielojęzycznych (np. mBERT, XLM-R):
Nie w sensie świadomej identyfikacji. Jeśli model jest modelem jednolingwistycznym i natrafi na zdanie z silnym "code-switching" (przełączaniem kodów językowych), np. "I had a great spotkanie
yesterday", może sobie z tym poradzić gorzej. Będzie próbował dopasować to do wzorców swojego języka treningowego, co może być trudne.
Modele wielojęzyczne radzą sobie z tym znacznie lepiej, ponieważ są trenowane na danych zawierających przełączanie języków (choć często w ramach pojedynczych dokumentów, a nie miksu w zdaniu). Ich wspólna przestrzeń embeddingów i wagi Transformerów pozwalają im na płynniejsze przechodzenie między językami, traktując je jako kontynuację tego samego kontekstu.
Model językowy nie ma wbudowanego "czujnika języka". Jego zdolność do radzenia sobie z różnymi językami (lub zapożyczeniami) wynika z:
Jednym z zastosowań BERTa jest wyszukiwarka google'owska. Teraz jest boom na Gemini. Jak to obecnie wygląda?
Gemini:
Tak, BERT jest używany przez wyszukiwarkę Google, i to od dłuższego czasu!
Google wdrożyło BERT w swojej wyszukiwarce w 2019 roku. Było to jedno z największych ulepszeń algorytmu wyszukiwania Google w ostatnich latach i zostało ogłoszone jako jedno z najważniejszych.
Głównym celem wdrożenia BERT było lepsze zrozumienie zapytań użytkowników (query understanding), zwłaszcza tych bardziej złożonych, konwersacyjnych i z dłuższym ogonem (long-tail queries).
Przed BERT Google często miał problem ze zrozumieniem niuansów językowych, kontekstu słów funkcyjnych (takich jak "do", "dla", "bez") oraz zależności między słowami w zapytaniu. BERT, dzięki swojej zdolności do rozumienia kontekstu słów w obu kierunkach (bidirectional), znacznie poprawił tę zdolność.
Przykłady wpływu BERT (podawane przez Google):
Absolutnie nie. BERT to tylko jeden z wielu zaawansowanych modeli i algorytmów, które Google wykorzystuje w swojej wyszukiwarce. Google stale rozwija i integruje nowe technologie AI i uczenia maszynowego. Po BERT wprowadzono m.in. MUM (Multitask Unified Model), który jest jeszcze bardziej zaawansowany i wielozadaniowy, zdolny do rozumienia informacji w różnych formatach (tekst, obraz) i językach, a także do odpowiadania na bardziej złożone pytania wymagające głębszego zrozumienia świata.
BERT pozostaje jednak ważnym elementem i jest używany do pewnych typów zapytań i analizy. Nowsze modele często uzupełniają lub rozszerzają możliwości BERT, a nie całkowicie go zastępują.
Podsumowując, tak, BERT jest i był kluczowym komponentem wyszukiwarki Google, znacząco poprawiającym zdolność wyszukiwarki do rozumienia złożonych zapytań użytkowników.