2 คะแนน โดย GN⁺ 2025-12-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ได้สร้าง Mark V. Shaney Junior เครื่องมือสร้างข้อความแบบมาร์คอฟอย่างง่ายที่เขียนด้วย โค้ด Python ราว 30 บรรทัด โดยได้แรงบันดาลใจจากโปรแกรม Mark V. Shaney ในยุค 1980
  • โมเดลนี้ใช้การทำนายคำถัดไปแบบความน่าจะเป็นบนพื้นฐานของ สามคำ (trigram) โดยใช้ บทความบล็อกราว 200 ชิ้น (ประมาณ 200,000 คำ) เป็นข้อมูลฝึก
  • ประโยคที่สร้างขึ้นถูกแสดงออกมาในรูปแบบ ประโยคไร้ความหมาย (gibberish) ที่ผสมคำจากหัวข้อในบล็อก เช่น Lisp, Emacs, คณิตศาสตร์, การเขียนโปรแกรม
  • เมื่อเพิ่ม order ของโมเดล ประโยคจะมีความสอดคล้องมากขึ้น แต่เมื่อเกิน 5 จะเริ่มอ้างข้อความต้นฉบับตรง ๆ ทำให้ ความสร้างสรรค์หายไป
  • แม้จะอยู่ในยุคของโมเดลภาษาขนาดใหญ่ (LLM) แต่ ความชัดเจนเชิงโครงสร้างของโมเดลมาร์คอฟแบบเรียบง่าย ก็ยังถูกเสนอให้เป็นจุดเริ่มต้นที่ดีในการทำความเข้าใจหลักการสร้างภาษา

ภาพรวมโปรแกรม Mark V. Shaney Junior

  • Mark V. Shaney Junior คือเครื่องมือสร้างข้อความที่เลียนแบบผู้ใช้เสมือน Mark V. Shaney ซึ่งเคยเคลื่อนไหวบน Usenet ในยุค 1980
    • ต้นฉบับเป็นโปรแกรมที่ใช้โมเดลมาร์คอฟเพื่อสร้างโพสต์โดยอัตโนมัติ
    • การนำมาทำครั้งนี้เป็น เวอร์ชันมินิมัล ที่ย่อแนวคิดนั้นให้เรียบง่ายลง และเผยแพร่บน GitHub
  • โค้ดทั้งหมดมีเพียง Python ราว 30 บรรทัด และให้ความสำคัญกับ ความเรียบง่ายมากกว่าประสิทธิภาพ
    • แม้แต่คนที่เพิ่งรู้จักโมเดลมาร์คอฟครั้งแรกก็ ทำความเข้าใจได้ภายใน 20 นาที

การเขียนโปรแกรมเชิงทดลองในฐานะงานอดิเรก

  • ผู้เขียนชอบทำการเขียนโปรแกรมเพื่อ สำรวจไอเดีย มากกว่าจะแก้ปัญหาเฉพาะหน้า
    • เคยทดลองกับมาร์คอฟเชนที่มี state space หลากหลายหลายครั้ง
    • จากนั้นก็นำโค้ดทดลองเหล่านี้มาจัดระเบียบและแชร์บน GitHub หรือ Codeberg
  • Mark V. Shaney Junior ก็เป็นหนึ่งในงานทดลองเหล่านี้ และเป็นกรณีที่นำมาขัดเกลาให้สมบูรณ์ขึ้นก่อนเผยแพร่

การสร้างข้อความด้วยข้อมูลจากบล็อก

  • หลังจากทดสอบด้วยการฝึกโมเดลบน A Christmas Carol ของ Charles Dickens แล้ว
    ก็ได้นำ บทความบล็อกตลอด 24 ปี (มากกว่า 200 ชิ้น ราว 200,000 คำ) มาใช้เป็นข้อมูลนำเข้า
    • ไม่รวมคอมเมนต์ (ราว 40,000 คำ)
  • ประโยคที่สร้างขึ้นออกมาเป็น ข้อความไร้ตรรกะ ที่ปะปนด้วย คำสั่งโปรแกรมมิง คำศัพท์ทางคณิตศาสตร์ และคำสั่งของเอดิเตอร์
    • ตัวอย่างเช่น การนำคำสั่ง Emacs, โค้ด Lisp และศัพท์คณิตศาสตร์มาผสมกันแบบสุ่ม
  • บางประโยคดึงคำมาจากบทความคนละชิ้นในบล็อกมาสร้างเป็น การจับคู่ที่ไร้ความหมาย
    • ตัวอย่างเช่น “Lisp source file” กับ “self-esteem” ถูกดึงมาจากคนละบทความแล้วนำมาประกบกัน

