문장의 토큰 수를 확인하는 방법
자연어 처리(NLP)에서 문장을 분석할 때, 문장을 구성하는 단위인 **토큰(token)**을 확인하는 것은 매우 중요합니다. 이번 글에서는 Transformers 라이브러리를 활용하여 문장의 토큰 수를 확인하는 방법을 소개합니다.
1. 토큰이란?
토큰(Token)이란 NLP에서 문장을 분석할 때 가장 작은 단위로 분리된 요소를 의미합니다. 일반적으로 단어, 서브워드(subword), 문자(character) 단위로 나뉘며, 사용되는 모델에 따라 다르게 처리됩니다.
예를 들어, 다음 문장이 있다고 가정해 보겠습니다.
"이미지에는 분홍색 담요 위에 두 마리의 고양이가 누워 있습니다."
이 문장을 토큰화하면 모델에 따라 다음과 같은 결과가 나올 수 있습니다.
- 단어 기반 토큰화:
['이미지에는', '분홍색', '담요', '위에', '두', '마리의', '고양이가', '누워', '있습니다.']
- 서브워드 기반 토큰화:
['이미지', '##에는', '분홍색', '담', '##요', '위', '##에', '두', '마리', '##의', '고양이', '##가', '누워', '있습니다', '.']
- 문자 기반 토큰화:
['이', '미', '지', '에', '는', ' ', '분', '홍', '색', ...]
이번 글에서는 Hugging Face의 Transformers 라이브러리를 이용하여 BERT 모델을 기반으로 문장을 토큰화하고, 토큰 수를 확인하는 방법을 살펴보겠습니다.
2. 토큰 수 확인하는 코드 예제
(1) 필요한 라이브러리 설치
먼저, transformers
라이브러리를 설치해야 합니다.
pip install transformers
(2) 토크나이저 로드 및 토큰 수 계산
이제 Python 코드에서 토큰 수를 계산하는 방법을 살펴보겠습니다.
from transformers import AutoTokenizer
# 사용할 모델의 토크나이저 로드 (예: BERT)
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-multilingual-cased")
# 주어진 문장
text = "이미지에는 분홍색 담요 위에 두 마리의 고양이가 누워 있습니다. 왼쪽 고양이는 줄무늬 털을 가진 태비 품종이고, 오른쪽 고양이는 점박이 무늬 털을 가진 칼리코 품종입니다. 두 고양이 모두 눈을 감고 잠을 자거나 휴식을 취하고 있습니다. 담요 옆에는 각각 왼쪽 고양이와 오른쪽 고양이 근처에 흰색 리모컨 두 개가 평행하게 놓여 있습니다. 배경은 분홍색으로, 담요와 같은 색상입니다. 이미지에는 텍스트나 다른 물체는 포함되어 있지 않습니다."
# 문장을 토큰화하고 토큰 수 계산
tokens = tokenizer.tokenize(text)
num_tokens = len(tokens)
print(f"토큰 수: {num_tokens}")
(3) 코드 설명
- 토크나이저 로드:
AutoTokenizer.from_pretrained("google-bert/bert-base-multilingual-cased")
를 사용하여 BERT 모델의 토크나이저를 불러옵니다. - 문장 입력: 토큰화할 문장을
text
변수에 저장합니다. - 토큰화 수행:
tokenizer.tokenize(text)
를 호출하여 문장을 토큰으로 변환합니다. - 토큰 수 계산:
len(tokens)
을 통해 총 토큰 개수를 확인합니다.
3. 실행 결과 예시
위 코드를 실행하면 다음과 같은 출력이 나올 수 있습니다.
토큰 수: 67
이 값은 모델과 토크나이저에 따라 달라질 수 있습니다. BERT 기반 모델의 경우, 서브워드 토크나이저를 사용하기 때문에 한 단어가 여러 개의 토큰으로 분리될 수 있습니다.
4. 다른 모델을 사용한 토큰 수 비교
BERT 이외에도 다양한 NLP 모델을 사용하여 토큰 수를 비교해볼 수 있습니다. 예를 들어, GPT-3.5의 text-davinci-003
모델을 사용하면 다르게 토큰화될 수도 있습니다.
from transformers import AutoTokenizer
# GPT-3.5 기반 모델 토크나이저 로드
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 문장 입력
text = "이미지에는 분홍색 담요 위에 두 마리의 고양이가 누워 있습니다."
# 토큰화 및 토큰 수 확인
tokens = tokenizer.tokenize(text)
num_tokens = len(tokens)
print(f"GPT-3.5 토큰 수: {num_tokens}")
이처럼 NLP 모델에 따라 토큰화 방식이 다르므로, 프로젝트에서 사용하는 모델이 어떤 토크나이저를 적용하는지 확인하는 것이 중요합니다.
5. 결론
이번 글에서는 Transformers 라이브러리를 활용하여 문장의 토큰 수를 확인하는 방법을 살펴보았습니다.
- 토큰이란 무엇인지 설명하였고,
- BERT 모델을 기반으로 문장을 토큰화하고 토큰 개수를 세는 코드를 실행해 보았습니다.
- 다양한 NLP 모델에 따라 토큰화 방식이 달라질 수 있음을 확인하였습니다.
이제 여러분도 직접 다양한 문장을 입력해보고, 다른 모델을 활용하여 토큰 수를 비교해보세요!
from transformers import AutoTokenizer
# 사용할 모델의 토크나이저 로드 (예: BERT)
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-multilingual-cased")
# 주어진 문장
text = "이미지에는 분홍색 담요 위에 두 마리의 고양이가 누워 있습니다. 왼쪽 고양이는 줄무늬 털을 가진 태비 품종이고, 오른쪽 고양이는 점박이 무늬 털을 가진 칼리코 품종입니다. 두 고양이 모두 눈을 감고 잠을 자거나 휴식을 취하고 있습니다. 담요 옆에는 각각 왼쪽 고양이와 오른쪽 고양이 근처에 흰색 리모컨 두 개가 평행하게 놓여 있습니다. 배경은 분홍색으로, 담요와 같은 색상입니다. 이미지에는 텍스트나 다른 물체는 포함되어 있지 않습니다."
# 문장을 토큰화하고 토큰 수 계산
tokens = tokenizer.tokenize(text)
num_tokens = len(tokens)
print(f"토큰 수: {num_tokens}")
0 댓글