gzip을 언어 모델로 사용하기: DEFLATE가 텍스트를 생성하는 방법

gzip은 언어 모델로 작동할 수 있지만, 제한적이고 잡음이 많은 방식으로만 가능합니다

핵심 요약: 후보 연속 텍스트의 압축 크기를 확률의 대리 지표로 사용함으로써, gzip 뒤에 있는 DEFLATE 알고리즘은 빔 탐색을 통해 텍스트를 생성할 수 있습니다. 이는 압축-예측 동등성을 보여주지만, 출력은 신경 언어 모델보다 훨씬 덜 일관성이 있습니다.


압축은 예측이다

모든 압축기는 암묵적으로 확률 분포를 정의합니다.

정보 이론에 따르면 기호에 대한 최적 코드 길이는 (-\log_2 p)이며, 여기서 (p)는 모델이 할당한 확률입니다. 따라서 기호에 적은 비트를 사용하는 압축기는 그 기호에 높은 확률을 가정합니다. gzip은 32KiB 슬라이딩 윈도우를 유지하고 반복되는 바이트 시퀀스를 역참조로 대체하는 DEFLATE 알고리즘을 사용합니다. 연속 텍스트가 최근 바이트를 반영할 때, DEFLATE는 거의 추가 비트 없이 이를 인코딩하며, 이는 압축기가 그 연속 텍스트를 "예상"했음을 의미합니다.

점수 규칙:

score(candidate) = len(gzip(context + candidate))

더 작은 압축 길이는 더 높은 예측 확률을 나타냅니다. 큰 말뭉치(예: tiny Shakespeare)로 압축기를 초기화하면, 말뭉치와 유사한 모든 연속 텍스트는 낮은 점수를 얻습니다.


빔 탐색으로 텍스트 생성하기

가장 작은 압축 길이를 제공하는 다음 바이트를 선택하는 순진한 탐욕적 접근 방식은 gzip이 정수 바이트 길이만 보고하기 때문에 실패합니다. 단일 바이트를 추가해도 압축 크기가 변경되지 않는 경우가 많아 대규모 동률과 잡음이 많은 그래디언트가 발생합니다.

빔 탐색 솔루션:

  1. 프롬프트 – 사용자가 제공한 프롬프트는 말뭉치 창에 연결되어 초기 컨텍스트의 일부로 처리됩니다.
  2. 컨텍스트 – 각 탐색 단계에서 gzip은 corpus_window + recent_tail을 보며, 여기서 recent_tail은 생성된 출력의 마지막 tail 바이트입니다.
  3. 확장 – 각 빔 후보는 말뭉치에 나타나는 모든 바이트로 확장됩니다. 모든 확장은 압축 길이 규칙으로 점수가 매겨집니다.
  4. 가지치기 – 상위 beam_width 후보(가장 압축 가능한)만 유지합니다. 고정된 horizon 바이트 동안 반복합니다.
  5. 커밋 – 최상의 전체 스팬을 출력하거나(또는 온도 매개변수에 비례하여 샘플링) 창을 앞으로 슬라이드합니다.

컨텍스트를 가장 최근 tail 바이트로 제한하면 모델이 자신의 최근 출력을 단순히 복사하는 사소한 루프에 빠지는 것을 방지할 수 있습니다. DEFLATE는 더 가까운 일치에 더 저렴한 코드를 제공하기 때문입니다.


생성된 출력의 모습

tiny Shakespeare 말뭉치에서 프롬프트 "MENENIUS:\n"로 도구 gzipt를 실행하면 다음이 생성됩니다:

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 .

텍스트는 유창한 셰익스피어가 아니지만, 소스의 조각과 구두점 패턴을 명확히 재사용하여 gzip의 압축 모델이 말뭉치의 일부 통계적 규칙성을 포착함을 확인합니다.


다른 압축기의 동작

저자는 또한 bzip2와 **Zstandard (zstd)**를 실험했습니다:

  • bzip2 – 교대 기호의 긴 실행(예: xyxyxy…)을 생성합니다. 이는 Burrows-Wheeler 변환에 의존하여 의미 있는 언어보다는 고도로 반복적인 패턴을 선호함을 반영합니다.
  • zstd – 주로 공백과 가끔 문자를 생성합니다. 실행 길이 인코딩이 단일 반복 바이트를 저렴하게 만들고, 공백과 줄바꿈이 셰익스피어 말뭉치에서 가장 저렴한 리터럴이기 때문입니다.

이러한 결과는 기본 압축 알고리즘의 특성이 생성된 텍스트의 스타일에 강하게 영향을 미친다는 것을 보여줍니다.


커뮤니티 통찰

"gzip으로 테스트 파일을 주제별로 분류할 수 있습니다: gzip -9 sports.txt testfile.txt … 테스트 파일은 가장 작은 크기의 .gz 파일을 가진 주제에 속합니다." – jll29 (HN)

"가능한 시퀀스의 공간은 탐색된 것보다 몇 자릿수 더 큽니다. 따라서 결과는 gzip이 연속 텍스트의 '타당성 테스터'로서 얼마나 잘 작동하는지에 대한 하한만 제공합니다." – mg (HN)

"bzip2와 zstd에서 어떻게 작동하는지 궁금했습니다… bzip2는 인간 언어와 닮지 않은 시퀀스를 생성합니다; zstd는 하나의 반복 바이트 실행을 거의 무료 실행 길이 시퀀스로 인코딩하며, 공백과 줄바꿈이 가장 저렴한 리터럴입니다." – networked (저자 댓글)

이러한 댓글은 두 가지 점을 강화합니다: (1) 압축 기반 분류는 알려진 기술이며, (2) 빔 탐색 접근 방식은 순진한 탐욕 탐색보다 훨씬 개선되지만, 탐색 공간은 여전히 엄청나게 크므로 이 방법은 gzip의 예측력에 대한 휴리스틱 추정만 제공합니다.


한계 및 열린 질문

  • 일관성 – 출력은 신경 언어 모델의 장거리 의미적 일관성이 부족합니다. DEFLATE는 32KiB만 뒤돌아보므로 플롯이나 캐릭터 아크를 포착할 수 없습니다.
  • 탐색 품질 – 빔 탐색은 여전히 휴리스틱입니다. 전역적으로 최적(가장 압축 가능한) 연속 텍스트가 발견된다는 보장은 없습니다.
  • 속도 대 표현력 – gzip은 입력 크기에 선형적으로 확장되며 현대 LLM보다 몇 자릿수 빠르게 실행되지만, 이 속도는 표현력의 비용으로 발생합니다.
  • 압축기로서의 LLM과 비교 – 일부 댓글 작성자는 대규모 언어 모델이 gzip과 비교하여 텍스트를 얼마나 잘 압축할지 궁금해하며, 보완적인 연구 방향을 강조합니다.

이것이 왜 중요한가

이 실험은 압축-예측 동등성 정리의 구체적인 증명을 제공합니다: 모든 무손실 압축기는 예측기로 재사용될 수 있으며, 그 반대도 가능합니다. gzip의 예측 능력은 기초적이지만, 이 접근 방식은 비신경 언어 모델 탐구, 확률 추정의 대리 지표로서 압축 알고리즘 벤치마킹, 대규모 AI 시대에 고전 알고리즘 재검토의 길을 엽니다.

Sources

관련