"How Text Becomes Numbers: Tokenization Explained"

개요

자연어 처리(NLP) 모델이 텍스트를 이해하고 계산하기 위해, 원시 텍스트는 고유한 숫자 ID를 가진 이산적인 단위(토큰)로 분할되는 토큰화 과정을 거칩니다.

주요 내용

* 컴퓨터와 단어: 신경망은 본질적으로 행렬 곱셈과 수치 연산으로 이루어져 있어, 단어를 직접 이해하지 못하고 숫자로만 작동합니다. 따라서 모든 NLP 시스템은 텍스트를 숫자로 변환하는 과정이 필요하며, 이것이 토큰화입니다.
* 어휘집 (Vocabulary): 토큰에 ID를 할당하기 전에, 모델이 인지하는 모든 가능한 토큰의 고정된 목록인 어휘집이 필요하며, 각 토큰은 고유한 정수 ID에 매핑됩니다. GPT-2의 어휘집은 약 50,000개의 토큰을 포함합니다.
* 알 수 없는 단어 문제: 어휘집에 없는 희귀 기술 용어, 오타, 이름, 또는 다른 언어의 단어는 모델이 처리할 수 없는 문제입니다.
* 토큰의 정의: 토큰은 원시 텍스트가 분할되는 텍스트의 이산 단위이며, 각 토큰에 숫자 ID가 할당됩니다. 토큰은 전체 단어, 단어의 일부(sub-word), 단일 문자, 또는 구두점이 될 수 있습니다.
* 초기 토크나이저의 한계: 공백과 구두점으로 분할하는 초기 토크나이저들은 어휘집에 없는 단어를 <UNK>(unknown) 토큰으로 처리하여 정보 손실을 야기했습니다.
* Sub-word 토큰화와 장점: 현대 토크나이저는 Sub-word 토큰화를 통해 어휘집에 없는 단어 문제를 해결합니다. 희귀하거나 보지 못한 단어는 어휘집에 있는 더 작은 조각으로 분할되어 표현됩니다.
* BPE (Byte-Pair Encoding): 가장 널리 사용되는 Sub-word 토큰화 알고리즘으로, 개별 문자를 기본 어휘집으로 시작하여 가장 빈번하게 발생하는 인접 쌍을 새로운 토큰으로 반복적으로 병합하여 어휘집을 구축합니다. 이를 통해 자주 발생하는 단어는 단일 토큰으로, 희귀하거나 보지 못한 단어는 더 작은 알려진 조각으로 분할됩니다.
* SentencePiece: 영어와 같이 공백으로 단어를 구분하는 언어에는 BPE가 잘 작동하지만, 일본어, 중국어와 같이 단어 구분이 명확하지 않은 언어에서는 문제가 발생합니다. SentencePiece는 이러한 언어를 위해 입력 텍스트를 공백을 포함한 문자열 스트림으로 취급하고 BPE 또는 Unigram Language Model 토큰화를 적용하여 언어에 구애받지 않고 작동하며, 다국어 모델에 널리 사용됩니다.
* 컨텍스트 길이 (Context Length): 토큰화된 ID 시퀀스는 길이를 가지며, 트랜스포머 모델은 한 번에 처리할 수 있는 최대 토큰 수인 컨텍스트 길이를 갖습니다. 이 길이를 초과하는 입력은 잘리거나 분할 처리되어야 합니다.
* 샘플 코드: Hugging Face의 transformers 라이브러리를 사용하여 "Tokenization is fundamental to NLP." 텍스트를 토큰화하는 예시가 제공되며, GPT-2 토크나이저가 공백을 Ġ로 표현하고, "Tokenization"이 "Token"과 "ization"으로, "NLP"가 "N"과 "LP"로 분할되는 것을 보여줍니다.

시사점

토큰화는 텍스트를 숫자 ID로 변환하는 NLP 파이프라인의 필수적인 첫 단계이며, Sub-word 알고리즘을 사용하여 모든 입력이 정보 손실 없이 표현될 수 있도록 합니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions