Chuyên đề bổ sung

Giải phẫu BERT

Kiến trúc Encoder-only (như BERT, RoBERTa, ELECTRA, DeBERTa) đi theo một triết lý hoàn toàn ngược với các model dịch máy (Enc-Dec) hay LLM (Decoder-only) mà bạn đang dùng: không sinh từ, chỉ hiểu sâu. Chuyên đề này giải phẫu thuật toán Masked Language Modeling (MLM), sự tiến hóa hậu BERT và sức mạnh của ngữ cảnh hai chiều thực sự.

Bổ sung cho Module 07 Viết riêng theo câu hỏi 13/08 (Term Verifier & NER) của legion

1 Nghịch lý của việc sinh từ (Autoregressive)

Mục tiêu

  • Hiểu điểm mù của LLM (Decoder-only) khi làm tác vụ đọc hiểu phân tích.
  • Tại sao "đọc từ trái sang phải" lại làm mất một nửa ngữ cảnh.

Khi bạn dùng LLM (như Llama, GPT) để phân loại văn bản hay trích xuất thực thể, mô hình buộc phải đọc từ trái sang phải qua cơ chế Causal Masking. Tức là, khi nó xử lý đến từ thứ i, nó tuyệt đối không được phép nhìn thấy từ thứ i+1. Điều này hoàn toàn hợp lý nếu mục tiêu của nó là dự đoán từ tiếp theo (sinh văn bản). Nhưng nếu mục tiêu là hiểu trọn vẹn cả câu, đó lại là một sự kìm hãm nhân tạo.

Decoder-only (Causal) Apple is a fruit? Khi xử lý chữ "Apple", model CẤM được nhìn đoạn sau là "fruit" hay "company" Encoder-only (Bidirectional) Apple is a fruit? Mọi chữ nhìn thấy mọi chữ khác CÙNG LÚC. Embedding của "Apple" gom được nghĩa của "fruit".
Ngữ cảnh hai chiều. Encoder-only (như BERT) dỡ bỏ lệnh cấm "không được nhìn về tương lai". Embedding của chữ "Apple" ở layer cuối cùng đã chứa đựng thông tin của toàn bộ các chữ phía sau nó.

2 Thuật toán Masked Language Modeling (MLM)

Làm sao để dạy một model hiểu cả 2 chiều? Nếu ta bắt nó đoán từ tiếp theo như LLM, bài toán sụp đổ (vì nó đã được phép nhìn xuyên thấu từ tiếp theo rồi — đó là gian lận!). Thuật toán MLM (học ngôn ngữ qua việc che giấu) là lời giải thiên tài của Google năm 2018:

  1. Lấy một câu bình thường: Chàng vung thanh [kiếm] chém đứt gốc cây.
  2. Chọn ngẫu nhiên 15% số token để giấu đi, thay bằng token đặc biệt [MASK].
  3. Bắt model dựa vào toàn bộ ngữ cảnh xung quanh để đoán lại chính xác từ đã bị che.
Chàng vung thanh [MASK] chém cây Encoder Layers (Self-Attention 2 chiều) Dự đoán: kiếm
Học kiểu điền vào chỗ trống (Cloze task). Loss chỉ tính trên các token bị MASK. Nhờ bài toán này, model buộc phải học mối quan hệ sâu sắc giữa "vung", "thanh" (ngữ cảnh trước) và "chém", "cây" (ngữ cảnh sau) để điền đúng từ "kiếm".

Bẫy của MLM (Mismatch)

Vì token [MASK] chỉ xuất hiện lúc train, còn lúc inference (đưa vào thực tế) câu văn hoàn toàn bình thường, không hề có [MASK]. Điều này tạo ra sự lệch pha (mismatch). Để chữa cháy, trong 15% token được chọn để test, BERT không che toàn bộ bằng chữ MASK:

  • 80% biến thành [MASK] thực sự.
  • 10% đổi thành một từ ngẫu nhiên (ép model không được lười biếng mà phải luôn kiểm tra lỗi sai ngữ cảnh).
  • 10% giữ nguyên từ gốc (để model học cách tự tin khẳng định từ này đã đúng và giữ nguyên ý nghĩa của nó).

3 Token [CLS] và Cơ chế Classification

