Python/NLP Code

ChatGPT, GPT-4 토큰 개수 카운팅 및 인코딩/디코딩 방법(파이썬 tiktoken 모듈 활용)

jimmy_AI 2023. 9. 19. 00:00
반응형

GPT-3.5(ChatGPT) 및 GPT-4 활용을 위하여 원하는 글의 토큰 개수를 세거나

Encoding 및 Decoding 과정이 필요할 때가 종종 있습니다.

 

이 과정은 파이썬의 tiktoken 라이브러리의 기능을 활용하면 해당하는 토크나이저를

쉽게 불러올 수 있고, 토큰 개수 카운팅 및 인코딩/디코딩도 쉽게 할 수 있습니다.

 

이번 글에서는 해당 모듈의 사용법을 중심으로 위의 방법들을 간략하게 정리해보도록 하겠습니다.

 

 

토크나이저 선언 방법

우선, !pip install tiktoken 명령어로 모듈 설치를 진행해줍니다.

 

이후, ChatGPT(gpt-3.5-turbo) 혹은 GPT-4에 대하여 토크나이저를 가져오려면

cl100k_base 인코딩 방법을 지정해주시면 됩니다.

이후 모델명을 지정하여 최종 토크나이저를 불러올 수 있습니다.

import tiktoken

tokenizer = tiktoken.get_encoding("cl100k_base")
tokenizer = tiktoken.encoding_for_model("gpt-3.5-turbo") # "gpt-4"도 가능

 

물론, GPT-2 등 이전 모델에 대한 토크나이저도 마찬가지로 가져올 수 있습니다.

# 참고: gpt-2 등의 이전 버전 모델에 적용하는 경우
tokenizer = tiktoken.get_encoding("gpt2")

 

반응형

 

인코딩 및 디코딩 방법(토큰 개수 세기 과정에도 활용 가능)

위에서 선언된 토크나이저에 대한 인코딩 과정은 아래와 같이 해주시면 됩니다.

text = "안녕하세요. 반갑습니다!"

tokenizer.encode(text) # [31495, 230, 75265, 243, 92245, 13, 64857, 14705, 239, 39331, 0]

 

반환된 결과에 대한 길이를 구하면 토큰 개수 카운팅도 가능할 것입니다.

encoding_result = tokenizer.encode(text)
print(len(encoding_result)) # 11

 

디코딩 과정도 인코딩과 유사한 방식으로 진행이 가능합니다.

encode_result = [31495, 230, 75265, 243, 92245, 13, 64857, 14705, 239, 39331, 0]

tokenizer.decode(encode_result) # '안녕하세요. 반갑습니다!'

 

심화 예제로 토큰화 결과의 앞부분만 활용하여 디코딩을 진행한 예시는 아래와 같습니다.
(input 문단의 길이가 매우 길어 문단을 나누어야 하는 상황 등에 활용이 가능합니다.)

encode_result = tokenizer.encode(text)[:6]
tokenizer.decode(encode_result) # '안녕'