typhoon-7b-neuro-cpt

LoRA adapter จากการทำ Continued Pre-Training (CPT) บน typhoon-ai/typhoon-7b ด้วยคลังภาษาไทยโดเมนประสาทวิทยา/จิตวิทยา (บทความสารคดีวิทยาศาสตร์ที่เขียนเอง + บทความ Thai Wikipedia ที่คัดกรองแล้ว)

ผลการประเมิน

เทียบกับ typhoon-ai/typhoon-7b ดั้งเดิม (ไม่ผ่าน CPT) บนชุดทดสอบเดียวกัน:

ตัวชี้วัด ก่อน CPT หลัง CPT เปลี่ยนแปลง
PPL โดเมนประสาทวิทยา (40 บล็อก) 8.830 7.442 🟢 −15.7%
PPL ภาษาไทยทั่วไป (88 บล็อก, Wikipedia) 8.034 7.024 🟢 −12.6%

ตัวเลขที่สองคือการตรวจ catastrophic forgetting — ในรอบนี้ไม่พบการลืม (ดีขึ้นทั้งคู่)

รายละเอียดการเทรน

วิธี QLoRA (NF4 4-bit + double quantization)
LoRA rank / alpha 32 / 64 (rank-stabilized, use_rslora=true)
LoRA dropout 0.05
Target modules q, k, v, o, gate, up, down (ทุก linear layer)
Learning rate 2e-5
Scheduler cosine, warmup_ratio=0.03
Weight decay / max grad norm 0.01 / 1.0
Sequence length 1024
Effective batch 8 บล็อก (8,192 token/step)
Checkpoint ที่เผยแพร่ step 200 (epoch ≈ 0.92) — จุดที่ eval_loss ต่ำที่สุด
คลังเทรน 1,746 บล็อก (~1.79M token)
GPU RTX 4060 Laptop 8GB

ทำไมถึงหยุดที่ step 200

ตั้งไว้ 15 epoch (3,285 step) แต่ eval_loss เริ่มแย่ลงต่อเนื่องหลัง step 400 และหนักขึ้นทุก epoch (step 1100 = PPL 28.9 เทียบกับ 7.4 ที่ step 200) พร้อมกับ train loss ที่ลงถึง 0.31 — เป็นลายเซ็นของ การท่องจำ (memorization) บนคลังที่เล็กเกินไปสำหรับจำนวน epoch ขนาดนั้น จึงหยุดการเทรนและเผยแพร่ checkpoint ที่ดีที่สุดแทน

⚠️ ข้อจำกัดที่ต้องอ่านก่อนใช้

  • นี่คือ base model ที่ผ่าน CPT ไม่ใช่ instruct model — เหมาะกับการ ต่อประโยค ไม่ใช่ ตอบคำถาม ยังไม่ได้ผ่าน SFT หรือ alignment ใด ๆ
  • คลังข้อมูลยังเล็ก (~1.79M token) — CPT ที่เห็นผลชัดมักต้องการระดับ 10M token ขึ้นไป ผลที่ได้จริงจึงเป็นระดับ สำนวนและคำศัพท์เฉพาะทาง มากกว่าการฝังความรู้ทั้งก้อน
  • ยังไม่ได้ตรวจสอบความถูกต้องเชิงข้อเท็จจริงของข้อความที่โมเดลสร้าง สำหรับ checkpoint นี้ โมเดลภาษาโดยทั่วไปสามารถแต่งชื่อทฤษฎี ปีงานวิจัย หรือตัวเลขที่ไม่มีอยู่จริงได้
  • ห้ามใช้เป็นแหล่งอ้างอิงทางการแพทย์หรือวิชาการโดยเด็ดขาด
  • PPL ที่ดีขึ้นวัดจาก held-out set ที่แยกระดับเอกสารก่อน pack (ไม่มี data leakage) แต่ PPL ไม่ได้รับประกันความถูกต้องของเนื้อหาที่โมเดลสร้าง

เนื้อหาส่วนที่เขียนเองถูกตรวจสอบข้อเท็จจริงเทียบกับงานวิจัยต้นทางแล้ว (ตาราง fact 48 รายการ) แต่นั่นรับประกันคุณภาพของ ข้อมูลนำเข้า เท่านั้น ไม่ได้รับประกัน ผลลัพธ์ที่โมเดลสร้าง

วิธีใช้

แบบ 4-bit (แนะนำ — ใช้ VRAM ~4.7GB พอดีกับการ์ด 8GB)

import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

quantization = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)
base = AutoModelForCausalLM.from_pretrained(
    "typhoon-ai/typhoon-7b",
    quantization_config=quantization,
    device_map={"": 0},
)
model = PeftModel.from_pretrained(base, "Datchthana/typhoon-7b-neuro-cpt")
tok = AutoTokenizer.from_pretrained("typhoon-ai/typhoon-7b")

prompt = "ความสามารถของสมองในการปรับเปลี่ยนโครงสร้างตัวเองตามประสบการณ์"
out = model.generate(
    **tok(prompt, return_tensors="pt").to(model.device),
    max_new_tokens=200,
    do_sample=True, temperature=0.7, top_p=0.9, repetition_penalty=1.15,
)
print(tok.decode(out[0], skip_special_tokens=True))

แบบ bf16 เต็ม (ต้องมี VRAM ≥ 16GB)

เปลี่ยนเป็น dtype="bfloat16", device_map="auto" แทน quantization_config ได้ แต่ถ้า VRAM ไม่พอ device_map="auto" จะ offload บางเลเยอร์ไป CPU/disk แล้วการโหลด adapter จะพังด้วย KeyError: 'base_model.model.model.model.embed_tokens' (บั๊ก prefix ซ้อนใน peft._update_offload) — กรณีนั้นให้ใช้แบบ 4-bit ข้างบนแทน

แนะนำให้ใช้ sampling parameters ข้างต้น — การใช้ greedy decoding (ค่าเริ่มต้น) ทำให้โมเดลวนพูดประโยคเดิมซ้ำ ๆ ซึ่งเป็นพฤติกรรมปกติของ base model ที่ยังไม่ผ่าน instruction tuning

ที่มาและโค้ด

โค้ดไปป์ไลน์ทั้งหมด (เตรียมข้อมูล, เทรน, ประเมิน, รวมถึงการทดลองที่ล้มเหลวก่อนหน้า): https://github.com/Datchthana1/typhoon-7b-cpt-neuro

Downloads last month
55
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Datchthana/typhoon-7b-neuro-cpt

Adapter
(14)
this model