Tỷ lệ nén

Tỷ số giữa kích thước sau nén so với kích thước dữ liệu gốc trong nén dữ liệu. Dữ liệu văn bản có tính dư thừa cao nên thường đạt tỷ lệ nén 60-80%.

Tỷ lệ nén (compression ratio) là chỉ số đo hiệu quả nén dữ liệu. Với kích thước dữ liệu gốc D và kích thước sau nén C, tỷ lệ nén được tính bằng (1 - C/D) x 100%. Tệp văn bản 100KB nén còn 25KB thì tỷ lệ nén là 75%. Tỷ lệ nén càng cao, càng cần ít dung lượng lưu trữ và băng thông mạng.

Dữ liệu văn bản có xu hướng đạt tỷ lệ nén cao hơn so với hình ảnh hay video. Văn bản ngôn ngữ tự nhiên chứa nhiều yếu tố dư thừa: sự lệch tần suất xuất hiện ký tự (trong tiếng Anh "e" xuất hiện nhiều nhất), từ lặp lại, cụm từ khuôn mẫu. Văn bản tiếng Anh nén bằng gzip đạt 60-70%, văn bản tiếng Việt (UTF-8) khoảng 55-65%. Tiếng Việt sử dụng bảng chữ cái Latin mở rộng với dấu thanh, mỗi ký tự có dấu chiếm 2-3 byte trong UTF-8, tạo ra mẫu byte đặc trưng mà thuật toán nén có thể khai thác hiệu quả.

Trên web, nén gzip/Brotli cho phản hồi HTTP giảm đáng kể lượng dữ liệu truyền tải. HTML, CSS, JavaScript đều là dữ liệu văn bản và hưởng lợi lớn từ nén. Brotli đạt tỷ lệ nén cao hơn gzip 15-25% và được tất cả trình duyệt chính hỗ trợ. Tệp HTML 10KB nén bằng Brotli còn 2.5KB sẽ rút ngắn thời gian tải trang ở mức cảm nhận được, đặc biệt quan trọng với người dùng Việt Nam truy cập qua mạng di động.

Thuật toán nén văn bản chia thành 2 loại chính. Mã hóa Huffman gán chuỗi bit có độ dài thay đổi dựa trên tần suất xuất hiện ký tự - ký tự phổ biến được biểu diễn bằng chuỗi bit ngắn hơn. Các thuật toán họ LZ77/LZ78 phát hiện mẫu lặp trong văn bản và tham chiếu bằng "vị trí và độ dài đã xuất hiện trước đó". gzip sử dụng thuật toán DEFLATE kết hợp cả hai phương pháp.

Mối quan hệ giữa số ký tự và tỷ lệ nén có tính chất thú vị. Cùng số ký tự nhưng nội dung khác nhau cho tỷ lệ nén rất khác. "aaaaaaaaaa" (lặp cùng ký tự) đạt tỷ lệ nén cực cao, nhưng chuỗi ký tự ngẫu nhiên hầu như không nén được. Điều này liên quan trực tiếp đến khái niệm entropy (lượng thông tin) trong lý thuyết thông tin: văn bản càng dư thừa thì tỷ lệ nén càng cao.

Trong thực tế, tỷ lệ nén ảnh hưởng trực tiếp đến chi phí lưu trữ và băng thông mạng. Lưu trữ lượng lớn tệp log hoặc lịch sử chat, nén văn bản có thể giảm 60-80% chi phí lưu trữ. Nén phản hồi API rút ngắn thời gian phản hồi trên mạng di động, cải thiện trải nghiệm người dùng. Văn bản càng dài thì hiệu quả nén càng lớn, nên với nội dung dài, việc có hay không có nén tạo ra sự khác biệt rõ rệt về hiệu năng.

Chia sẻ bài viết này