Tokenization(토큰화) 란?
Text를 여러 개의 Token으로 나누는 것
Tokenizer
- 입력된 텍스트를 모델에서 처리할 수 있는 데이터로 변환하는 것이 목적
- 모델은 숫자만 처리할 수 있으므로, 토크나이저는 텍스트 입력을 숫자 데이터로 변환
단어 기반 토큰화(Word-based Tokenization)
- 각 단어에는 0부터 시작하여 어휘집(Vocabulary) 크기 사이의 ID가 할당
- 모델은 위에서 할당된 ID를 활용하여 단어 식별
- “dog”와 “dogs”가 다르게 식별 되기 때문에 엄청난 양의 토큰이 생성됨
- 모델은 연관성 판단이 안되기 때문에 단어 사이의 유사성을 알 수 없음
- 어휘집에 없는 단어는 “unknown” 토큰으로 표현
- 어휘집을 만들 때 unkown 토큰을 최대한 적게 출력하는 것이 목표
문자 기반 토큰화(Character-based Tokenization)
- 텍스트를 단어가 아닌 문자로 나누는 방법
- 어휘집의 크기가 매우 작다는 장점
- 모든 단어들이 문자를 가지고 만들어질 수 있기 때문에, out-of-vocabulary 즉 Unkown 토큰이 작다는 장점
- 하지만 모든 양을 놓고 보면 토큰의 양이 매우 많다는 단점
- 단어 기반을 사용할 때 하나 일 경우, 문자 기반은 10개가 될 수도 있음
하위 단어 토큰화 (Subword Tokenization)
- 빈번하게 사용하는 단어는 더 분할하지 않고, 가끔 나오는 단어를 의미있는 하위 단어로 분할해야 한다는 원칙에 기반
- annoyingly → annoying와 ly로 분해
토크나이저 로딩 및 저장
토크나이저 로딩
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-cased")
tokenizer("Using a Transformer network is simple")
# 결과
# {'input_ids': [101, 7993, 170, 13809, 23763, 2443, 1110, 3014, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
토크나이저 저장
tokenizer.save_pretrained("saving_folder")
토큰화 작업
tokenizer의 tokenize() 메서드에 의해 실행 됨
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
sequence = "Using a Transformer network is simple"
tokens = tokenizer.tokenize(sequence)
print(tokens)
#['Using', 'a', 'Trans', '##former', 'network', 'is', 'simple']
토큰을 ID로 변환
ids = tokenizer.convert_tokens_to_ids(tokens)
print(ids)
#[7993, 170, 13809, 23763, 2443, 1110, 3014]
디코딩
decoded_string = tokenizer.decode([7993, 170, 13809, 23763, 2443, 1110, 3014])
print(decoded_string)
#Using a Transformer network is simple
자료 출처 : https://wikidocs.net/166796
'ETC' 카테고리의 다른 글
EDA(Event Driven Architecture) (0) | 2023.06.14 |
---|---|
RabbitMQ와 Kafka (0) | 2023.06.13 |
FastAPI가 뭘까? (0) | 2023.06.09 |
MSA(MicroService Architecture) 의 통신 방법 (0) | 2023.06.07 |
In-Memory Database (0) | 2023.06.06 |