토큰화는 텍스트를 토큰이라고 하는 개별 단위로 분할하는 과정으로, 이 토큰들은 대규모 언어 모델이 입력으로 읽고 출력으로 생성하는 기본 어휘 역할을 한다. 토큰은 일반적으로 전체 단어나 개별 문자보다는 하위 단어 조각이며, 이는 어휘 크기와 시퀀스 길이 사이의 균형을 맞추는 설계 선택이다.
단어나 문자가 아닌 이유
텍스트를 전체 단어로 분할하려면 모델이 지원하는 모든 언어의 모든 단어 형태(희귀 단어, 철자 오류, 이름 포함)를 포괄할 만큼 큰 어휘가 필요하며, 그럼에도 진정한 새 단어가 등장할 때는 실패한다. 텍스트를 개별 문자로 분할하면 어휘 문제는 피할 수 있지만, 모델이 처리해야 할 시퀀스가 훨씬 길어지며, 트랜스포머의 어텐션 메커니즘이 시퀀스 길이에 따라 확장성이 떨어지기 때문에 비용이 많이 든다. 하위 단어 토큰화는 절충안이다. 일반적인 단어는 보통 단일 토큰으로 표현되는 반면, 희귀한 단어는 더 작고 재사용 가능한 조각으로 분할되며, 완전히 새로운 문자 조합도 알려진 하위 단위의 시퀀스로 표현될 수 있다.
방법
가장 널리 사용되는 하위 단어 토큰화 방법은 바이트 페어 인코딩으로, 1994년 데이터 압축 알고리즘에서 언어 모델용으로 변형되었으며, 훈련 중에 보지 못한 단어를 처리하기 위한 초기 통계적 자연어 처리 기법을 기반으로 한다. 이 방법은 개별 문자나 바이트에서 시작하여 가장 빈번하게 함께 나타나는 쌍을 반복적으로 새 토큰으로 병합하여, 대규모 훈련 말뭉치에서 관찰된 가장 유용한 하위 단위의 고정 크기 어휘를 구축한다. SentencePiece 및 WordPiece와 같은 변형은 유사한 병합 논리를 따르지만 전처리와 공백 처리 방식이 다르다. 결과 어휘는 일반적으로 수만 개의 토큰으로 구성되며, 모델이 훈련되면 고정되어 재훈련 없이는 변경할 수 없다.
토큰에서 숫자로
텍스트가 토큰으로 분할되면 각 토큰은 정수 인덱스에 매핑된 다음 임베딩이라고 하는 학습된 벡터 표현에 매핑되며, 이는 신경망이 실제로 처리하는 것이다. GPT-2와 GPT-3는 모두 바이트 수준 바이트 페어 인코딩 토크나이저를 사용했으며, 이후 대부분의 대규모 언어 모델은 비영어 언어와 코드를 더 잘 표현하기 위해 어휘를 확장하는 경우도 있지만 유사한 접근 방식을 따랐다.
실용적 영향
토큰화는 기술적 배경이 없는 사용자에게도 보이는 여러 결과를 초래한다. 모델의 컨텍스트 창, 즉 한 번에 처리할 수 있는 최대 텍스트 양은 단어나 문자가 아닌 토큰으로 측정되며, 상용 API는 일반적으로 토큰당 요금을 부과하므로 토큰화는 비용과 직접적으로 관련된다. 주로 영어 텍스트로 훈련된 토큰화 방식은 비영어 텍스트, 특히 다른 문자 체계를 사용하는 언어를 영어보다 단어당 더 많은 토큰 수로 분할하는 경향이 있어, 해당 언어 사용자에게 모델 사용 비용을 높이고 실질적으로 사용 가능한 컨텍스트 창을 줄일 수 있다. 토큰화는 또한 단어 내 문자 수 세기와 같이 개별 문자에 대한 추론이 필요한 작업에서 예상치 못한 동작을 유발할 수 있는데, 모델이 단어를 구성 문자로 분할된 형태를 전혀 보지 못할 수 있기 때문이다.