OpenAI tiktoken을 이용한 토큰 수 계산하기

OpenAI API를 이용할 때 모델별로 최대 토큰 수가 정해져 있습니다. API를 호출하기 전에 토큰 수를 미리 알 수 있으면 좋겠죠? 파이썬에서 텍스트를 토큰으로 변환해주는 tiktoken 패키지를 이용하면 토큰 수를 알 수 있습니다.

tiktoken 설치

tiktoken은 pip를 이용해 설치할 수 있습니다.

pip install tiktoken

인코딩 방법(토크나이저) 결정

OpenAI에 여러 종류의 토크나이저들이 있기 때문에 토큰화하기 전에 먼저 토크나이저를 지정해줍니다. 지정 방법에는 두 가지가 있는데, 토크나이저 이름을 이용하는 방법과 LLM 이름을 이용하는 방법 중 하나를 선택해 사용합니다.

import tiktoken

# 토크나이저 이름을 이용하는 방법
encoder = tiktoken.get_encoding("cl100k_base")

# LLM 이름을 이용하는 방법
encoder = tiktoken.encoding_for_model("gpt-3.5-turbo")

인코딩

토크나이저를 정한 후에는 다음과 같이 텍스트를 인코딩(토큰화)할 수 있습니다.

text = "I love Python!"

result = encoder.encode(text)
print(result) # 결과: [40, 3021, 13325, 0]

토큰 번호로 결과가 출력되네요. 토큰의 길이를 알고 싶다면 토큰 리스트의 길이를 이용하면 됩니다.

len(result) # 결과: 4

디코딩

다시 텍스트로 변환하려면 decode를 사용합니다.

encoder.decode(result) # 결과: 'I love Python!'

처음 입력했던 텍스트가 반환되는 것을 볼 수 있습니다. 토큰별로 확인하고 싶다면 decode_single_token_bytes를 사용합니다.

[encoder.decode_single_token_bytes(token) for token in result]
# 결과: [b'I', b' love', b' Python', b'!']

위 결과에서 작은 따옴표 앞에 붙은 bbytes 자료형을 의미합니다.

한글 인코딩/디코딩

이번에는 한글을 토큰화해보겠습니다.

text2 = "나는 파이썬이 좋아요!"

result2 = encoder.encode(text2)
print(result2) 
# 결과: [61415, 16969, 56069, 13094, 168, 235, 105, 13094, 66799, 233, 54059, 36811, 0]

print(len(result2)) # 결과: 13

한글 문장과 영어 문장의 단어수는 같은데 한글의 토큰 수가 훨씬 많은 것을 볼 수 있습니다. 토큰 수가 많아지면 OpenAI API 사용료도 증가하게 됩니다. 디코딩 결과는 다음과 같습니다.

encoder.decode(result2) # '나는 파이썬이 좋아요!'

[encoding.decode_single_token_bytes(token) for token in result2]
# 결과: [b'\xeb\x82\x98', b'\xeb\x8a\x94', b' \xed\x8c\x8c', b'\xec\x9d\xb4', b'\xec', b'\x8d', b'\xac', b'\xec\x9d\xb4', b' \xec\xa2', b'\x8b', b'\xec\x95\x84', b'\xec\x9a\x94', b'!']

댓글 남기기