수학 개념 지도
딥러닝과 언어 모델

토큰화와 BPE(Tokenization and byte-pair encoding)

글을 언어 모델⁠(language model)⁠이 다루는 정수⁠(integer)⁠ 열로 자르는 일. BPE는 말뭉치⁠(corpus)⁠에서 가장 자주 이웃해 나오는 두 기호를 하나로 합치는 일을 되풀이해 어휘를 만든다.

(a,b)∗=arg⁡max⁡(a, b)count⁡(a b),a b  ⟶  ab(a, b)^{\ast} = \arg\max_{(a,\,b)} \operatorname{count}(a\,b), \qquad a\,b \;\longrightarrow\; ab
먼저 보면 좋은 개념지프의 법칙허프만 부호

언어 모델은 글자를 읽지 않습니다. 정수의 열을 읽습니다. 글을 그런 정수 열로 자르는 규칙이 토크나이저⁠(tokenizer)⁠이고, 잘린 조각 하나가 토큰입니다. 어떻게 자르면 좋을까요? 글자 하나를 토큰⁠(token)⁠ 하나로 하면 목록은 작지만 글이 아주 길어집니다. 낱말 하나를 토큰 하나로 하면 글은 짧지만 목록이 아주 커집니다. 낱말의 빈도는 지프의 법칙⁠(Zipf's law)⁠을 따라서, 한두 번밖에 안 나오는 낱말이 긴 꼬리를 이루기 때문입니다. 게다가 목록에 없는 새 낱말(신조어, 오타, 사람 이름)은 아예 나타낼 수도 없습니다. 오늘날 대부분의 언어 모델은 그 중간을 씁니다. 자주 나오는 덩어리는 통째로 한 토큰으로, 드문 낱말은 여러 조각으로 자르는 부분 낱말⁠(subword)⁠ 토큰입니다.

그 목록(어휘)을 만드는 가장 널리 쓰이는 방법이 BPE(byte pair encoding, 바이트 쌍 부호화⁠(byte-pair encoding)⁠)입니다. 규칙은 하나입니다. 말뭉치에서 이웃한 두 기호의 쌍을 모두 세고, 가장 많이 나온 쌍을 새 기호 하나로 합친다. 원하는 어휘 크기가 될 때까지 이것을 되풀이한다. 아래는 낱말 몇 개와 각 낱말이 나온 횟수로 된 작은 말뭉치입니다. 말뭉치: . 한 단계씩 넘겨 보세요.

왼쪽: 낱말마다 지금의 토큰 조각. 첫 칸은 그 낱말이 말뭉치에 나온 횟수입니다. 노란 칸이 이번 단계에 합쳐진 토큰입니다. 오른쪽: 지금 조각들에서 이웃한 쌍의 등장 횟수 상위 5개(같은 횟수면 먼저 나온 쌍이 위). 맨 위 쌍이 다음 단계에 합쳐집니다.

한국어 말뭉치에서 가장 먼저 합쳐지는 것은 ‘었+다’와 ‘는+다’, 곧 어미입니다. 아무도 문법을 알려 주지 않았는데, 가장 자주 되풀이되는 조각이 먼저 한 덩어리가 됩니다. 반대로 덜 나온 ‘잡는다’는 열 번의 병합이 끝날 때까지 ‘잡|는다’로 남습니다. 영어 말뭉치의 _는 낱말 끝 표시입니다. 이 표시 덕분에 ‘widest’ 끝의 ‘est_’(가장 ~한)와 ‘estate’ 앞머리의 ‘est’ 같은 조각이 서로 다른 토큰이 됩니다. 병합은 낱말 안에서만 일어나므로, 합칠 쌍이 없어질 때까지 계속하면 결국 낱말 하나하나가 모두 한 토큰이 됩니다. 그래서 병합 횟수는 글자 단위와 낱말 단위 사이의 어디쯤에 설지를 정하는 손잡이입니다.

병합 하나는 토큰 수를 그 쌍의 등장 횟수만큼 정확히 줄입니다(같은 기호가 연달아 나와 쌍이 서로 겹치는 경우만 빼고). 그러니 BPE는 압축 알고리즘⁠(algorithm)⁠이기도 합니다. 실제로 BPE는 1994년 필립 게이지가 '가장 흔한 바이트 쌍을 쓰이지 않는 바이트 하나로 바꾸기를 되풀이하는' 압축법으로 먼저 발표했고, 2016년 리코 제니히 등이 기계 번역⁠(machine translation)⁠의 어휘를 만드는 데 가져왔습니다. 흔한 것을 짧게 적는다는 점에서 허프만 부호⁠(Huffman coding)⁠와, 되풀이되는 문자열을 사전에 올린다는 점에서 렘펠–지브 압축⁠(Lempel–Ziv compression)⁠과 같은 생각입니다. 다만 BPE는 매 단계 가장 좋아 보이는 쌍을 고르는 욕심쟁이 알고리즘⁠(greedy algorithm)⁠이라, 같은 어휘 크기에서 토큰 수를 가장 적게 만든다는 보장은 없습니다.

새 글을 자를 때는 배운 병합을 배운 순서대로 다시 적용합니다. 사전에서 가장 긴 조각을 찾아 맞추는 것이 아닙니다. 예를 들어 한국어 말뭉치에서 병합 여덟 번을 배운 뒤 말뭉치에 없던 ‘읽었고’를 자르면, 병합 목록의 어느 규칙도 맞는 자리가 없어 ‘읽|었|고’ 세 토큰이 됩니다. 반면 ‘먹었고’는 여덟째 규칙(먹+었) 덕분에 ‘먹었|고’ 두 토큰입니다.

실제 토크나이저는 글자가 아니라 바이트에서 출발하는 경우가 많습니다. GPT-2(2019)의 토크나이저는 UTF-8 바이트 256개에서 출발해 병합을 5만 번 하고 특수 토큰 하나를 더해 어휘 50,257개를 만들었습니다. 바이트에서 출발하면 어떤 글이든 적어도 바이트 단위로는 자를 수 있어 '모르는 낱말'이 사라집니다. 대신 한글 음절 하나는 UTF-8로 3바이트(‘먹’ = EB A8 B9)라서, 학습 자료에 한국어가 적으면 음절조차 한 토큰으로 합쳐지지 못합니다. 그러면 같은 내용이 영어보다 훨씬 많은 토큰이 됩니다. 같은 문장을 여러 언어로 옮겨 토큰 수를 비교한 연구(2023년 알렉산다르 페트로프 등)는 토크나이저와 언어에 따라 최대 15배까지 차이가 난다고 보고했습니다. 토큰 수로 요금과 문맥 길이를 매기는 서비스에서는 이 차이가 곧 비용과 한계의 차이입니다.

모델은 토큰 번호를 볼 뿐 그 안의 글자를 직접 보지 않습니다. 'strawberry'가 토큰 두세 개로 들어가면 그 안에 r이 몇 개인지는 입력에 드러나 있지 않고, 모델이 학습에서 따로 익혀야 합니다. 언어 모델이 글자 세기나 긴 수의 자릿수 계산에서 엉뚱하게 틀리는 원인으로 토큰화가 자주 지목되는 까닭입니다. 다만 그것이 유일한 원인이라는 증거는 없습니다.

어휘 크기 V는 저울질입니다. V가 크면 같은 글이 더 적은 토큰이 되어, 길이의 제곱으로 비싸지는 어텐션⁠(attention)⁠의 부담이 줄어듭니다. 대신 토큰마다 벡터⁠(vector)⁠ 하나를 두는 임베딩⁠(embedding)⁠ 행렬(V×d)이 커지고, 드문 토큰은 학습에서 볼 기회가 적습니다. 요즘 모델의 어휘는 3만 개 남짓(라마 2의 32,000개)에서 25만 개 남짓(젬마의 256,000개)까지 퍼져 있습니다. BPE 말고도 방법이 있습니다. 워드피스(WordPiece)는 2012년 구글의 마이크 슈스터와 나카지마 가이스케가 일본어·한국어 음성 검색을 위해 만든 것입니다. 쌍을 고를 때 횟수 대신 합쳤을 때 말뭉치의 가능도⁠(likelihood)⁠가 얼마나 오르는지를 보며, BERT(2018)가 썼습니다. 유니그램 언어 모델 방식(구도 다쿠, 2018)은 반대 방향으로 갑니다. 큰 어휘에서 출발해, 확률⁠(probability)⁠ 모델로 보아 덜 쓸모 있는 토큰을 쳐 냅니다. 센텐스피스(SentencePiece)는 BPE와 유니그램 방식을 담은 도구로, 띄어쓰기도 보통 기호(▁)로 다룹니다. 그래서 띄어쓰기가 없는 일본어·중국어도 미리 낱말을 나누지 않고 처리합니다.

이어지는 곳. 토큰 번호 하나는 모델 안에서 임베딩 행렬의 한 행, 곧 단어 임베딩⁠(word embedding)⁠ 같은 벡터로 바뀌어 트랜스포머⁠(transformer)⁠에 들어갑니다. 언어 모델이 배우는 것은 이 토큰 열의 확률이라서, 퍼플렉시티⁠(perplexity)⁠ 같은 점수도 토크나이저에 따라 달라집니다. 압축의 눈으로 보면, 흔한 것에 짧은 부호를 줄 때 평균⁠(mean)⁠ 길이를 어디까지 줄일 수 있는지는 원천 부호화 정리⁠(source coding theorem)⁠가 엔트로피⁠(entropy)⁠로 정해 줍니다. 토큰마다 확률을 주는 모델에 산술 부호화⁠(arithmetic coding)⁠를 붙이면 그 한계에 다가가는, BPE보다 훨씬 강한 압축기가 됩니다. 앞의 토큰 몇 개가 이어 나온 횟수를 세어 다음 토큰을 맞히는 옛 언어 모델은 n-그램⁠(n-gram)⁠입니다.

이 개념이 나오는 긴 글

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

이 개념을 언급하는 페이지

이 페이지가 가리키는 개념