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

4 days ago 17

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

Read Entire Article