Dự án cá nhân - Nghiên cứu và tìm hiểu train/finetune ứng dụng LLMs

 

Tổng quan

Dự án tập trung vào việc khám phá quy trình huấn luyện (training)tinh chỉnh (finetuning) các mô hình ngôn ngữ lớn (LLMs) như GPT, Llama 2, BERT… cho các bài toán cụ thể. Mục tiêu bao gồm:

  • Hiểu rõ kiến trúc và cơ chế hoạt động của LLMs
  • Thực hành train/finetune trên nhiều loại dữ liệu khác nhau
  • Ứng dụng vào các tác vụ thực tế: Chatbot, Text Summarization, Question Answering

Công nghệ sử dụng

  • Ngôn ngữ: Python
  • Framework: PyTorch, HuggingFace Transformers, TensorFlow
  • Mô hình: GPT-2, Llama 2, BERT, T5
  • Phần cứng: Google Colab (GPU T4)

Quy trình thực hiện

1. Chuẩn bị dữ liệu

  • Thu thập dữ liệu: Crawl từ Wikipedia, OpenWebText, hoặc sử dụng dataset có sẵn (CNN/DailyMail cho summarization, SQuAD cho QA).
  • Tiền xử lý:
    • Làm sạch (remove special chars, normalize text)
    • Tokenization (sử dụng tokenizer của từng model)
    • Chia train/val/test (tỉ lệ 80/10/10)
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)

2. Huấn luyện từ đầu (Pretraining)

  • Kiến trúc model: Lựa chọn giữa GPT (Decoder-only) hoặc BERT (Encoder-only) tùy bài toán.
  • Fine-tuning Task:
    • Causal LM (GPT): Dự đoán từ tiếp theo → phù hợp text generation.
    • Masked LM (BERT): Dự đoán từ bị che → phù hợp classification, QA.
from transformers import GPT2LMHeadModel
model = GPT2LMHeadModel.from_pretrained("gpt2")
optimizer = AdamW(model.parameters(), lr=5e-5)

3. Tinh chỉnh (Finetuning)

  • Phương pháp:
    • Full Finetuning: Cập nhật toàn bộ weights của model.
    • LoRA (Low-Rank Adaptation): Chỉ train thêm một số layer → tiết kiệm bộ nhớ.
  • Ứng dụng:
    • Chatbot: Finetune GPT trên dataset chứa hội thoại.
    • Text Summarization: Finetune T5/BART trên dataset CNN/DailyMail.
# Ví dụ finetune T5 để summarization
from transformers import T5ForConditionalGeneration
model = T5ForConditionalGeneration.from_pretrained("t5-small")
inputs = tokenizer("summarize: " + text, return_tensors="pt", max_length=512, truncation=True)

4. Đánh giá hiệu suất

  • Metric:
    • Perplexity (cho language model)
    • BLEU, ROUGE (cho summarization)
    • F1, Accuracy (cho classification)
  • So sánh model:

    Model Dataset Perplexity ↓ BLEU-4 ↑
    GPT-2 (base) OpenWebText 25.3 -
    GPT-2 (ft) Custom Chat 18.7 -
    T5 (ft) CNN/DailyMail - 22.1

5. Tối ưu hóa & Triển khai

  • Tối ưu:
    • Quantization: Giảm model size bằng FP16/INT8.
    • ONNX Runtime: Tăng tốc inference.
  • Triển khai:
    • Streamlit cho demo chatbot.
    • FastAPI để tạo API service.
# Export sang ONNX
torch.onnx.export(model, inputs, "model.onnx", opset_version=11)

Kết quả đạt được

✅ Train thành công GPT-2 từ đầu trên dataset 10GB text.
✅ Finetune T5 cho bài toán summarization đạt BLEU-4 = 22.1.
✅ Xây dựng Chatbot có khả năng hội thoại tự nhiên.

Bài học kinh nghiệm

🔹 Dữ liệu chất lượng quan trọng hơn kích thước model.
🔹 LoRA/P-Tuning giúp finetune hiệu quả với ít tài nguyên.
🔹 Cần đánh giá nhiều metric để hiểu rõ ưu/nhược điểm từng model.

Hướng phát triển

➡️ Thử nghiệm Llama 2, Falcon trên multi-task learning.
➡️ Ứng dụng RAG (Retrieval-Augmented Generation) để cải thiện độ chính xác.

GitHub: Link repo dự án