AI VIDEO BRIEFING

GPT 토크나이저와 BPE 토큰화 완전 해설 — LLM이 글자를 다루는 방법

안드레이 카파시가 GPT 토크나이저를 바닥부터 구현하며 바이트 페어 인코딩(BPE)과 UTF-8, 어휘 크기 절충, 비영어·코드 처리 문제까지 토큰화의 원리를 설명한다.

안드레이 카파시가 직접 만드는 GPT 토크나이저: 토큰화가 LLM의 숨은 핵심인 이유 영상 대표 이미지

핵심 메시지

  • 토큰화는 문자열을 LLM의 기본 단위인 토큰(정수)으로 바꾸는 과정으로, LLM에서 일어나는 많은 이상 현상의 근원이다.
  • 최신 모델은 문자 단위가 아니라 바이트 페어 인코딩(BPE)으로 자주 등장하는 바이트 쌍을 반복해서 병합해 어휘를 만든다.
  • 문자열은 UTF-8로 인코딩해 바이트로 다루며, 256개의 바이트에서 시작해 병합을 거듭하며 어휘를 키운다.
  • 어휘 크기는 하이퍼파라미터로, 너무 작으면 시퀀스가 길어지고 너무 크면 임베딩·소프트맥스가 커져 최적 지점이 존재한다.
  • 같은 단어라도 앞뒤 공백·대소문자에 따라 다른 토큰이 되며, 비영어와 들여쓰기 많은 코드는 더 많은 토큰으로 쪼개져 불리하다.

쉽게 이해하기

안드레이 카파시는 토큰화를 'LLM 작업에서 가장 싫어하는 부분'이라고 표현하면서도, 철자 처리·산술·비영어 처리·코드 등에서 나타나는 LLM의 약점이 사실은 토큰화에서 비롯되는 경우가 많기 때문에 반드시 이해해야 한다고 강조한다. 토큰은 모델이 다루는 가장 작은 단위, 즉 '원자'다.

이전 'GPT를 처음부터 만들기' 영상에서는 셰익스피어 데이터셋의 65개 문자를 정수로 매핑하는 문자 단위 토크나이저를 썼지만, 실제 최신 모델은 청크 단위로 어휘를 구성한다. 그 방법이 GPT-2 논문에서 도입한 바이트 페어 인코딩(BPE)이며, GPT-2는 약 50,257개의 어휘와 1,024 토큰 컨텍스트를 사용했다.

웹앱 Tiktokenizer로 보면 같은 문자열이라도 'egg'가 문장 맨 앞이냐 공백 뒤냐, 소문자냐 대문자냐에 따라 다른 토큰이 된다. 숫자도 임의로 한 토큰이 되거나 여러 토큰으로 갈린다. 모델은 이렇게 갈라진 표현들이 같은 개념임을 학습 데이터로부터 스스로 익혀야 한다.

문자열을 다루기 위해 파이썬에서는 유니코드 코드 포인트를 UTF-8로 인코딩해 1~4바이트의 가변 길이 바이트 스트림으로 바꾼다. 코드 포인트(약 15만 개)를 그대로 어휘로 쓰면 어휘가 너무 크고 표준이 계속 바뀌어 불안정하므로, 256개 바이트에서 출발해 BPE로 압축한다.

BPE 구현은 가장 자주 등장하는 인접 쌍을 찾고(get_stats), 그 쌍을 새 토큰으로 병합(merge)하는 과정을 어휘 크기에 도달할 때까지 반복한다. 병합 결과는 작은 이진 '숲(forest)' 형태로 기록되며, 디코딩은 이 어휘 테이블로 토큰을 다시 바이트로 잇고 UTF-8 디코딩(errors='replace')으로 문자열을 복원한다.

주요 인사이트

  • 토크나이저는 LLM과 완전히 분리된 전처리 단계이며 자체 학습 데이터셋을 가진다. 학습 데이터에 일본어가 많으면 일본어 토큰이 더 많이 병합돼 일본어 시퀀스가 짧아진다.
  • GPT-2 토크나이저로 300토큰이던 문자열이 GPT-4의 cl100k_base에서는 약 185토큰으로 줄어든다. 어휘를 약 5만에서 10만으로 키워 같은 텍스트를 더 밀도 높게 모델에 넣는다.
  • GPT-4 토크나이저는 여러 개의 공백을 하나의 토큰으로 묶어 파이썬 코드 처리를 크게 개선했다. GPT-2가 파이썬에 약했던 이유는 들여쓰기 공백이 모두 별개 토큰이 돼 시퀀스가 길어졌기 때문이다.
  • 비영어 텍스트는 더 잘게 쪼개져 같은 의미를 표현하는 데 더 많은 토큰을 쓰고, 그만큼 트랜스포머의 제한된 컨텍스트를 빨리 소진한다.
  • 토큰 128처럼 단독으로는 유효하지 않은 UTF-8 시작 바이트를 디코딩하면 오류가 나므로, OpenAI 코드처럼 errors='replace'로 대체 문자를 넣는 것이 표준적인 처리다.

자주 묻는 질문

토큰화란 무엇이고 왜 중요한가?

토큰화는 문자열·텍스트를 LLM의 기본 단위인 토큰(정수) 시퀀스로 바꾸는 과정이다. 철자 검사, 간단한 산술, 비영어 처리, 코드 처리 등에서 보이는 LLM의 약점 상당수가 토큰화에서 비롯되기 때문에 핵심적으로 이해해야 한다.

바이트 페어 인코딩(BPE)은 어떻게 작동하나?

UTF-8 바이트(256개)에서 시작해, 가장 자주 함께 등장하는 인접 토큰 쌍을 찾아 새 토큰 하나로 병합하는 과정을 어휘 크기에 도달할 때까지 반복한다. 새로 생긴 토큰도 이후 병합의 대상이 되며, 그 결과로 텍스트가 점점 압축된다.

왜 유니코드 코드 포인트를 그대로 토큰으로 쓰지 않나?

유니코드는 약 15만 개 코드 포인트가 있어 어휘가 지나치게 커지고, 표준이 계속 갱신되어 안정적이지 않기 때문이다. 대신 UTF-8 인코딩으로 바이트 스트림을 만든 뒤 BPE로 적절한 크기의 어휘로 압축한다.

GPT-2와 GPT-4 토크나이저의 차이는?

GPT-4 토크나이저는 어휘를 약 10만으로 키우고 여러 공백을 한 토큰으로 묶는 등 설계를 개선해, 같은 텍스트를 더 적은 토큰으로 표현한다. 덕분에 파이썬 코드 처리 능력이 크게 향상됐다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식