คุณสมบัติแบบมาร์คอฟและโครงสร้างอัลกอริทึม

  • ค่าตั้งต้นใช้ trigram (3 คำ) เป็นพื้นฐาน
    โดยใช้สองคำก่อนหน้าเป็นคีย์ (key) และเก็บคำที่สามเป็นค่า (value) ใน โครงสร้างแบบแมป
  • ขั้นตอนการสร้างข้อความ
    • เลือกคู่คำแบบสุ่ม → เลือกหนึ่งคำจากคำถัดไปที่เป็นไปได้ด้วยความน่าจะเป็นเท่ากัน
    • นำคำที่เพิ่งเลือกกับคำก่อนหน้ามาสร้างเป็นคู่ใหม่แล้วทำซ้ำ
    • จบการทำงานเมื่อไม่มีคำถัดไปอีก หรือถึง ขีดจำกัด 100 คำ
  • ถ้า trigram เดียวกันปรากฏหลายครั้ง คำถัดไปนั้นจะถูกเก็บซ้ำในลิสต์
    ทำให้เกิด การสุ่มเลือกตามสัดส่วนความถี่ที่ปรากฏจริง
  • กระบวนการนี้เป็น การเปลี่ยนสถานะแบบความน่าจะเป็นที่ขึ้นกับสถานะปัจจุบันเท่านั้น
    ในเชิงสมการเขียนได้เป็น P(Xₙ₊₁ | Xₙ, Xₙ₋₁, …, X₁) = P(Xₙ₊₁ | Xₙ)
    • คุณสมบัติ memoryless นี้คือแกนสำคัญของคุณสมบัติแบบมาร์คอฟ

การทดลองเพิ่มเติมและการปรับ order ของโมเดล

  • ค่า order เริ่มต้นคือ 2 และสามารถเปลี่ยนได้ผ่านอาร์กิวเมนต์ของบรรทัดคำสั่ง
    • หากเพิ่ม order เป็น 3~4 ประโยคจะ สอดคล้องและเป็นธรรมชาติมากขึ้น
    • ตัวอย่างเช่น สามารถสร้างประโยคที่ดูมีเหตุผลมากขึ้นซึ่งผสมคำสั่ง IRC กับแนวคิดทางคณิตศาสตร์
  • แต่เมื่อเพิ่ม order เป็น 5 จะเริ่มมีแนวโน้ม คัดลอกต้นฉบับตรง ๆ
    ทำให้ ความไร้สาระเชิงสร้างสรรค์ (gibberish) หายไป
  • ยังสามารถให้พรอมป์ตเริ่มต้นเพื่อสร้างข้อความได้ด้วย
    • ตัวอย่างเช่น หากป้อนประโยคที่ขึ้นต้นด้วย “Finally we”
      ก็จะได้ประโยคยาวที่ผสมคำอย่าง Emacs, MATLAB และ GNU bash เข้าด้วยกัน

ความหมายของโมเดลแบบเรียบง่าย

  • แม้ในปี 2025 โมเดลภาษาขนาดใหญ่ (LLM) จะเป็นกระแสหลัก
    แต่โมเดลมาร์คอฟก็ยังไม่สามารถจับ โครงสร้างระดับภาพรวมหรือการพึ่งพากันระยะยาว ได้
  • ถึงอย่างนั้น ด้วย การออกแบบที่เรียบง่ายและการติดตั้งใช้งานที่ชัดเจน
    มันก็ยังมีคุณค่าในฐานะ โมเดลเริ่มต้นสำหรับเรียนรู้หลักการสร้างภาษา
  • ผู้เขียนอธิบายว่า “โมเดลนี้แหละคือ ‘Hello, world’ ของ language model”

