자연어 처리는 일반적으로 토큰화, 단어 집합(=vocabulary) 생성, 정수 인코딩, 패딩, 벡터화의 과정을 거친다. 주어진 텍스트를 단어 또는 문자 단위로 자르는 것을 토큰화(=Tokenizing)라고 한다. 여기서는 토큰과 토큰나이징의 개념에 대해 중점적으로 다루도록 하겠다. 기초적인 개념은 다음과 같다.
토큰 (Token)
문장 형태의 데이터에서 의미가 있는 가장 작은 정보 단위
토크나이징 (Tokenizing)
문장 형태의 데이터를 토큰 단위로 나누는 과정
토크나이저 (Tokenizer)
문장 형태의 데이터를 토큰 단위로 나눠주는(=토크나이징을 수행하는) 객체
중요한것은 코퍼스를 모델이 잘 이해할 수 있도록 최소 의미를 담게끔 분절하는 작업을 말하며 이에 대한 방법도 굉장히 많다. 사실 가장 간단한 토크나이징은 가벼운 python code만 이용해도 수행할 수 있다.
# Simple tokenizingtext ="Tokenizing text is a core task of NLP"tokenized_text =list(text)tokenized_text
별거 아닌것 같지만 이것도 하나의 토크나이징이다.
문자 수준의 토크나이징(=Character Level Tokenizing)이라고 부른다.
다만 이러한 문자수준의 토크나이징은 거의 사용하지 않는다. 왜냐하면 단어같은 언어 구조를 데이터에서 학습해야하는 큰 제약이 있고 이를 위해 상당량의 계산, 메모리, 데이터가 필요해 비효율적이기 때문이다. 방식은 다르지만 토크나이징이 되었다는 가정하에 vocab을 만들고 이를 이용해 어떻게 코퍼스를 컴퓨터가 이해하기 편하게 바꾸는지 소개하겠다.
# Numericalization : 수치화# Set Vocabvocab ={character : idx for idx, character inenumerate(sorted(set(tokenized_text)))}print(vocab)
# Index to Text : Decodingreverse_vocab ={value: key for key, value in vocab.items()}output_tokens = [reverse_vocab[val]for val in input_ids]print(output_tokens)