토큰화와 BPE(Tokenization and byte-pair encoding)
글을 언어 모델(language model)이 다루는 정수(integer) 열로 자르는 일. BPE는 말뭉치(corpus)에서 가장 자주 이웃해 나오는 두 기호를 하나로 합치는 일을 되풀이해 어휘를 만든다.
언어 모델은 글자를 읽지 않습니다. 정수의 열을 읽습니다. 글을 그런 정수 열로 자르는 규칙이 토크나이저(tokenizer)이고, 잘린 조각 하나가 토큰입니다. 어떻게 자르면 좋을까요? 글자 하나를 토큰(token) 하나로 하면 목록은 작지만 글이 아주 길어집니다. 낱말 하나를 토큰 하나로 하면 글은 짧지만 목록이 아주 커집니다. 낱말의 빈도는 지프의 법칙(Zipf's law)을 따라서, 한두 번밖에 안 나오는 낱말이 긴 꼬리를 이루기 때문입니다. 게다가 목록에 없는 새 낱말(신조어, 오타, 사람 이름)은 아예 나타낼 수도 없습니다. 오늘날 대부분의 언어 모델은 그 중간을 씁니다. 자주 나오는 덩어리는 통째로 한 토큰으로, 드문 낱말은 여러 조각으로 자르는 부분 낱말(subword) 토큰입니다.
그 목록(어휘)을 만드는 가장 널리 쓰이는 방법이 BPE(byte pair encoding, 바이트 쌍 부호화(byte-pair encoding))입니다. 규칙은 하나입니다. 말뭉치에서 이웃한 두 기호의 쌍을 모두 세고, 가장 많이 나온 쌍을 새 기호 하나로 합친다. 원하는 어휘 크기가 될 때까지 이것을 되풀이한다. 아래는 낱말 몇 개와 각 낱말이 나온 횟수로 된 작은 말뭉치입니다. 말뭉치:
한국어 말뭉치에서 가장 먼저 합쳐지는 것은 ‘었+다’와 ‘는+다’, 곧 어미입니다. 아무도 문법을 알려 주지 않았는데, 가장 자주 되풀이되는 조각이 먼저 한 덩어리가 됩니다. 반대로 덜 나온 ‘잡는다’는 열 번의 병합이 끝날 때까지 ‘잡|는다’로 남습니다. 영어 말뭉치의 _는 낱말 끝 표시입니다. 이 표시 덕분에 ‘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)입니다.
이 개념이 나오는 긴 글
이 개념을 언급하는 페이지
- n-그램 언어 모델
… 통계를 나누어 쓰며 희소성 문제를 누그러뜨렸습니다. 오늘날의 대형 언어 모델도 '앞 문맥으로 다음토큰(낱말이나 낱말 조각)의 확률을 매긴다'는 틀은 같습니다. 다만 확률을 횟수로 세지 않고 …
- 렘펠–지브 압축
… 되풀이하는 바이트 쌍 부호화(BPE, 1994)가 있습니다. 오늘날 언어 모델이 글을 자를 어휘를 만드는토큰화가 이 방법을 씁니다. 왜 이것이 좋은 압축일까요? 렘펠과 지브, 그리고 뒤이은 연구들은 원천이 정상적이고 …
- 기계 학습
… 마르코프 연쇄, 은닉 마르코프 모델이고, 언어를 배우는 모형은 n-그램과 단어 임베딩에서토큰화, 어텐션, 트랜스포머, 언어 모델로 이어집니다. 분류 모형으로는 로지스틱 회귀, ⟦결정 …
- 인공지능
… 문장을 처리하는 트랜스포머를 발표했습니다. 병렬 계산이 쉬워 아주 큰 모델을 학습시킬 수 있었고, 글을토큰으로 쪼개 다음 토큰을 맞히는 언어 모델을 인터넷 규모의 글로 학습시키는 방식이 자리 잡았습니다. …
- 트랜스포머
… 이어지는 곳. 블록의 핵심인 어텐션은 쿼리와 키의 내적과 소프트맥스로 이루어지고, 입력 토큰은토큰화가 정합니다. 맨 끝의 소프트맥스 출력으로 학습하는 목표는 언어 모델의 교차 엔트로피이고, 기울기는 …
- 언어 모델과 다음 토큰 예측
… 글의 양이 토크나이저마다 다르므로, 토크나이저가 다른 모델끼리는 퍼플렉시티를 바로 비교할 수 없습니다(토큰화). 그럴 때는 글자당 또는 바이트당 비트로 바꿔 비교합니다. 섀넌의 맞히기 실험. 1951년 ⟦클로드 …
- 디코딩: 온도, top-p, 빔 탐색
… 겹치는 부분 문제가 없기 때문입니다. 디코딩이 고르는 것은 토큰 번호이고, 번호를 글로 되돌리는 사전은토큰화가 정합니다. 같은 질문에 온도를 올려 풀이를 여러 번 뽑은 뒤 최종 답을 다수결로 고르는 방법(자기 …
- 언어 모델의 발전사: RLHF 이후
… 순환은 상태 공간 모형에서 이어집니다. 모든 모델의 뼈대인 트랜스포머와 어텐션, 입력을 자르는토큰화, 글을 뽑는 디코딩, 크기와 성능의 경험식인 규모의 법칙은 이 연표의 모든 줄에 걸쳐 있습니다. …