วิธีสร้าง LLM ด้วย python จำลอง

ใครสงสัยว่า LLM ทำงานยังไง มันเอาโจทย์แปลงเป็นตัวเลข เอาเลขมาบวกลบกันจะได้คอบ ทดสอบรันบนแอปได้เลย

พิมพ์ คำถามแบบนี้
ทำไมไก่กินอาหารเพราะอะไร
ทำไมหมาเห่าเพราะอะไร
ทำไมแมวกินปลาทูเพราะอะไร
คิดเลขอะไรก็ได้ เอาป้อน 3x5

import re

embeddings = {
    "ทำไม": 0.0, "แมว": 0.2, "กิน": 0.3, "ปลาทู": 0.56,
    "เพราะอะไร": 0.06, "หิว": 1.0, "ไก่": 0.1, "อาหาร": 0.66,
    "หมา": 0.4, "เห่า": 0.76, "คนมา": 1.1
}

decode_table = {
    1.00: "หิว",
    1.10: "คนมา"
}

def auto_split_thai(text):
    """ระบบตัดคำภาษาไทยอัตโนมัติ โดยอิงจากคลังคำศัพท์ในฐานข้อมูล"""
    words = sorted(list(embeddings.keys()), key=len, reverse=True)
    tokens = []
    i = 0
    while i < len(text):
        match = False
        for word in words:
            if text[i:].startswith(word):
                tokens.append(word)
                i += len(word)
                match = True
                break
        if not match:
            # ถ้าไม่เจอคำในคลังศัพท์ ให้เก็บทีละตัวอักษร/ตัวเลข
            tokens.append(text)
            i += 1
    return tokens

def calculate_brain(input_sentence):
    # 1. ล้างเครื่องหมาย '=' และช่องว่างส่วนเกินออก
    clean_input = input_sentence.replace("=", "").replace(" ", "").strip()
    
    if not clean_input:
        print("กรุณาป้อนอินพุต")
        return

    # 2. ตรวจสอบโหมดคณิตศาสตร์ตรงตัว
    is_math_expr = bool(re.search(r'\d+', clean_input)) and any(c in clean_input for c in ['+', '-', '*', '/'])

    if is_math_expr:
        # --- [โหมดคณิตศาสตร์] ---
        try:
            result_raw = float(eval(clean_input))
            result_rounded = round(result_raw, 2)
            result_str = f"{result_rounded:.2f}"
            
            print(f"ร้องไห้{clean_input}={result_str})")
            print(f" ผลลัพธ์คณิตศาสตร์ = {result_str}\n")
            print("=" * 41)
            print(input_sentence)
            return
        except Exception:
            print("สมการคณิตศาสตร์ไม่ถูกต้อง")
            return

    # --- [โหมดภาษา: ระบบตัดคำอัตโนมัติจากอินพุตที่พิมพ์ติดกัน] ---
    # เรียกใช้ระบบตัดคำอัจฉริยะที่สร้างขึ้น
    tokens = auto_split_thai(clean_input)
    
    if len(tokens) < 3:
        print("รูปแบบประโยคไม่ถูกต้อง: ต้องมีอย่างน้อย 3 คำหลังจากตัดคำ")
        return

    # แปลง Token เป็นค่าตัวเลข (Embeddings)
    values = [float(embeddings.get(t, 0.0)) for t in tokens]
    middle_values = values[1:-1]
    last_value = values[-1]

    # คำนวณค่าน้ำหนักความสัมพันธ์
    sum_middle = sum(middle_values)
    result_raw = float(sum_middle - last_value)
    result_rounded = round(result_raw, 2)            
    result_str = f"{result_rounded:.2f}"
    math_str = "+".join(f"{v:.2f}" for v in middle_values) + "-" + f"{last_value:.2f}"

    # ถอดรหัสคำตอบ (Decoding)
    answer_word = decode_table.get(result_rounded, "???")

    # กลไกสร้างประโยคต่อเนื่อง
    output_tokens = tokens.copy()
    if output_tokens[0] in ["ทำไม", "เพราะอะไร"]:
        output_tokens[0] = "เพราะ"
    output_tokens[-1] = answer_word  
    generated_sentence = "".join(output_tokens)

    # --- 📌 แสดงผล 2 บรรทัด (พิมพ์ติดกัน และ แยกคำ) ตามโจทย์ของคุณ ---
    print(f"พิมพ์ติดกัน: {clean_input}")
    print(f"แยกคำแล้ว: {' | '.join(tokens)}")
    print("-" * 41)
    
    # แสดงผลการทำงานของระบบคิด
    print(f"ร้องไห้{math_str}={result_str})")
    print(f" {result_str} = '{answer_word}'\n")
    print(f" ประโยคผลลัพธ์ที่สร้างขึ้นใหม่: {generated_sentence}\n")
    print("=" * 41)
    print(f"อินพุตเดิม: {input_sentence}")

# --- ตัวกระตุ้นรันในแอปพลิเคชัน (ทดสอบป้อนแบบพิมพ์ติดกันเว้นวรรคหายหมด) ---
calculate_brain("ทำไมแมวกินปลาทูเพราะอะไร")


ผู้ออกแบบ LAM-Thai (Large Audio Model Thai)
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่