수학 개념 지도
정보 이론

렘펠–지브 압축(Lempel–Ziv compression)

앞에 나왔던 문자열을 '몇 칸 앞에서 몇 글자'라는 참조로 바꾸는 사전식 압축. 확률⁠(probability)⁠을 미리 몰라도 엔트로피⁠(entropy)⁠에 다가가며, zip·gzip·PNG의 바탕이다.

abracad ⟨7, 4⟩  ⟶  abracadabra\texttt{abracad}\,\langle 7,\ 4 \rangle \;\longrightarrow\; \texttt{abracadabra}
먼저 보면 좋은 개념원천 부호화 정리

글에는 되풀이가 많습니다. 같은 낱말, 같은 어미, 같은 구절이 거듭 나옵니다. 1977년 이스라엘 테크니온 공과대학의 아브라함 렘펠과 야코브 지브는 글을 앞에서부터 읽으며, 지금 자리에서 시작하는 문자열이 앞에 이미 나온 적이 있으면 그것을 'dd칸 앞에서 시작하는 ℓ\ell글자'라는 참조 ⟨d,ℓ⟩\langle d, \ell \rangle로 바꾸고, 없으면 글자를 그대로 적는 방법을 내놓았습니다(LZ77). 풀 때는 참조를 만날 때마다 이미 풀어 놓은 부분에서 그대로 베껴 오면 됩니다. 글자마다의 확률표가 전혀 필요 없다는 점이 허프만 부호⁠(Huffman coding)⁠와 다릅니다.

글: . 세 글자 이상 겹칠 때만 참조로 바꿉니다.

흰검은 글자는 그대로 적은 글자, 청록 글자는 참조로 베낀 글자, 회색은 아직 읽지 않은 글자입니다. 노란 밑줄이 지금 토큰⁠(token)⁠이 만드는 부분, 파란 밑줄과 호가 베껴 오는 곳입니다.

지금까지의 출력:

'hahaha…'를 보세요. 참조는 자기 자신과 겹쳐도 됩니다. ha 두 글자를 적은 뒤의 ⟨2,ℓ⟩\langle 2, \ell \rangle은 두 칸 앞에서 한 글자씩 베끼는데, 베끼는 동안 새로 쓴 글자를 다시 베끼니 ha가 계속 이어집니다. 그래서 'ha'를 번 되풀이한 글자 개가 토큰 개로 줄어듭니다. 늘어나는 것은 길이 ℓ을 적는 자릿수뿐이고, 그것은 로그만큼만 자랍니다.

실제 압축기는 가장 긴 겹침을 빨리 찾으려고 세 글자짜리 조각마다 그것이 나왔던 자리들을 해시 테이블⁠(hash table)⁠에 적어 둡니다. 세 글자짜리 조각은 n = 3인 n-그램⁠(n-gram)⁠입니다. zip, gzip, PNG가 쓰는 DEFLATE는 거리를 32KB 안쪽으로 제한한 LZ77로 되풀이를 없앤 뒤, 남은 글자와 참조를 허프만 부호로 한 번 더 줄입니다. 1978년의 LZ78과 이것을 미국의 테리 웰치가 고친 LZW(1984)는 참조 대신 지금까지 본 문자열의 사전을 키워 가며 번호로 가리키며, GIF 그림 형식이 LZW를 씁니다. 사전을 키우는 또 다른 압축법으로, 가장 자주 이웃해 나오는 두 기호를 새 기호 하나로 바꾸기를 되풀이하는 바이트 쌍 부호화(BPE, 1994)가 있습니다. 오늘날 언어 모델⁠(language model)⁠이 글을 자를 어휘를 만드는 토큰화가 이 방법을 씁니다.

