Instructions to use Datchthana/typhoon-7b-neuro-cpt with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Datchthana/typhoon-7b-neuro-cpt with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("typhoon-ai/typhoon-7b") model = PeftModel.from_pretrained(base_model, "Datchthana/typhoon-7b-neuro-cpt") - Notebooks
- Google Colab
- Kaggle
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
Model tree for Datchthana/typhoon-7b-neuro-cpt
Base model
typhoon-ai/typhoon-7b