2 điểm bởi GN⁺ 2025-12-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Lấy cảm hứng từ chương trình Mark V. Shaney của thập niên 1980, tác giả đã tạo ra trình sinh văn bản Markov đơn giản Mark V. Shaney Junior, được triển khai chỉ với khoảng 30 dòng mã Python
  • Mô hình này dự đoán từ tiếp theo theo xác suất dựa trên ba từ (trigram), sử dụng hơn 200 bài blog (khoảng 200.000 từ) làm dữ liệu huấn luyện
  • Các câu được tạo ra có dạng câu vô nghĩa (gibberish), trộn lẫn các từ thuộc những chủ đề trên blog như Lisp, Emacs, toán học, lập trình
  • Khi tăng bậc (order) của mô hình, câu trở nên nhất quán hơn, nhưng từ mức 5 trở lên thì mô hình bắt đầu sao chép nguyên văn nội dung gốc, khiến tính sáng tạo biến mất
  • Ngay cả trong thời đại mô hình ngôn ngữ lớn (LLM), độ rõ ràng về mặt cấu trúc của mô hình Markov đơn giản vẫn được xem là điểm khởi đầu tốt để hiểu nguyên lý sinh ngôn ngữ

Tổng quan về chương trình Mark V. Shaney Junior

  • Mark V. Shaney Junior là trình sinh văn bản mô phỏng người dùng ảo Mark V. Shaney, nhân vật từng hoạt động trên Usenet vào thập niên 1980
    • Bản gốc là chương trình tự động tạo bài đăng bằng mô hình Markov
    • Lần triển khai này là một phiên bản tối giản của ý tưởng đó và đã được công khai trên GitHub
  • Toàn bộ mã chỉ khoảng 30 dòng Python, đặt trọng tâm vào sự đơn giản hơn là hiệu năng
    • Ngay cả người mới tiếp xúc với mô hình Markov cũng có thể hiểu trong vòng 20 phút

Lập trình thử nghiệm như một thú vui

  • Tác giả thích viết chương trình nhằm khám phá ý tưởng hơn là giải quyết một vấn đề cụ thể
    • Đã nhiều lần thử nghiệm các chuỗi Markov với nhiều không gian trạng thái khác nhau
    • Những đoạn mã thử nghiệm như vậy thường được sắp xếp lại và chia sẻ trên GitHub hoặc Codeberg
  • Mark V. Shaney Junior cũng là một trong những thử nghiệm như vậy, sau đó được hoàn thiện thêm để công bố

Sinh văn bản bằng dữ liệu blog

  • Sau khi thử nghiệm mô hình với "A Christmas Carol" của Charles Dickens,
    tác giả đã dùng 24 năm bài blog (hơn 200 bài, khoảng 200.000 từ) làm dữ liệu đầu vào
    • Phần bình luận (khoảng 40.000 từ) bị loại trừ
  • Các câu sinh ra là những câu phi logic, trộn lẫn lệnh lập trình, thuật ngữ toán học, lệnh trình soạn thảo
    • Ví dụ: các câu kết hợp ngẫu nhiên giữa lệnh Emacs, mã Lisp và thuật ngữ toán học
  • Một số câu lấy từ ngữ từ những bài viết cụ thể trên blog để tạo thành những tổ hợp vô nghĩa
    • Ví dụ: “Lisp source file” và “self-esteem” được trích từ các bài khác nhau rồi ghép lại

Tính chất Markov và cấu trúc thuật toán

  • Thiết lập cơ bản dựa trên trigram (3 từ),
    dùng cấu trúc map trong đó hai từ trước làm khóa (key) và từ thứ ba được lưu làm giá trị (value)
  • Quá trình sinh văn bản
    • Chọn ngẫu nhiên một cặp từ → chọn một trong các từ tiếp theo có thể xuất hiện với xác suất đồng đều
    • Dùng từ vừa chọn cùng từ ngay trước đó để tạo thành cặp mới và lặp lại
    • Kết thúc khi không còn từ tiếp theo hoặc đạt giới hạn 100 từ
  • Nếu cùng một trigram xuất hiện nhiều lần, từ tiếp theo tương ứng sẽ được lưu trùng trong danh sách, từ đó tạo ra
    lựa chọn xác suất tỷ lệ với tần suất xuất hiện
  • Quá trình này là chuyển trạng thái xác suất chỉ phụ thuộc vào trạng thái hiện tại,
    có thể biểu diễn bằng công thức P(Xₙ₊₁ | Xₙ, Xₙ₋₁, …, X₁) = P(Xₙ₊₁ | Xₙ),
    • Đặc tính không nhớ (memoryless) này là cốt lõi của tính chất Markov

