LLM에 대해 확실한 기본기를 다지기 위해
공부하고 정리한 내용입니다.
이전 포스팅에서 모델을 다운로드하고 추론하는 두가지 방식을 진행해 보았다.
LLM모델의 입력값으로 텍스트가 주어질 때, 텍스트를 숫자로 변환하는 과정을 수행해야 하는데
이 과정에서 '토크나이저'가 꼭 필요하다.
각 모델마다 모델이 인식하는 단어와 토큰 매핑값이 존재하며 실제 모델 파일에서 'tokenizer.json' 파일을 통해 확인할 수 있다.
이 파일을 바탕으로 실제 모델에 문장을 입력으로 넣고 추론을 실행하는 경우, 내부적으로 token(정수)로 변환된 뒤 처리된다.
실습
1. 토크나이저 다운로드
from transformers import AutoTokenizer
# HugginFace에서 tokenizer.json 파일을 다운로드
tokenizer = AutoTokenizer.from_pretrained('gpt2-xl')
아래 코드를 통해 토크나이저의 내부 객체를 확인할 수 있다.
print(tokenizer.backend_tokenizer)
2. 입력 문장과 토큰 관계 확인하기
입력받은 문장을 토큰 형태로 변환하고, 결과를 텐서 형태로 변환한다.
text = "Replace me by any text you'd like"
eng_encoded_input = tokenizer(
text,
return_tensors='pt').to('cuda')
print(eng_encoded_input)
출력 결과는 아래와 같다.
{'input_ids': tensor([[3041, 5372, 502, 416, 597, 2420, 345, 1549, 588]],
device='cuda:0'), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1]], device='cuda:0')}
각 토큰 ID가 실제로 어떤 문자열을 가리키고있는지 확인하려면 아래와 같이 작성하면 된다.
from pprint import pprint
pprint(list(zip(
eng_encoded_input['input_ids'][0],
tokenizer.convert_ids_to_tokens(eng_encoded_input['input_ids'][0])
)))
텍스트-> 토큰 값 변환하기
토큰 문자열을 모델이 사용하는 숫자 ID로 변환하는 코드를 아래에서 확인할 수 있다.
tokenizer.convert_tokens_to_ids(['Re', 'place', 'Ġme', 'Ġby','Ġany','Ġtext','Ġyou',"'d",'Ġlike'])
한글 토크나이저
그렇다면 한글을 토큰화하면 어떻게 될까?
text = "안녕하세요"
kor_encoded_input = tokenizer(text, return_tensors='pt').to('cuda')
pprint(list(zip(
kor_encoded_input['input_ids'][0],
tokenizer.convert_ids_to_tokens(kor_encoded_input['input_ids'][0])
)))
['안', '녕', '하', '세', '요'] 등의 결과로 나올 것이라고 예상할 수 있겠지만 대부분의 경우 BPE 유형의 토크나이저를 사용하기 때문에 한글을 문자로 인식하는 것이 아니라 UTF-8 바이트로 변환하는 작업을 수행한다. 변환 후에는 merges 룰을 참고하여 병합할 수 있는 쌍은 병합을 진행한다. 병합이 더이상 진행되지 않으면 토큰ID로 변환한다.
이를 해결하려면 한국어 전용 모델을 사용하는 방법도 존재하지만 영어를 지원하는 모델이 대다수이기 때문에 참고로 알아두자!
입력받은 텍스트를 토큰화하는데 그치지 않고, 실제 모델이 처리하기 위해서는 토큰의 정수값을 임베딩 하는 과정이 필요한데 다음 포스팅에서 임베딩에 대해 공부할 예정이다.
'LLM' 카테고리의 다른 글
| 2. HuggingFace 모델 다운로드 및 추론 (+실습) (0) | 2026.04.24 |
|---|---|
| 1. LLM 이해 (0) | 2026.04.23 |