tiktoken 인코딩 — 공개 목록과 커스텀 등록
tiktoken 인코딩
tiktoken은 OpenAI가 쓰는 인코딩들을 openai_public 확장에 정의해 두고 있어요. cl100k_base처럼 익숙한 이름이 여기서 나오고, 모델별로 어떤 인코딩을 쓸지 결정하는 로직도 담겨 있죠.
새 인코딩 지원하기
tiktoken을 확장해 새 인코딩을 지원하는 방법은 두 가지예요.
① 원하는 대로 Encoding 객체를 직접 만들어 넘겨주기. 특수 토큰을 바꿀 때는 반드시 다른 이름을 써야 한다는 점이 포인트예요.
cl100k_base = tiktoken.get_encoding("cl100k_base")
enc = tiktoken.Encoding(
name="cl100k_im",
pat_str=cl100k_base._pat_str,
mergeable_ranks=cl100k_base._mergeable_ranks,
special_tokens={
**cl100k_base._special_tokens,
"<|im_start|>": 100264,
"<|im_end|>": 100265,
}
)
② tiktoken_ext 플러그인 메커니즘으로 등록하기. tiktoken.get_encoding이 내 인코딩을 찾게 하려면 이 방식을 써요. tiktoken_ext 네임스페이스 패키지를 만들고, ENCODING_CONSTRUCTORS라는 딕셔너리를 정의하는 모듈을 넣는 구조예요. 딕셔너리의 키는 인코딩 이름, 값은 인자 없이 호출하면 tiktoken.Encoding 생성 인자를 돌려주는 함수예요. 예시는 tiktoken_ext/openai_public.py, 자세한 규칙은 tiktoken/registry.py에 있어요.
단순히 인코딩을 만들어 쓰는 것만 필요하다면 ①번이 낫고, 전역 등록이 필요하다면 ②번을 쓰면 돼요.
더 알아보기
- tiktoken 저장소
- tiktoken_ext/openai_public.py — 공개 인코딩 정의