Đọc ngày 2026-07-28

Kế hoạch hôm nay

Mục tiêu cần hiểu

  • Hiểu Named Entity Recognition là bài toán token-level khác gì text classification.
  • Biết multilingual Transformer hỗ trợ cross-lingual transfer như thế nào.
  • Nắm pipeline tokenizer gồm normalization, pretokenization, tokenizer model và postprocessing.
  • Hiểu cách căn chỉnh nhãn NER khi một từ bị tách thành nhiều subword.

Câu hỏi dẫn đường

  • NER khác text classification ở điểm nào?
  • Tokenizer tách subword thì nhãn token-level xử lý ra sao?
  • Cross-lingual transfer hoạt động nhờ điều gì?

Ghi chú trong khi đọc

  • Tokenizer Pipeline biến text thô thành input mà model xử lý được. Pipeline nên nhớ theo thứ tự: normalization pretokenization tokenizer model postprocessing.
  • Normalization chuẩn hóa text trước khi cắt token, ví dụ xử lý Unicode, lowercasing, strip accent hoặc chuẩn hóa khoảng trắng. Bước này quyết định những biến thể bề mặt nào được xem là giống nhau.
  • Pretokenization chia text thành các đơn vị sơ bộ như word, punctuation hoặc khoảng trắng. Với một số tokenizer đa ngôn ngữ, bước này ít phụ thuộc vào khoảng trắng hơn để hỗ trợ nhiều hệ chữ.
  • Tokenizer model học/cài đặt cách tách các đơn vị sơ bộ thành token hoặc subword, ví dụ BPE, WordPiece, Unigram/SentencePiece. Đây là nơi một từ có thể bị tách thành nhiều subword.
  • Postprocessing thêm các special tokens và tạo cấu trúc input cuối cùng, ví dụ [CLS], [SEP], attention mask, token type IDs hoặc offsets. Với NER, offsets rất quan trọng để map token/subword về span gốc.
  • Multilingual Transformer là Transformer được pretrain trên nhiều ngôn ngữ, thường dùng chung kiến trúc và tokenizer/subword vocabulary để tạo representation cho các ngôn ngữ khác nhau trong cùng một không gian.
  • Điểm quan trọng không phải model lưu từng ngôn ngữ như các “module” riêng, mà nó học các pattern có thể chia sẻ: tên riêng, cấu trúc câu, ngữ cảnh quanh entity, và quan hệ giữa token.
  • Với NER đa ngôn ngữ, multilingual Transformer giúp giảm nhu cầu tạo dataset gán nhãn riêng cho từng ngôn ngữ. Mình có thể fine-tune trên ngôn ngữ có dữ liệu tốt hơn, rồi kiểm tra khả năng transfer sang ngôn ngữ ít tài nguyên.
  • Trade-off: dùng chung capacity cho nhiều ngôn ngữ nên ngôn ngữ có ít dữ liệu pretraining hoặc khác script/domain có thể bị yếu hơn. Tokenizer cũng có thể chia một từ thành nhiều subword hơn, làm alignment nhãn NER khó hơn.
  • SentencePiece tokenizer xử lý text như chuỗi ký tự thô và học subword trực tiếp từ dữ liệu, nên không cần giả định trước về khoảng trắng như tokenizer tách từ truyền thống.
  • Với ngôn ngữ đa dạng, đây là lợi thế lớn: nhiều ngôn ngữ không tách từ bằng dấu cách rõ ràng, hoặc có morphology phong phú. SentencePiece giúp tokenizer dùng chung được cho multilingual model.
  • Trong NER, vấn đề thực tế là một word-level label có thể bị trải ra nhiều subword. Khi đó cần align nhãn: thường gán label cho subword đầu tiên và ignore các subword còn lại, hoặc propagate label tùy cách train/evaluate.
  • Transformers Model Class trong Hugging Face thường có hai phần: body là pretrained Transformer tạo hidden states, còn head là tầng task-specific biến hidden states thành logits.
  • Với token classification/NER, body như XLMRobertaModel trả về last_hidden_state có shape gần như [batch_size, sequence_length, hidden_size]. Head áp dụng lên từng token để tạo logits [batch_size, sequence_length, num_labels].
  • AutoModel thường load body/base model; AutoModelForTokenClassification load body kèm token classification head. Khi số nhãn NER thay đổi, head mới thường được khởi tạo lại theo num_labels, id2label, label2id.
  • Khi custom model class, cần giữ ba mảnh rõ ràng: config mô tả kiến trúc/labels, forward() định nghĩa dòng dữ liệu và loss, output chuẩn như TokenClassifierOutput chứa loss, logits, hidden_states, attentions.
  • Mental model cho NER: input_ids -> Transformer body -> token hidden states -> dropout + linear head -> logits từng token -> loss bỏ qua label -100.
  • zero-shot learning trong chapter này xuất hiện ở ngữ cảnh multilingual NER: train hoặc fine-tune model trên một ngôn ngữ có nhãn, rồi đem áp dụng trực tiếp cho ngôn ngữ khác chưa có nhãn task-specific.
  • Điều kiện để làm được: model đa ngôn ngữ như XLM-R đã học không gian biểu diễn chung giữa nhiều ngôn ngữ trong pretraining, nên entity pattern và token representation có thể phần nào “dịch chuyển” qua ngôn ngữ mới.
  • Đây là một dạng Transfer Learning đặc biệt: không chỉ transfer từ pretraining sang downstream task, mà còn transfer từ source language sang target language mà không fine-tune trên target language.
  • Trong NER, zero-shot transfer hữu ích khi target language ít dữ liệu gán nhãn. Ví dụ: có dataset NER tiếng Anh, fine-tune XLM-R trên tiếng Anh, rồi thử nhận diện PER/ORG/LOC trên tiếng Việt.
  • Rủi ro: nếu tokenizer xử lý target language kém, entity surface form khác nhiều, hoặc domain khác source language, performance có thể giảm mạnh. Vì vậy vẫn cần error analysis theo từng loại entity và từng ngôn ngữ.

Viết lại bằng lời của tôi

  • Zero-shot transfer giống như mượn năng lực đã học ở ngôn ngữ A để làm bài toán ở ngôn ngữ B mà chưa dạy riêng cho B. Điểm mấu chốt không phải model “biết dịch” hoàn hảo, mà là multilingual Transformer đã ép nhiều ngôn ngữ nằm gần nhau trong cùng một representation space.
  • Với NER, mình nên nhớ câu hỏi: model nhận ra “đây là tên người/tổ chức/địa điểm” nhờ pattern ngữ nghĩa và ngữ cảnh chung đến mức nào, và thất bại ở đâu khi hình thái/ngữ cảnh của ngôn ngữ mới khác nguồn train.

Điều chưa rõ

  • Zero-shot transfer khác cross-lingual transfer có fine-tuning target language ở mức metric cụ thể như thế nào?
  • Khi đánh giá NER đa ngôn ngữ, nên ưu tiên xem F1 theo entity type hay theo từng ngôn ngữ trước?

Việc cần làm