본문 바로가기
IT/CHATGPT

[ChatGPT] Python 토큰(Token) 계산하기

by Tony Jung 2023. 12. 18.
반응형

Python 을 이용한 Token 계산

ChatGPT API를 이용하여 질문과 답변을 얻기 위해서는 때때로 질문 (Prompt)의 Token 수 계산이 필요할 경우가 있답니다. 

예를 들어 Prompt를  GPT로 장문을 요약할 경우, Prompt의 길이가 기본 토큰의 길이를 벗어난다면 Prompt를 Token 수를 뽑은 다음 Token의 길이에 맞게 잘라서 여러번 요약하는 과정을 반복 하여야 합니다. 이후  요약된 내용들을 합쳐서 최종으로 요약하는 방법이 필요하겠지요.

참고로 각 모델별 토큰 길이는 아래의 포스트에서 ~ 

2023.12.18 - [IT/CHATGPT] - [ChatGPT] Token (Tokenizer) 이란?

또는 많은 데이터를 질문/답변, 요약 등에 활용할 때 예산을 예측하는 과정에서 역시 필요할 것입니다. 

아래는 Python을 이용하여   Prompt의 길이를 확인하고 토큰수를 추출하는 간단한  방법입니다. 

import tiktoken


def encoding_getter(encoding_type: str):

    return tiktoken.encoding_for_model(encoding_type)

def tokenizer(string: str, encoding_type: str) -> list:

    encoding = encoding_getter(encoding_type)
    #print (encoding)
    tokens = encoding.encode(string)
    return tokens

def token_counter(string: str, encoding_type: str) -> int:

    num_tokens = len(tokenizer(string, encoding_type))
    return num_tokens



def main():
    prompt_text="Carpe Diem"
    prompt_text2 = "현재를 즐겨라"

    num_tokens = token_counter(prompt_text, "gpt-3.5-turbo")
    print(prompt_text+"의 토큰 수는 "+ str(num_tokens) +"입니다")


    num_tokens=token_counter(prompt_text2, "gpt-3.5-turbo")
    print(prompt_text2+"의 토큰 수는 "+ str(num_tokens) +"입니다")
if __name__ == '__main__':
    main()

이전 포스팅과 같이 Prompt는 "Carpe Diem"과 "현재를 즐겨라" 로 영문과 한글을 분리해서 비교하는 코드입니다. 

반응형

Token_Counter 함수로 Prompt와 GPT 모델을 전송하여야 합니다. GPT 모델 마다 토큰 계산 방식이 다르기에 다른 결과가 나올 것입니다. 이전 포스팅에 명시된  모델명을 넣으시면 됩니다. 여기서는 동일하게 gpt-3.5-turbo를 기준으로 할게요. 

Encording_getter 함수로 Gpt 모델 명을 보내면 GPT 모델명에 맞는 Encording 모델을 반환합니다. gpt-3.5-turbo 의 Encording 모델은 "cl100k_base" 며 GPT 모델을 변경해가며 Encording모델을 확인 할 수 있습니다. (주석 처리된 Print문) 

반환된 Encording 모델을 이용하여 Prompt의 Token을 계산하면  이전 포스팅에서와 같이 영문은 4개의 토큰으로 한글은 9개의 토큰으로 반환됩니다. 모델이 같으니..

Carpe Diem의 토큰 수는 4입니다
현재를 즐겨라의 토큰 수는 9입니다

Process finished with exit code 0

여러 긴 Prompt로 테스트를 해보면 OpenAI 사이트에서 제공하는 Tokenizer의 결과값과 100% 일치하지는 않네요. 그래도 거의 근접값을 반환하니.. 많이 활용해 보시기 바랍니다. 

구독, 좋아요,광고클릭~ ㅎㅎ

 

 

반응형

댓글