왜 이것이 좋은 압축일까요? 렘펠과 지브, 그리고 뒤이은 연구들은 원천이 정상적이고 에르고딕⁠(ergodic)⁠하기만 하면, 글이 길어질수록 이런 방법의 기호당 비트 수가 원천의 엔트로피율⁠(entropy rate)⁠로 수렴⁠(convergence)⁠한다는 것을 보였습니다. 정상적이라는 것은 기호를 내는 확률 규칙이 시간에 따라 바뀌지 않는다는 뜻입니다. 에르고딕하다는 것은 긴 글 하나에서 센 빈도가 글이 길어질수록 원천 전체의 확률에 다가간다는 뜻입니다. 상태가 유한 개이고 전이 확률⁠(transition probability)⁠이 고정되어 있으며 어느 상태에서든 모든 상태로 갈 수 있는 마르코프 연쇄(정상 분포⁠(stationary distribution)⁠에서 출발한 것)가 그런 예입니다. 분포를 모르고도 원천 부호화 정리⁠(source coding theorem)⁠의 한계에 닿으니 '범용' 압축이라 부릅니다. 반면 '무작위 글'처럼 되풀이가 없는 글은 거의 줄지 않습니다. 이것은 방법의 결함이 아닙니다. 비둘기집 원리⁠(pigeonhole principle)⁠에 따르면 어떤 압축도 모든 글을 줄일 수는 없고, 줄어드는 글이 있으면 줄지 않는 글도 있어야 합니다.

이어지는 곳. 압축된 길이는 그 글이 얼마나 규칙적인지를 재는 실용적인 잣대입니다. 압축된 길이에 풀기 프로그램의 길이(글과 상관없는 상수)를 더한 값은 콜모고로프 복잡도⁠(Kolmogorov complexity)⁠보다 작을 수 없습니다. 거꾸로 말하면 콜모고로프 복잡도는, 그 상수를 빼면, 어떤 압축기도 밑돌 수 없는 이론적 하한입니다. 두 글을 이어 붙여 압축했을 때 따로 압축한 것보다 얼마나 줄어드는지로 글 사이의 거리를 잴 수도 있습니다. 여러 언어로 된 같은 글을 이런 거리로 묶어 비교 언어학⁠(comparative linguistics)⁠의 계통수⁠(phylogenetic tree)⁠와 비슷한 나무를 얻은 연구도 있습니다. 흔한 낱말이 압도적으로 자주 나오는 지프의 법칙⁠(Zipf's law)⁠이 글이 잘 줄어드는 한 가지 이유입니다. LZMA(xz, 7-Zip)처럼 참조를 찾은 뒤 그 결과를 다시 산술 부호화⁠(arithmetic coding)⁠의 한 갈래인 범위 부호로 적는 압축기도 많습니다.

이 개념이 나오는 긴 글

계산언어학 말을 세는 기계 문법은 규칙일까, 확률일까? 파니니의 문법에서 촘스키의 위계, 섀넌의 영어 엔트로피, 오늘날의 언어 모델까지. 정보 이론과 압축 짧게 보내기 모스 부호는 왜 E를 점 하나로 보낼까? 섀넌의 엔트로피가 정한 압축의 한계와, 허프만 부호에서 JPEG까지 그 한계에 다가간 방법들. 언어 모델 다음 단어를 맞히는 기계 다음 낱말을 짐작하는 일만으로 어디까지 갈 수 있을까? 마르코프의 글자 세기에서 섀넌의 추측 게임, 트랜스포머와 규모의 법칙, 사람의 선호까지. 밑바닥에는 확률의 곱셈 규칙과 로그 하나가 있고, 그 수학은 모델이 왜 그럴듯하게 틀리는지도 말해 준다. 압축과 과학 압축하는 것이 이해하는 것이다 튀코 브라헤가 20년 동안 적은 행성의 위치를 케플러는 법칙 세 줄로 줄였다. 짧게 적는 일과 이해하는 일은 정말 같은 일일까? 오컴의 면도날을 비트로 재는 법, 과적합을 압축의 실패로 읽는 법, 그리고 그 말이 정리인 곳과 철학인 곳.

이 개념을 언급하는 페이지

이 페이지가 가리키는 개념