gzip도 언어 모델이 될 수 있을까?

2 weeks ago 19

GziPT는 신경망이나 학습된 매개변수 없이, 코퍼스와 프롬프트 뒤에 붙였을 때 가장 잘 압축되는 바이트열을 찾아 텍스트를 생성함 기반 원리는 압축과 예측의 동등성임. 압축기가 예상하는 데이터일수록 적은 비트로 표현되므로, 압축 결과의 길이를 후속 텍스트의 점수로 활용함 한 번에 다음 바이트 하나만 고르면 압축 길이가 정수 바이트 단위여서 동점이 많이 발생함. 빔 탐색으로 여러 바이트 앞까지 살핀 뒤 출력할 구간을 결정함 tiny Shakespeare 코퍼스를 넣은 결과, 일관된 문장은 아니지만 등장인물 이름과 대사 형식 등 원문 특성이 드러나는 텍스트를 생성함 구현은 Python 표준 라이브러리 zlib 를 사용하는 단일 파일임. 같은 텍스트를 반복 복사하는 현상을 줄이기 위해 생성 이력 중 최근 일부만 점수 계산에 사용함 압축 길이를 예측 점수로 사용하기 신경망 없는 언어 모델링에서는 가중치나 학습 없이 빈도만 세는 무제한 n-gram 모델로 Shakespeare 텍스트를 생성했음 Language Modeling is Compression의 압축과 예측의 동등성이 gzip을 이용한 생성 실험의 출발점임 모든 예측 모델은 본질적으로 압축기이며, 모든 압축 알고리듬은 예측 모델이라는 원리임 해당 논문도 압축기를 이용한 생성을 시도했지만 성능이 좋지 않았음. 논문에서 아이디어로 언급한 빔 탐색을 적용하자 이번 실험에서는 생성 품질이 크게 개선됨 예측 가능한 데이터는 짧게 표현할 수 있음. A가 100만 번 반복되는 파일은 간단히 기술할 수 있지만, 무작위 바이트 100만 개는 활용할 구조가 없어 거의 압축되지 않음 모델이 기호에 부여한 확률을 (p)라고 할 때, 부호화에 필요한 비트 수는 (-\log_2 p)임 확률이 높을수록 필요한 비트가 적으므로, 압축기에는 명시적으로 작성하지 않았더라도 확률 모델이 내재함 gzip의 DEFLATE는 32 KiB 슬라이딩 윈도 안의 최근 텍스트에서 일치하는 문자열을 찾음 이어질 바이트가 윈도 안의 텍스트와 일치하면, 바이트를 그대로 기록하는 대신 짧은 역참조로 부호화함 코퍼스를 윈도에 넣으면 코퍼스와 닮은 후속 문자열은 작게, 그렇지 않은 문자열은 크게 압축됨 후보 점수는 len(gzip(context + candidate)) 로 계산하며, 압축 결과가 짧을수록 더 잘 예측된 후보로 취급함 tiny Shakespeare를 코퍼스로 넣고 MENENIUS:\n을 프롬프트로 사용한...

Read Entire Article