Các thử nghiệm bổ sung và điều chỉnh bậc mô hình

  • Bậc (order) mặc định là 2 và có thể thay đổi bằng đối số dòng lệnh
    • Khi tăng lên 3–4, câu trở nên nhất quán và tự nhiên hơn
    • Ví dụ: có thể tạo ra những câu tương đối hợp lý, trộn giữa lệnh IRC và khái niệm toán học
  • Tuy nhiên, khi tăng bậc lên 5, mô hình có xu hướng sao chép nguyên văn nội dung gốc, khiến
    sự vô nghĩa mang tính sáng tạo (gibberish) biến mất
  • Cũng có thể sinh văn bản bằng cách đưa vào một prompt ban đầu
    • Ví dụ: nếu nhập câu mở đầu “Finally we”, mô hình sẽ tạo ra một câu dài trộn các từ như Emacs, MATLAB, GNU bash

Ý nghĩa của mô hình đơn giản

  • Vào năm 2025, dù mô hình ngôn ngữ lớn (LLM) đang chiếm ưu thế,
    mô hình Markov vẫn không thể nắm bắt cấu trúc toàn cục hay phụ thuộc dài hạn
  • Dù vậy, nhờ thiết kế đơn giản và cách triển khai rõ ràng,
    nó vẫn có giá trị như một mô hình nhập môn để học nguyên lý sinh ngôn ngữ
  • Tác giả mô tả đây chính là “Hello, world” của các mô hình ngôn ngữ

