Loading a Custom Model
Định nghĩa
Loading a custom model là quá trình nạp pretrained checkpoint vào một model class tự định nghĩa, sao cho phần body dùng lại weights đã học còn phần head/task-specific được khởi tạo hoặc nạp theo checkpoint phù hợp.
Cách hiểu bằng lời của tôi
Custom model class chỉ mô tả kiến trúc và forward(). Để model thật sự có tri thức pretraining, mình cần load weights từ checkpoint bằng from_pretrained(). Nếu class custom có layer mới, ví dụ token classification head cho NER, layer đó có thể chưa có weights trong checkpoint và sẽ được khởi tạo mới.
Luồng tổng quát
checkpoint name/path
-> load config
-> set num_labels, id2label, label2id
-> CustomModel.from_pretrained(checkpoint, config=config)
-> pretrained body + initialized/custom headCác bước thực hiện
1. Load hoặc tạo config
Config giữ thông tin kiến trúc và metadata cho task:
num_labelsid2labellabel2id- dropout
- model type/base architecture
Với NER, cần set label mapping trước khi load model để head có đúng số logits.
2. Gọi from_pretrained() trên custom class
Thay vì:
AutoModelForTokenClassification.from_pretrained(checkpoint)mình gọi custom class:
model = CustomModelForTokenClassification.from_pretrained(
checkpoint,
config=config,
)Ý nghĩa: Hugging Face đọc checkpoint, khớp tên parameters, nạp weights vào những layer có cùng tên/shape, và khởi tạo những layer mới nếu checkpoint chưa có.
3. Hiểu cảnh báo khi load weights
Cảnh báo thường gặp:
Some weights were not initialized from the model checkpointVới custom token classification, cảnh báo này thường không đáng sợ nếu nó chỉ nói về head mới. Head mới chưa được pretrain cho label set của mình, nên cần fine-tune.
Cảnh báo đáng chú ý hơn là:
- body weights không load được nhiều layer.
- shape mismatch ngoài phần head.
num_labelskhông khớp với checkpoint đang load lại.
4. Fine-tune sau khi load
Sau khi load:
- pretrained body đã có representation tổng quát.
- token classification head có thể còn random.
- cần train/fine-tune trên dataset NER để head học mapping từ hidden states sang labels.
Với Named Entity Recognition, cũng cần chắc rằng labels đã align đúng với token/subword trước khi train.
5. Lưu và load lại model custom
Sau khi train, lưu:
model.save_pretrained(output_dir)
tokenizer.save_pretrained(output_dir)Khi load lại, cần có:
- code định nghĩa custom model class.
- config đã lưu.
- checkpoint weights đã lưu.
- tokenizer tương ứng.
Nếu muốn load tự động bằng Auto classes ở môi trường khác, cần đăng ký custom architecture/auto class đúng cách; nếu không, Python sẽ không biết class custom nằm ở đâu.
Cần biết
from_pretrained()không chỉ tạo object; nó nạp weights từ checkpoint vào model architecture.configquyết định head có bao nhiêu nhãn và label mapping hiển thị thế nào.- Cảnh báo về head mới thường bình thường khi task label set khác checkpoint gốc.
- Tokenizer phải đi cùng checkpoint/model; tokenizer lệch có thể làm input IDs không còn đúng nghĩa.
- Với Custom Model for Token Classification, loading đúng giúp mình tận dụng pretrained body thay vì train từ đầu.
Lỗi dễ gặp
- Quên truyền
configcónum_labelsđúng. - Dùng nhầm checkpoint không khớp với body architecture.
- Tưởng cảnh báo head mới là lỗi nghiêm trọng, trong khi nó chỉ báo head cần fine-tune.
- Lưu model nhưng quên lưu tokenizer.
- Load lại custom model ở môi trường không có class definition.