Hướng dẫn: Self-Adapting Language Models (SALM)¶
Giới thiệu¶
SALM là paradigm mới nơi model tự thích ứng tại inference time mà không cần fine-tuning truyền thống. Vietnamese AI Framework triển khai 5 components:
| Component | Mô tả |
|---|---|
SelfRefine |
Iterative refinement: model tự đánh giá và cải thiện output |
SelfConsistency |
Multiple reasoning paths → majority voting |
AdaptiveLoRA |
Tự chọn LoRA adapter phù hợp theo task |
SinhDuLieuTuDong |
Tự sinh training data từ seed examples |
TestTimeTraining |
Adapt weights ngay tại inference time |
Self-Refinement¶
Model tự đánh giá output qua nhiều vòng lặp: Generate → Evaluate → Feedback → Refine
from vietnamese_ai import SelfRefine
def generate(prompt):
return your_llm.generate(prompt)
refine = SelfRefine(
ham_sinh=generate,
so_vong_toi_da=5,
nguong_chat_luong=0.8,
)
ket_qua = refine.chay("Viết đoạn văn về AI tại Việt Nam")
print(ket_qua["output_cuoi"])
print(f"Hoàn thành sau {ket_qua['so_vong']} vòng")
Custom evaluator¶
def my_evaluator(prompt, output):
score = 0.0
if len(output.split()) > 50:
score += 0.3
if "Việt Nam" in output:
score += 0.3
if any(c.isupper() for c in output):
score += 0.2
return {"diem": score, "chi_tiet": {"do_dai": len(output)}}
refine = SelfRefine(
ham_sinh=generate,
ham_danh_gia=my_evaluator,
so_vong_toi_da=3,
)
Self-Consistency¶
Tạo nhiều reasoning paths khác nhau rồi chọn answer xuất hiện nhiều nhất (majority voting).
from vietnamese_ai import SelfConsistency
sc = SelfConsistency(
ham_sinh=generate,
so_luong=7, # Số paths
)
# Direct mode
ket_qua = sc.chay("2 + 2 = ?")
print(f"Đáp án: {ket_qua['dap_an']}") # "42"
print(f"Đồng nhất: {ket_qua['ty_le_dong_nhat']:.0%}")
# Chain-of-Thought mode
ket_qua = sc.chay("Phân tích ưu nhược điểm của deep learning", che_do="cot")
print(f"Phân phối: {ket_qua['phan_phoi']}")
Adaptive LoRA¶
Tự động chọn LoRA adapter phù hợp dựa trên nội dung input.
from vietnamese_ai import AdaptiveLoRA
adaptive = AdaptiveLoRA(che_do="keyword")
# Đăng ký adapters cho từng task
adaptive.dang_ky_adapter(
"math", lora_math,
keywords=["tính", "cộng", "trừ", "nhân", "chia", "phương trình"]
)
adaptive.dang_ky_adapter(
"code", lora_code,
keywords=["code", "function", "class", "python", "algorithm"]
)
adaptive.dang_ky_adapter(
"translate", lora_translate,
keywords=["dịch", "translate", "english", "vietnamese"]
)
# Chọn adapter phù hợp
chon = adaptive.chon_adapter("Tính phương trình bậc 2")
print(chon[0]["ten"]) # "math"
# Kết hợp nhiều adapters
trong_so = adaptive.ket_hop_adapters("Dịch code Python sang Java")
# {"code": 0.6, "translate": 0.4}
Self-Generated Data¶
Tự sinh training data từ seed examples (Self-Instruct approach).
from vietnamese_ai import SinhDuLieuTuDong
sinh = SinhDuLieuTuDong(
ham_sinh=generate,
nguong_chat_luong=0.5,
)
# Thêm seed examples
sinh.them_giong_mau(
instruction="Tóm tắt văn bản về AI",
output="AI là lĩnh vực khoa học máy tính..."
)
sinh.them_giong_mau(
instruction="Dịch câu sau sang tiếng Anh",
output="Hello world"
)
# Sinh 50 mẫu instruction-following data
du_lieu = sinh.sinh(50, loai="instruction", chu_de="công nghệ")
for mau in du_lieu[:3]:
print(f"Instruction: {mau['instruction']}")
print(f"Output: {mau['output']}")
print(f"Điểm: {mau['diem']}")
print()
Các loại data supported¶
| loai | Mô tả |
|---|---|
instruction |
Instruction-following (Alpaca format) |
qa |
Question-Answer pairs |
classification |
Text + label pairs |
completion |
Text completion |
Test-Time Training¶
Adapt model weights ngay tại inference time.
from vietnamese_ai import TestTimeTraining
ttt = TestTimeTraining(
model=your_model,
che_do="entropy_minimization",
toc_do_hoc=0.001,
so_buoc_mac_dinh=10,
)
# Lưu trọng số gốc
ttt.luu_trong_so_goc()
# Adapt trên unlabeled test data
ket_qua = ttt.thich_ung(X_test)
print(f"Loss: {ket_qua['loss_dau']:.4f} → {ket_qua['loss_cuoi']:.4f}")
# Dự đoán với model đã adapt
du_doan = ttt.du_doan(X_test)
# Phục hồi trọng số gốc
ttt.phuc_hoi_trong_so()
Các chiến lược TTT¶
| che_do | Mô tả | Khi nào dùng |
|---|---|---|
entropy_minimization |
Giảm entropy predictions | Classification |
contrastive |
Consistency với augmented data | Robust predictions |
masked_prediction |
Predict masked features | NLP / tabular |
Kết hợp tất cả¶
from vietnamese_ai import (
SelfRefine, SelfConsistency, AdaptiveLoRA,
SinhDuLieuTuDong, TestTimeTraining
)
# 1. Sinh dữ liệu
sinh = SinhDuLieuTuDong(ham_sinh=generate)
sinh.them_giong_mau("Câu hỏi mẫu", "Trả lời mẫu")
du_lieu = sinh.sinh(100, loai="instruction")
# 2. Fine-tune với dữ liệu sinh
# model.huan_luyen(du_lieu)
# 3. Adapt tại test time
ttt = TestTimeTraining(model, che_do="entropy_minimization")
ttt.thich_ung(X_test)
# 4. Chọn adapter phù hợp
adaptive = AdaptiveLoRA(che_do="keyword")
adaptive.dang_ky_adapter("task_a", lora_a, keywords=["keyword1"])
adapter = adaptive.chon_adapter(input_text)
# 5. Self-consistency cho answer
sc = SelfConsistency(ham_sinh=generate, so_luong=5)
ket_qua = sc.chay(cau_hoi)
# 6. Self-refine để cải thiện
refine = SelfRefine(ham_sinh=generate, so_vong_toi_da=3)
final = refine.chay(ket_qua["dap_an"])