gzip có thể trở thành mô hình ngôn ngữ?

Phần mềm22 tháng 9, 2026·4 phút đọc

Một thử nghiệm thú vị cho thấy thuật toán nén gzip có thể sinh văn bản giống như mô hình ngôn ngữ, dựa trên nguyên lý tương đương giữa nén và dự đoán. Dù kết quả chưa thực sự mạch lạc, nó mở ra góc nhìn mới về bản chất của mô hình ngôn ngữ.

gzip có thể trở thành mô hình ngôn ngữ?

Có một câu hỏi tưởng chừng như đùa: liệu gzip — công cụ nén file quen thuộc trên mọi hệ điều hành — có thể làm được việc của một mô hình ngôn ngữ? Không mạng nơ-ron, không tham số học được, không huấn luyện. Chỉ là thuật toán nén thuần túy. Hóa ra câu trả lời là: kiểu như có.

Nén chính là dự đoán

Ý tưởng cốt lõi nằm ở một nguyên lý của lý thuyết thông tin: mọi mô hình dự đoán về bản chất đều là một bộ nén, và mọi thuật toán nén đều là một mô hình dự đoán. Điều này được nêu trong bài báo Language Modeling is Compression.

Hãy nghĩ xem bộ nén làm gì. Nó dùng ít byte cho dữ liệu mà nó "kỳ vọng" và nhiều byte cho dữ liệu bất ngờ. Một file gồm toàn chữ A lặp lại một triệu lần có thể mô tả chỉ trong một câu. Một triệu byte ngẫu nhiên thì gần như không nén được chút nào.

Số bit cần để mã hóa một ký hiệu là $-\log_2 p$, với $p$ là xác suất mà mô hình gán cho ký hiệu đó. Xác suất cao nghĩa là ít bit. Vậy nên bất kỳ bộ nén nào cũng ẩn chứa bên trong một mô hình xác suất, dù không ai viết nó ra.

gzip dùng thuật toán DEFLATE, nén các byte tiếp theo bằng cách tìm chuỗi trùng khớp với văn bản gần đó trong cửa sổ trượt 32 KiB. Nếu một đoạn tiếp diễn lặp lại nội dung đã có trong cửa sổ, DEFLATE mã hóa nó bằng một tham chiếu ngược rẻ thay vì các byte nguyên văn.

Từ đây, ta có một cách cho điểm đơn giản:

$$\text{score}(\text{candidate}) = \texttt{len(gzip(context + candidate))}$$

Độ dài nén càng nhỏ, ứng viên đó càng được "dự đoán" tốt. Muốn mồi mô hình, ta chỉ cần đưa một tập văn bản vào cửa sổ của gzip. Đoạn tiếp diễn nào giống với tập văn bản đó sẽ nén nhỏ, còn không giống sẽ nén lớn.

Chỉ cho điểm thôi chưa đủ, sinh văn bản mới là thử thách. Cách ngây thơ là chọn byte tiếp theo nén tốt nhất — và cách này thất bại thảm hại. Lý do khá tinh tế: gzip chỉ trả về độ dài byte nguyên (không có phần thập phân). Thêm một byte thường không làm thay đổi độ dài nén chút nào, nên nhiều ứng viên hòa nhau và tín hiệu bị chìm trong nhiễu lượng tử hóa.

Giải pháp là nhìn trước cả một đoạn trước khi chốt. Công cụ tên là gzipt chạy beam search trên các chuỗi byte. Ở mỗi bước, ngữ cảnh hiện tại gồm:

  • Cửa sổ tập văn bản corpus
  • Đuôi gần đây của (prompt + các byte đã sinh)

Vòng lặp hoạt động như sau:

  • Prompt: bắt đầu với câu lệnh của người dùng, không có token khởi đầu.
  • Ngữ cảnh: cho gzip thấy cửa sổ corpus cộng với phần đuôi gần đây.
  • Tìm kiếm: giữ lại beam_width đoạn tiếp diễn nén tốt nhất, mở rộng mỗi đoạn bằng mọi byte có trong corpus, chấm điểm rồi tỉa bớt.
  • Chốt: lấy đoạn nén tốt nhất, thêm vào, rồi lặp lại.

Một chi tiết quan trọng: chỉ những byte đuôi gần nhất của văn bản sinh ra mới nằm trong ngữ cảnh chấm điểm. Vì DEFLATE mã hóa các trùng khớp ở gần rẻ hơn ở xa, nếu gzip nhìn thấy toàn bộ lịch sử, cách rẻ nhất thường là rơi vào vòng lặp nguyên văn, lặp đi lặp lại đoạn vừa viết.

Đây là kết quả thật, chưa qua chỉnh sửa, sau khi mồi bằng tiny Shakespeare:

MENENIUS: 'Though all at once canq MARCIUS: Pray now, nocamest thou to a morsel. LARTIUS: Hence, and I' the end admire, where G again; and after it ag.

Rõ ràng nó không mạch lạc, nhưng nó thể hiện hiểu biết về văn bản nhiều hơn mức ta kỳ vọng ở gzip.

Ý nghĩa và một chút thực tế

Toàn bộ công cụ chỉ là một file Python thuần thư viện chuẩn, dùng duy nhất zlib. Các tác giả bài báo cũng từng thử hướng này nhưng kết quả kém; việc thêm beam search đã cải thiện chất lượng đáng kể.

Vậy gzip có phải mô hình ngôn ngữ không? Câu trả lời thành thật là kiểu như có. Nó không tạo ra văn bản mạch lạc, nhưng nó chứng minh một điều đẹp đẽ: khả năng dự đoán và khả năng nén chỉ là hai mặt của cùng một đồng xu. Bất kỳ hệ thống nào nén giỏi đều đang âm thầm dự đoán — kể cả công cụ khiêm tốn nằm sẵn trên máy tính của bạn.

Với người làm công nghệ ở Việt Nam, thử nghiệm này là lời nhắc nhở thú vị rằng mô hình ngôn ngữ không nhất thiết phải là những mạng nơ-ron khổng lồ tốn hàng triệu đô để huấn luyện. Đôi khi, những ý tưởng cũ kỹ trong lý thuyết thông tin vẫn còn nhiều điều để khai phá.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