Bạn không thể dùng BERT để dịch văn bản (vì nó không có Decoder để nhả từng từ). Vậy đầu ra của nó dùng để làm gì? Nó dùng để phân loại (Classification), trích xuất (NER), hoặc làm Term Verifier / Embedding Database như trong dự án của bạn.

Bí quyết để BERT tóm tắt được nghĩa của cả một câu nằm ở một token đặc biệt luôn được chèn tự động vào đầu mỗi sequence: [CLS] (Classification).

[CLS] Phim này rất tệ Tiêu cực Token [CLS] không mang nghĩa vật lý. Trong quá trình self-attention, nó đóng vai trò như một "cái rổ" gom mọi ý nghĩa của toàn bộ các từ trong câu lại.
Hút cạn ý nghĩa. Thông qua Bidirectional Self-attention, token [CLS] nhìn thấy mọi chữ trong câu và "hút" toàn bộ ý nghĩa của câu vào vector embedding của chính nó. Cuối cùng, ta chỉ việc cắm một lớp Linear Layer (phân loại) đơn giản duy nhất lên trên vector đầu ra của [CLS] để phân loại (Sentiment, Spam, Topic...).

4 Khi nào nên dùng BERT?

Trong thời đại LLM thống trị, nhiều người tưởng kiến trúc Encoder-only đã chết. Sự thật là BERT (và các bản nâng cấp như RoBERTa, DeBERTa, BGE-M3) vẫn sống cực khỏe vì nó là vua của tốc độ và độ chính xác phân tích chuyên biệt.

Tác vụDùng LLM (Llama, GPT)Dùng BERT / Encoder-only
Dịch thuật, Tóm tắtTuyệt vời (Generative)Không làm được (Không có thẻ Decoder)
RAG (Vector Database)Chậm, tốn kém, vector lỏng lẻoTiêu chuẩn vàng (BGE-M3, MiniLM)
Phân loại Cảm xúc / ToxicChậm, phải parse JSONChính xác tuyệt đối, cắm Linear layer
Term Verifier (Tìm thực thể)Dễ bị ảo giác (hallucination)Gắn tag NER cực nhanh và chuẩn xác
Chi phí & Tốc độCần GPU lớn (GBs), chậm (từng token)Chạy tốt trên CPU (vài trăm MB), 1 pass tức thì

Case Study: Ý tưởng Term Detector của bạn

Bạn từng đặt câu hỏi về việc dùng embedding làm term detector/verifier (memo 13/08). Nếu bạn bắt một LLM đọc câu để "kiểm tra xem có từ Tuấn Dao không", nó rất chậm vì phải lặp lại cơ chế sinh AR. Nhưng nếu bạn dùng một mô hình Encoder-only mỏng (như DeBERTaV3-small):

  • Bạn chỉ cần chạy 1 lượt forward duy nhất.
  • Lấy embedding đầu ra của từng token (hoặc span) đem so cosine similarity với vector chuẩn của thuật ngữ "Tuấn Dao".
  • Bạn có ngay một chiếc Radar siêu tốc, chính xác cao, chi phí tính toán cực rẻ để chèn thẳng vào giữa pipeline dữ liệu mà không làm nghẽn cổ chai (bottleneck) hệ thống.

5 Tiến Hóa Hậu BERT: RoBERTa, ELECTRA & DeBERTaV3

BERT (2018) mở đường nhưng mang theo 3 điểm nghẽn lớn: (1) Loss chỉ tính trên 15% token bị che (85% phép tính mỗi bước không sinh tín hiệu học trực tiếp), (2) bài toán Next Sentence Prediction (NSP) quá dễ nên phản tác dụng, và (3) cộng trực tiếp vector vị trí vào vector từ làm nhiễu nội dung. Ba hậu duệ quan trọng nhất đã giải quyết triệt để từng điểm nghẽn này:

