Fine-tuning
ปรับโมเดลให้เข้ากับงานคุณ
โมเดลฐานเก่งเรื่องทั่วไป แต่ถ้าอยากให้เก่งเฉพาะด้าน (กฎหมาย, การแพทย์, อีคอมเมิร์ซ) ให้ fine-tune ด้วยข้อมูลของคุณ
1. เตรียมข้อมูล
รูปแบบ JSONL บรรทัดละหนึ่งตัวอย่าง:
{"messages": [
{"role": "system", "content": "คุณเป็นผู้ช่วยกฎหมาย"},
{"role": "user", "content": "สัญญาเช่าต้องมีอะไรบ้าง?"},
{"role": "assistant", "content": "สัญญาเช่าควรระบุ..."}
]}
{"messages": [
{"role": "user", "content": "ผิดนัดชำระค่าเช่ามีผลอย่างไร?"},
{"role": "assistant", "content": "ตามประมวลกฎหมายแพ่ง..."}
]} 📋 ข้อแนะนำข้อมูล
- ขั้นต่ำ 100 ตัวอย่าง แนะนำ 1,000+ สำหรับผลชัดเจน
- แบ่ง train/eval 90:10 เพื่อวัดผลก่อน-หลัง
- ทำความสะอาดข้อมูล: ลบข้อมูลซ้ำ, ตัด HTML, เช็คความถูกต้อง
2. LoRA Fine-tuning (แนะนำ)
LoRA เร็วและประหยัด GPU — ฝึกเฉพาะ adapter เล็กๆ แทนทั้งโมเดล:
nara finetune \
--base-model nara-ai-7b \
--data training.jsonl \
--eval-data eval.jsonl \
--method lora \
--rank 16 \
--epochs 3 \
--learning-rate 2e-4 \
--output ./my-lora-adapter หรือผ่าน Python SDK:
from nara import finetune
result = finetune.lora(
base_model="nara-ai-7b",
train_data="training.jsonl",
eval_data="eval.jsonl",
rank=16,
epochs=3,
learning_rate=2e-4,
output_dir="./my-lora-adapter"
)
print(f"สำเร็จ! eval loss: {result.eval_loss}") 3. Full Fine-tuning
สำหรับการเปลี่ยนแปลงพฤติกรรมอย่างลึกซึ้ง (ต้องการ GPU มากกว่า):
nara finetune \
--base-model nara-ai-7b \
--data training.jsonl \
--method full \
--epochs 2 \
--learning-rate 1e-5 \
--output ./my-full-model 4. วัดผลก่อน-หลัง
เปรียบเทียบโมเดลฐานกับโมเดล fine-tuned บนชุดทดสอบเดียวกัน:
nara eval \
--model nara-ai-7b \
--eval-data eval.jsonl \
--metrics accuracy,fluency,tha-cosine
nara eval \
--model ./my-lora-adapter \
--base nara-ai-7b \
--eval-data eval.jsonl \
--metrics accuracy,fluency,tha-cosine 5. ใช้โมเดลที่ฝึกแล้ว
from nara import chat
# โหลดโมเดลฐาน + adapter
model = chat.load(
"nara-ai-7b",
adapter="./my-lora-adapter"
)
# หรือโหลดโมเดล full fine-tuned
model = chat.load("./my-full-model")
reply = model.ask("สัญญาเช่าร้านค้าต้องระบุอะไรบ้าง?")