1 bình luận

 
GN⁺ 2025-12-15
Ý kiến trên Hacker News
  • Markov Model là phiên bản thống kê của một máy trạng thái, tạo ra token tiếp theo theo xác suất chỉ dựa trên trạng thái hiện tại
    Cần xác định rõ mối quan hệ giữa trạng thái và token thì mới có thể thảo luận một cách có ý nghĩa
    Ví dụ, nếu trạng thái là một hàm của k quan sát cuối cùng thì đó được gọi là Markov Chain bậc k
    Có thể xem RNN là một dạng mở rộng, trong đó trạng thái được định nghĩa như một hàm của các trạng thái trước đó và các token gần đây
    Xác suất chuyển trạng thái có thể là xác định hoặc ngẫu nhiên, và độ dài ngữ cảnh cũng có thể được định nghĩa linh hoạt
    Nhưng không phải mọi Markov Model đều có thể học được

    • Tôi thắc mắc “có thể học được” ở đây nghĩa là gì
  • Tôi nhớ là năm 1992 đã mua một chương trình kiểu này ở Egghead Software với giá 3 đô la
    Tôi nạp vào đó mấy đoạn kiểu nhật ký suốt 5 năm của mình rồi cười ầm lên khi xem kết quả
    Có thể tham khảo ví dụ cũ là Babble 1.0.20 và bài viết trên diễn đàn liên quan Software Spotlight: Babble

  • Đọc bài xong tôi cũng thử nghiệm với mô hình Markov
    Ban đầu tôi làm ở mức ký tự, nhưng đổi sang mô hình bậc 2 cũng không khác biệt nhiều
    Lên bậc 3 (trigram) thì thấy tự nhiên hơn một chút
    Sau đó tôi áp dụng mô hình Markov bậc 1 lên văn bản đã được token hóa bằng BPE (Byte Pair Encoding), và kết quả nhất quán hơn đôi chút
    Nhưng khi nâng lên bậc 2 thì nó sao chép nguyên văn bản gốc — vì BPE loại bỏ các token lặp, khiến chuyển tiếp trở nên mang tính xác định
    Khi giới hạn số token lại (ví dụ: 894 → 800) thì nó lại trở nên không xác định, và văn bản trông tự nhiên hơn một chút
    Nếu đẩy bậc lên quá cao (ví dụ: bậc 5), văn bản sẽ mang cảm giác khô khan và chỉ liệt kê sự kiện
    Cuối cùng thì Markov model tuy đơn giản nhưng là một công cụ khá vui để thử nghiệm

    • Tôi cũng từng thử tương tự, và kết quả cho ra một nửa là nhảm nhí buồn cười, một nửa là sao chép nguyên văn
      Có vẻ nếu loại bỏ các chain chỉ có đúng một token theo sau thì sẽ khá hơn, nhưng lại có nguy cơ xóa luôn cả cấu trúc ngữ pháp
      Tôi vẫn đang tìm cách tốt hơn để tránh các chain đơn dài
    • Để tránh kết quả quá “khô”, mẹo là điều chỉnh linh hoạt giới hạn 5 từ
      Nếu chỉ còn đúng một đường đi khả dĩ thì giảm xuống 4 từ chẳng hạn
    • Nhìn những kết quả kiểu này có cảm giác rợn người như thể có thứ gì đó đang cố giao tiếp
      Hoặc cũng có thể chỉ là chúng ta đang cô độc và tâm trí cố tìm trật tự trong hỗn loạn
  • Trước đây tôi cũng từng làm một thử nghiệm tương tự
    Tôi đưa vào mô hình Markov khoảng 500.000 từ các bài fantasy và SF mình viết trong suốt 20 năm, rồi điều chỉnh bằng thanh trượt 2~5-gram
    Đó giống như một “giếng mơ” mà tôi lôi ra dùng mỗi khi cần cảm hứng
    Nó có vẻ như là phần tiếp nối của thói quen hồi nhỏ: mở ngẫu nhiên một trang từ điển để tìm ý tưởng viết

    • Tôi tò mò không biết bạn đã từng tham gia NaNoGenMo chưa
      Thử nghiệm với kiểu corpus này có vẻ sẽ thành một dự án khá thú vị
    • Tôi cũng từng huấn luyện một bot Twitter bằng 20.000 tweet của mình vào năm 2015
      Cũng có video thuyết trình
    • Tôi cũng có 30 năm bản thảo tiểu thuyết dang dở, chạy thử theo cách này chắc sẽ rất thú vị
    • Hình như Terry Davis cũng từng thử gì đó tương tự
    • Tôi tự hỏi nếu làm việc này bằng LLM thì phải bắt đầu thế nào
      Có thể huấn luyện toàn bộ các bài viết cá nhân để tạo ra một mô hình của riêng mình không?
      Nên dùng model và công cụ nào, và liệu không cần system prompt mà vẫn viết theo đúng giọng văn của tôi hay không?
      Xa hơn nữa, tôi còn tò mò liệu nó có thể phản hồi tự nhiên qua điện thoại hoặc tin nhắn Discord hay không
  • Có một truyện fanfic Harry Potter được tạo bằng Markov Chain
    Tên là Harry Potter and the Portrait of What Looked Like a Large Pile of Ash
    Có thể xem tại liên kết của botnik.org

    • Tôi không hiểu vì sao người ta lại muốn đọc thứ đó
      Chỉ cần nhìn câu đầu tiên thôi đã thấy như một đoạn văn bản rỗng tuếch
      Theo tôi nó còn thiếu cảm xúc và ý nghĩa hơn cả cuốn sách dở nhất do con người viết ra
  • Những thử nghiệm kiểu như “I Fed 24 Years of My Blog Posts to a Markov Model” thực ra là điều mà nhiều LLM đã lặp đi lặp lại từ lâu

  • Một tác giả như Barbara Cartwright, người đã viết hơn 700 tiểu thuyết lãng mạn na ná nhau, có vẻ là kiểu có thể được tái hiện bằng Markov model

    • Nhưng tôi không chắc trên thực tế có phân biệt nổi hay không
      Vợ tôi đôi khi còn mua lại đúng cuốn tiểu thuyết đã đọc rồi để đọc lại
  • Tôi nhớ hồi giữa những năm 2000 trên IRC từng thấy bot Markov chain
    Trước khi GPT xuất hiện thì chẳng có gì tốt hơn thế

    • Chắc bạn đang nói đến MegaHAL hoặc Cobe về sau một chút
    • Tôi cũng từng tự làm một con bằng bitlbee vào những năm 2000, đúng là khoảng thời gian rất vui
  • Cái này thực ra gần với mô hình trigram hơn là Markov model
    Nếu mở rộng lên 4-gram trở lên thì nó sẽ tạo ra các câu tự nhiên hơn nhiều
    Trước đây từng có nghiên cứu về một mô hình n-gram khổng lồ tên là “infini-gram”, và tôi nghe nói trong một số miền dữ liệu nhất định nó cho hiệu năng tiệm cận LLM

  • Cảm ơn vì đã chia sẻ 24 năm trải nghiệm và suy nghĩ của bạn
    Trong thời đại ngày nay, khi chỉ toàn tiêu dùng và kích thích tràn ngập, sự sẻ chia chân thành như thế này là điều rất đặc biệt