chayenlm-1b / README.md
Chakron2006's picture
Update README.md
84f2596 verified
metadata
license: apache-2.0
language:
  - th
base_model:
  - google/gemma-3-1b-it
pipeline_tag: text-generation
library_name: adapter-transformers

language: th license: apache-2.0 tags:

  • thailm
  • chatbot
  • instruction-following
  • fine-tuned
  • gemma
  • chayenlm pipeline_tag: text-generation

ChaYenLM (ชาเย็นLM) 🧊🇹🇭 - เพื่อนซี้ AI สไตล์ไทยๆ กวนๆ แต่จริงใจ!

...(เนื้อหา README ที่เหลือ)...

ChaYenLM (ชาเย็นLM) 🧊🇹🇭 - เพื่อนซี้ AI สไตล์ไทยๆ กวนๆ แต่จริงใจ!

[สถานะปัจจุบัน: กำลังพัฒนาอย่างเมามันส์! 🔥] (เวอร์ชั่นปัจจุบัน: v3 - จูนบน Dataset ~130 ตัวอย่าง)

ChaYenLM คือไรวะเพื่อน? 🤔

ChaYenLM ไม่ใช่แค่ Chatbot ธรรมดาๆ นะเว้ย แต่มันคือ เพื่อนซี้ AI ที่ออกแบบมาเพื่อคุยกับมึง (โดยเฉพาะคนไทย!) ด้วยภาษาบ้านๆ เป็นกันเอง เหมือนนั่งจิบชาเย็นคุยกับเพื่อนสนิท ไม่มีศัพท์แสงยากๆ ไม่ต้องเกร็ง เน้นฮา ปนสาระนิดๆ (มั้ง?) 🤣

เป้าหมายหลัก: ช่วยเหลือ ให้กำลังใจ ตอบคำถาม (โดยเฉพาะเรื่องโค้ดเบื้องต้น, การเรียน) แบบเพื่อนคุยกัน ไม่ใช่ AI เจ้ายศเจ้าอย่าง!

พัฒนาโดย: [ใส่ชื่อมึง หรือชื่อทีม/บริษัทสตาร์ทอัพของมึงตรงนี้] - CEO สมาธิสั้น ผู้มีความฝันอยากสร้าง AI ไทยที่เข้าถึงง่าย และคุยรู้เรื่องจริง!

จุดเด่น (ที่พยายามจะเป็น) 😎

  • ภาษาไทยสไตล์เพื่อนซี้: คุยกันเอง กวนตีนได้นิดๆ แต่จริงใจนะเว้ย! (พยายามปรับปรุงอยู่!)
  • เข้าใจง่าย: อธิบายเรื่องยาก (เช่น โค้ด) ให้เห็นภาพ ไม่ต้องปีนกระไดฟัง
  • เน้นช่วยเหลือ: ตอบคำถามทั่วไป การบ้านเบื้องต้น ช่วยคิดไอเดีย ให้กำลังใจ
  • พัฒนาต่อเนื่อง: กู (และ CEO) กำลังป้อน Dataset เพิ่มเรื่อยๆ หวังว่ามันจะเก่งขึ้น และเพี้ยนน้อยลง! 🤣

ข้อจำกัด / คำเตือน ⚠️

  • ยังอยู่ในช่วงพัฒนา: ตอนนี้ (v3) มันยัง เพี้ยนๆ และมีอาการหลอน (Hallucination) อยู่เยอะนะเพื่อน! อย่าเพิ่งเชื่อคำตอบมัน 100% โดยเฉพาะข้อมูลเฉพาะทาง (เช่น วิธีทำไข่เจียว, หนังผี 🤣)
  • Dataset ยังน้อย: ความสามารถและสไตล์ยังไม่นิ่ง เพราะ Dataset ยังมีแค่ร้อยกว่าตัวอย่าง
  • ไม่ได้เก่งทุกเรื่อง: เน้นคุยเล่น ให้กำลังใจ ตอบคำถามง่ายๆ ถ้าเรื่องซับซ้อนมากๆ อาจจะยังตอบไม่ได้ดี
  • ไม่เหมาะกับงาน Critical: ห้ามเอาไปใช้ตัดสินใจเรื่องสำคัญเด็ดขาด! ใช้คุยเล่นๆ แก้เหงาไปก่อนนะเพื่อน

ข้อมูลทางเทคนิค (สำหรับคนอยากรู้) 🤓

  • Base Model: google/gemma-3-1b-it
  • เทคนิคการจูน: QLoRA (4-bit quantization) เพื่อให้รันบนทรัพยากรจำกัดได้
  • Dataset: สร้างขึ้นเอง (Instruction/Output) สไตล์ ChaYenLM ภาษาไทย (ปัจจุบัน ~130 ตัวอย่าง)
  • Framework: Transformers, PEFT, bitsandbytes, TRL
  • Hardware (ตอนเทรน): Google Colab (GPU T4)

วิธีใช้งาน (เบื้องต้น) 🚀

(สำคัญ: นี่คือ LoRA Adapter นะเว้ย ไม่ใช่โมเดลเต็มๆ! ต้องโหลด Base Model มาก่อน แล้วค่อยเอา Adapter ไปแปะทับ)

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

# --- 1. กำหนด Model ID และ Adapter Path ---
base_model_id = "google/gemma-3-1b-it"
adapter_id = "your-username/your-chayenlm-repo-name" # <<<--- ใส่ Path Repo Hugging Face ของมึง!

# --- 2. เคลียร์แรม (Optional) ---
gc.collect()
torch.cuda.empty_cache()
gc.collect()

# --- 3. โหลด Base Model (4-bit) ---
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)
base_model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    quantization_config=quantization_config,
    device_map="auto"
)

# --- 4. โหลด Tokenizer (จาก Adapter Repo) ---
# (ควรจะโหลดจาก Adapter Repo ถ้า Push Tokenizer ไปด้วย)
tokenizer = AutoTokenizer.from_pretrained(adapter_id)

# --- 5. โหลดและรวม LoRA Adapter ---
model = PeftModel.from_pretrained(base_model, adapter_id)
model = model.eval()

print("ChaYenLM พร้อมคุยแล้วเพื่อน!")

# --- 6. ฟังก์ชัน Generate ---
def generate_response(instruction, input_text=""):
    prompt_template = "<start_of_turn>user\n{instruction}{input}<end_of_turn>\n<start_of_turn>model\n"
    formatted_input = f" {input_text}" if input_text else ""
    prompt = prompt_template.format(instruction=instruction, input=formatted_input)

    inputs = tokenizer(prompt, return_tensors="pt", return_attention_mask=True).to(model.device)

    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=256,
            do_sample=True,
            temperature=0.65, # ลองปรับเล่นได้
            top_k=50,
            top_p=0.95,
            eos_token_id=tokenizer.eos_token_id,
            pad_token_id=tokenizer.eos_token_id
        )

    response_ids = outputs[0][inputs['input_ids'].shape[1]:]
    response = tokenizer.decode(response_ids, skip_special_tokens=True)
    return response

# --- 7. ลองคุย! ---
question = "เบื่อว่ะเพื่อน มีไรทำแก้เซ็งมะ?"
answer = generate_response(question)
print(f"เพื่อนถาม: {question}")
print(f"ChaYenLM ตอบ: {answer}")