LabHub

LLM 엔지니어링 · 토크나이저와 임베딩 · 실습

BPE 토크나이저 바닥부터 만들기

LabHub 에서 이어서 보기

목표

BPE 토크나이저를 라이브러리 없이 파이썬만으로 구현해, 학습부터 인코딩과 디코딩까지 한 사이클을 완성합니다.

왜 중요한가

토크나이저는 LLM 파이프라인에서 가장 먼저 실행되고 가장 적게 이해되는 부품입니다. 그런데 여기서 결정되는 것이 많습니다. 프롬프트 비용은 문자 수가 아니라 토큰 수로 매겨지고, 문맥 길이 제한도 토큰 단위입니다. 모델이 단어의 철자를 다루는 질문에 유독 약한 것도 토큰 경계가 문자 경계와 다르기 때문입니다.

직접 만들어 보면 이런 성질들이 추상적인 이야기가 아니라 구현의 자연스러운 귀결임을 알게 됩니다. 특히 마지막 단계에서 압축비를 재 보면, 한국어가 왜 영어보다 토큰을 많이 먹는지 숫자로 확인할 수 있습니다.

이 실습은 모델을 내려받지 않습니다. 인터넷도 GPU 도 필요 없습니다. 코퍼스는 실습 데이터베이스의 docs 표에 들어 있는 한국어 문서 30건입니다.

단계

작업 디렉터리는 /root/llm 입니다. 규칙을 정확히 지켜야 채점됩니다.

1. docs 표의 bodyid 오름차순으로 한 줄씩 /root/llm/corpus.txt 에 저장합니다. 30줄입니다.
2. 코퍼스에 나오는 문자의 빈도를 /root/llm/char_freq.tsv 에 저장합니다. 문자<탭>빈도 형식이고 공백 문자는 세지 않습니다. 정렬은 빈도 내림차순, 같으면 문자 오름차순입니다.
3. 기본 어휘를 /root/llm/vocab_base.txt 에 한 줄에 하나씩 저장합니다. 코퍼스의 문자(공백 제외)에 단어 끝 표시 문자 _ 를 더한 집합을 코드포인트 오름차순으로 정렬합니다.
4. BPE 병합 규칙 120개를 /root/llm/merges.txt 에 저장합니다. 한 줄에 앞토큰 뒤토큰 을 공백으로 구분해 적습니다. 학습 규칙은 이렇습니다.

참고

단계 8개

  1. 코퍼스 내려받기
  2. 문자 빈도 세기
  3. 기본 문자 어휘 만들기
  4. 병합 규칙 120개 학습하기
  5. 최종 어휘 사전 만들기
  6. 문서를 토큰 id 열로 바꾸기
  7. id 열만으로 원문 복원하기
  8. 압축비 계산하기