ข้ามไปเนื้อหา
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("สัญญาเช่าร้านค้าต้องระบุอะไรบ้าง?")