Kiến trúc Đột phá toán học & huấn luyện Hiệu quả thực chiến (NER / Verifier)
BERT (2018) Static MLM (che 15% cố định lúc tiền xử lý) + Next Sentence Prediction (NSP). Nền tảng chuẩn, nhưng lãng phí 85% ngân sách gradient mỗi batch.
RoBERTa (2019) Bỏ NSP; chuyển sang Dynamic Masking (mỗi epoch che vị trí khác nhau) + batch lớn. Tăng mạnh F1 trên GLUE/NER mà không đổi một dòng kiến trúc suy luận.
ELECTRA (2020) Thay MLM bằng Replaced Token Detection (RTD): một Generator nhỏ điền từ giả vào chỗ trống, còn Discriminator (mô hình chính) phân loại nhị phân trên 100% token xem token nào là thật/giả. Kèm Factorized Embedding ($E=128 \to H=256$). Học nhanh gấp ~4× ở quy mô nhỏ! Trong Lò Luyện Giải Phẫu, electra-small chỉ tốn 13.7M tham số nhờ tách chiều từ vựng $E=128$ khỏi chiều ẩn $H=256$.
DeBERTaV3 (2021) Kết hợp Disentangled Attention (tách riêng vector nội dung $C$ và vị trí tương đối $P$: tính 3 cặp $C\to C, C\to P, P\to C$) với mục tiêu RTD của ELECTRA + Gradient-Disentangled Embedding Sharing. Vua của các bài toán đọc hiểu tinh vi, phân biệt ranh giới thực thể (Span NER) và kiểm chứng thuật ngữ (Term Verifier).

Liên kết trực tiếp với Lò Luyện Giải Phẫu

Nếu bạn mở Module 03 của Lò Luyện Giải Phẫu, bạn sẽ thấy bảng kiểm toán tham số thực tế giữa bert-base-multilingual-cased (177.9M params, riêng bảng embedding ngốn 91.8M) và google/electra-small-discriminator (13.7M params, bảng embedding chỉ 3.9M nhờ chiếu $V\times 128 \to 256$).

6 Phòng Thí Nghiệm: Mô Phỏng MLM & Cosine Term Radar

Trực tiếp thử nghiệm sự khác biệt giữa Causal Attention (1 chiều) và Bidirectional Attention (2 chiều) trên các câu nhập nhằng ngữ cảnh (đa nghĩa / tên riêng thực thể) cùng quy tắc biến đổi 80-10-10 của MLM:

🔬 LAB TƯƠNG TÁC: NGỮ CẢNH HAI CHIỀU & COSINE TERM RADAR
Chế độ Attention:

Nhấn vào các token bên dưới hoặc đổi vế sau của câu để xem vector biểu diễn của thuật ngữ thay đổi tức thời:

Radar Cosine Similarity tại vị trí thuật ngữ mục tiêu:

Tự kiểm tra

1 · Tại sao BERT không thể dùng để dịch máy như HachimiMT?

Vì nó không có khối Decoder (như mô hình Enc-Dec) và cũng không được huấn luyện kiểu sinh từ tuần tự (như Llama). BERT xử lý và xuất ra mọi vector cùng một lúc, nó không biết độ dài output là bao nhiêu và không biết cách nhả ra từng từ nối tiếp nhau.

2 · Để so sánh độ tương đồng ý nghĩa của 2 câu bằng BERT, ta làm gì?

Đưa độc lập cả 2 câu chạy qua BERT. Lấy vector embedding tương ứng của token [CLS] ở mỗi câu. Dùng Cosine Similarity (đã học ở Module 05) để đo khoảng cách góc giữa 2 vector này. (Cách tốt hơn là dùng mô hình Bi-Encoder như SBERT/BGE được fine-tune chuyên cho việc này).

3 · Nếu 15% token luôn biến thành chữ MASK lúc train, model có học được từ vựng thật không?

Có, vì 85% token còn lại vẫn là chữ thật và đóng vai trò làm ngữ cảnh. Hơn nữa, với kho dữ liệu khổng lồ, một từ bị che ở câu này sẽ xuất hiện làm ngữ cảnh ở hàng nghìn câu khác. Đó cũng là lý do vì sao người ta cần 10% trong số bị che được giữ nguyên gốc để model không "quên" mặt chữ.

4 · Tại sao ELECTRA nhỏ (13.7M params) lại hội tụ nhanh hơn BERT truyền thống rất nhiều?

Vì BERT chỉ tính hàm mất mát (loss) trên 15% vị trí bị che trong câu, còn ELECTRA dùng bộ phân biệt (Discriminator) dự đoán nhãn thật/giả trên 100% số token của câu, đồng thời nén bảng từ vựng bằng Factorized Embedding ($E=128 \to H=256$).