1 ความคิดเห็น

 
GN⁺ 2025-12-15
ความคิดเห็นจาก Hacker News
  • Markov Model คือเวอร์ชันเชิงสถิติของ state machine ที่สร้างโทเค็นถัดไปแบบความน่าจะเป็นโดยอิงจากสถานะปัจจุบันเท่านั้น
    ถ้าจะอภิปรายกันให้มีความหมาย ต้องนิยามความสัมพันธ์ระหว่างสถานะกับโทเค็นให้ชัดเจน
    ตัวอย่างเช่น ถ้าสถานะเป็นฟังก์ชันของค่าที่สังเกตล่าสุด k ค่า ก็จะเรียกว่า Markov Chain อันดับ k
    มองได้ว่า RNN เป็นรูปแบบขยายที่นิยามสถานะเป็นฟังก์ชันของสถานะก่อนหน้าและโทเค็นล่าสุด
    ความน่าจะเป็นของการเปลี่ยนสถานะอาจเป็นแบบกำหนดตายตัวหรือแบบสุ่มก็ได้ และความยาวของบริบทก็กำหนดแบบแปรผันได้เช่นกัน
    แต่ Markov Model ไม่ใช่ทุกแบบที่จะเรียนรู้ได้

    • สงสัยว่า “เรียนรู้ได้” หมายถึงอะไร
  • จำได้ว่าในปี 1992 เคยซื้อโปรแกรมแบบนี้จาก Egghead Software ในราคา 3 ดอลลาร์
    เอางานเขียนคล้ายไดอารีของตัวเองตลอด 5 ปีใส่เข้าไป แล้วก็นั่งหัวเราะกับผลลัพธ์
    ดูตัวอย่างเก่าได้จาก Babble 1.0.20 และโพสต์ในฟอรัมที่เกี่ยวข้อง Software Spotlight: Babble

  • อ่านโพสต์นี้แล้วผมก็ลองเล่นกับ Markov model เหมือนกัน
    เริ่มจากระดับตัวอักษร แต่พอเปลี่ยนเป็นโมเดลอันดับ 2 ก็ไม่ได้ต่างมาก
    พอขึ้นไปอันดับ 3 (trigram) ก็เริ่มดูเป็นธรรมชาติมากขึ้นนิดหน่อย
    หลังจากนั้นลองใช้ข้อความที่ tokenize ด้วย BPE(Byte Pair Encoding) แล้วเอาไปใส่ Markov model อันดับ 1 ผลลัพธ์ก็ดูสอดคล้องกันมากขึ้นเล็กน้อย
    แต่พอขยับเป็นอันดับ 2 มันก็ลอกต้นฉบับออกมาตรง ๆ — เพราะ BPE ตัดโทเค็นที่ซ้ำกันออก ทำให้การเปลี่ยนสถานะกลายเป็นแบบกำหนดตายตัว
    พอลดจำนวนโทเค็นลง (เช่น 894 → 800) มันก็กลับมาไม่เป็นแบบกำหนดตายตัวอีก และข้อความก็ดูเป็นธรรมชาติมากขึ้นนิดหน่อย
    ถ้าดันอันดับสูงเกินไป (เช่น อันดับ 5) ข้อความจะให้ความรู้สึกว่าแห้ง แข็ง และเรียงแต่ข้อเท็จจริง
    สุดท้ายแล้ว Markov model เป็นเครื่องมือที่เรียบง่าย แต่สนุกมากสำหรับการทดลอง

    • ผมก็เคยลองคล้าย ๆ กัน ผลลัพธ์ออกมาเป็น คำเพ้อเจ้อ ครึ่งหนึ่ง และอีกครึ่งก็เหมือนคัดลอกต้นฉบับมาแปะ
      คิดว่าถ้าตัด chain ที่มีโทเค็นถัดไปได้แค่ตัวเดียวออกก็น่าจะดีขึ้น แต่ก็เสี่ยงจะลบโครงสร้างไวยากรณ์ไปด้วย
      ตอนนี้กำลังหาวิธีที่ดีกว่าเพื่อหลีกเลี่ยง chain ยาว ๆ แบบเส้นเดียวอยู่
    • ถ้าอยากเลี่ยงผลลัพธ์ที่ดู ‘แห้ง’ เคล็ดลับคือ ปรับขีดจำกัด 5 คำแบบยืดหยุ่น
      ถ้ามีทางเดินที่เป็นไปได้แค่ทางเดียว ก็ลดลงมาเหลือ 4 คำอะไรแบบนั้น
    • พอเห็นผลลัพธ์แบบนี้แล้วมันให้ความรู้สึกหลอน ๆ เหมือนมีอะไรบางอย่างพยายามจะสื่อสาร
      หรืออีกมุมหนึ่ง เราอาจอยู่ลำพังและจิตใจก็แค่พยายามหาความเป็นระเบียบท่ามกลางความโกลาหลก็ได้
  • เมื่อก่อนผมก็เคยทำการทดลองคล้ายกัน
    เอางานเขียนแฟนตาซีกับไซไฟที่เขียนสะสมมา 20 ปี ราว 500,000 คำ ใส่เข้าไปใน Markov model แล้วปรับด้วยสไลเดอร์ 2~5 แกรม
    มันเป็นเหมือนเครื่องมือแบบ ‘บ่อน้ำแห่งความฝัน’ ที่ผมหยิบมาใช้ทุกครั้งเวลาต้องการแรงบันดาลใจ
    รู้สึกเหมือนเป็นการต่อยอดจากนิสัยสมัยเด็กที่ชอบเปิดพจนานุกรมแบบสุ่มเพื่อหาไอเดียเขียนหนังสือ

    • สงสัยว่าเคยเข้าร่วม NaNoGenMo ไหม
      ถ้าเอาคลังข้อความแบบนี้มาทดลอง น่าจะกลายเป็นโปรเจกต์ที่สนุกมาก
    • ผมเองก็เคยเอาทวีตของตัวเอง 20,000 ข้อความไปฝึก Markov model แล้วทำเป็น บอต Twitter ในปี 2015
      มี วิดีโอนำเสนอ ด้วย
    • ผมเองก็มีร่างนิยายที่เขียนค้างไว้ตลอด 30 ปีอยู่เหมือนกัน ถ้าเอามารันแบบนี้ก็น่าจะน่าสนใจ
    • จำได้ว่า Terry Davis ก็เคยลองอะไรคล้าย ๆ กัน
    • สงสัยว่าถ้าจะทำแบบนี้ด้วย LLM ต้องทำยังไง
      เอางานเขียนส่วนตัวทั้งหมดไปฝึกเพื่อสร้างโมเดลของตัวเองได้ไหม?
      ควรใช้โมเดลกับเครื่องมืออะไร และจะเขียนให้เป็นสำนวนของตัวเองได้โดยไม่ต้องมี system prompt หรือเปล่า
      แล้วจะต่อยอดให้ตอบโทรศัพท์หรือข้อความใน Discord ได้อย่างเป็นธรรมชาติไหมก็อยากรู้เหมือนกัน
  • มี แฟนฟิก Harry Potter ที่สร้างด้วย Markov Chain อยู่
    ชื่อว่า Harry Potter and the Portrait of What Looked Like a Large Pile of Ash
    ดูได้ที่ ลิงก์ของ botnik.org

    • ไม่เข้าใจว่าทำไมใครถึงอยากอ่านอะไรแบบนั้น
      แค่ประโยคแรกก็ให้ความรู้สึกเหมือนเป็น ข้อความกลวงเปล่า แล้ว
      ผมคิดว่ามันไม่มีทั้งอารมณ์และความหมาย ยิ่งกว่าหนังสือที่มนุษย์เขียนได้แย่ที่สุดเสียอีก
  • ความพยายามแบบ “I Fed 24 Years of My Blog Posts to a Markov Model” เป็นสิ่งที่ LLM หลายตัวทำซ้ำมาแล้ว อยู่ดี

  • นักเขียนอย่าง Barbara Cartwright ที่เขียนนิยายโรมานซ์คล้าย ๆ กันออกมามากกว่า 700 เล่ม ดูเหมือนน่าจะจำลองด้วย Markov model ได้

    • แต่ก็ไม่รู้ว่าในทางปฏิบัติจะมีใครแยกออกหรือเปล่า
      ภรรยาผมเองบางทีก็เผลอซื้อเล่มที่เคยอ่านแล้วกลับมาอ่านซ้ำอีก
  • จำได้ว่าเคยเห็น บอต Markov chain บน IRC ช่วงกลางยุค 2000
    ก่อน GPT จะออกมา ก็ไม่มีอะไรที่ดีกว่านั้นแล้ว

    • น่าจะหมายถึง MegaHAL หรือไม่ก็ Cobe ที่มาทีหลังหน่อย
    • ผมเองก็เคยทำขึ้นมาใช้กับ bitlbee ในยุค 2000 เหมือนกัน เป็นช่วงเวลาที่สนุกจริง ๆ
  • ที่จริงสิ่งนี้ใกล้เคียงกับ trigram model มากกว่า Markov model
    ถ้าขยายไปถึง 4-gram ขึ้นไป ก็น่าจะได้ประโยคที่เป็นธรรมชาติกว่านี้มาก
    เมื่อก่อนเคยมีงานวิจัยโมเดล n-gram ขนาดมหึมาชื่อ “infini-gram” ซึ่งได้ยินมาว่าในบางโดเมนให้ประสิทธิภาพใกล้เคียง LLM เลย

  • ขอบคุณที่แบ่งปันประสบการณ์และความคิดตลอด 24 ปีที่ผ่านมา
    ในยุคนี้ที่มีแต่การเสพและสิ่งกระตุ้นล้นเกิน การแบ่งปันอย่างจริงใจแบบนี้เป็นสิ่งพิเศษมาก