토큰화
토큰화는 텍스트를 시스템이 실제로 처리할 수 있는 단위인 토큰이라는 더 작은 단위로 분할하는 프로세스입니다. 언어 모델에서 토큰은 일반적으로 전체 단어가 아닌 숫자로 인식되는 서브워드 조각입니다. 기존의 전통적인 검색에서 토큰화는 텍스트를 인덱스 생성 및 쿼리에 사용하는 용어 단위로 분할합니다. 어떤 방식이든, 토큰화는 가공되지 않은 텍스트를 시스템이 처리 가능한 단위로 변환하는 단계입니다.
요약하자면, 토큰화는 텍스트를 토큰으로 분할하는 작업으로, LLM이 처리하는 서브워드 단위이거나 검색 인덱스가 매칭을 수행하는 용어가 됩니다.
토큰화의 작동 방식
언어 모델에서는 일반적으로 서브워드 토큰화 방식을 사용합니다.
- 토크나이저 선택: 모델은 특정 토큰화 방식을 사용합니다. 일반적인 접근 방식으로는 BPE(Byte Pair Encoding), WordPiece, SentencePiece 변형 등이 있으며, 모두 서브워드 단위를 기반으로 고정된 어휘를 구축합니다.
- 텍스트 분할: 입력 텍스트는 해당 어휘집의 토큰으로 분할됩니다. 자주 쓰이는 단어는 단일 토큰이 되고, 드물게 쓰이는 단어나 코드, 이모지 등은 여러 토큰으로 쪼개집니다.
- ID 매핑: 모델은 숫자만 처리하고 문자를 직접 인식하지 못하기 때문에, 각 토큰은 숫자 ID로 변환됩니다.
- 토큰 수 집계: 토큰 수는 텍스트가 차지하는 컨텍스트 창의 크기를 결정하며, 대부분의 API에서 요청 비용을 결정하는 기준이 됩니다.
검색 인덱싱에서의 토큰화는 이보다 단순하고 목적도 다릅니다. 텍스트를 문서와 쿼리가 서로 매칭될 수 있도록 주로 공백과 문장부호를 기준으로 용어로 분할합니다. 그런 다음 검색 분석기는 토큰 경계 분할과는 별개로 정규화 단계(예: 소문자 변환, 어간 추출, 표제어 추출 등)를 적용하기도 합니다.
핵심은 토큰화가 모델과 방식에 따라 달라진다는 것입니다. 즉, 동일한 텍스트라도 모델, 제공업체, 처리 주체(LLM인지 검색 인덱스인지)에 따라 토큰 수가 달라질 수 있습니다. 따라서 다른 시스템 간에 토큰 수가 호환된다고 절대 단정해서는 안 됩니다.
토큰화 vs. 청킹 및 임베딩
- 토큰화는 텍스트를 모델이나 인덱스가 사용하는 가장 작은 단위로 분할하는 과정입니다. 청킹은 검색을 위해 문서를 더 큰 단락으로 분할합니다. 토큰이 작은 조각이라면, 청크는 하나의 완성된 단락입니다.
- 토큰화가 개별적인 토큰 ID를 생성한다면, 임베딩은 토큰이나 청크를 의미를 포착하는 연속적인 벡터로 변환합니다. 전자는 조회 방식이라면 후자는 학습된 표현 방식입니다.
- 서브워드 토큰화(LLM용)는 고정된 모델 어휘집에 최적화되어 있는 반면, 검색 토큰화(인덱싱용)는 쿼리와 문서 간의 용어 매칭에 최적화되어 있습니다.
개발자에게 토큰화가 중요한 이유
- 비용 및 한도: API 요청은 일반적으로 토큰 단위로 청구되며 컨텍스트 창에 따라 상한선이 정해지므로, 토큰 수는 비용과 수용 가능 용량에 직접적인 영향을 미칩니다.
- 레이턴시 및 예산 관리: 토큰 수가 많아질수록 처리량도 늘어나며, 이 두 가지 모두 레이턴시에 영향을 미칩니다. 따라서 프롬프트와 검색된 컨텍스트를 간소화하는 것이 응답 시간을 단축하는 주요 최적화 방법입니다.
- 키워드 검색: 어휘 인덱스를 구축하거나 조회하려면 문서와 쿼리를 일관되게 토큰화해야 하며, 이는 하이브리드 검색에서 키워드 매칭의 기초가 됩니다.
- LLM 파이프라인의 검색 API: 근거 자료 제공을 위해 검색 API가 반환한 콘텐츠는 모델의 컨텍스트에 입력되는 즉시 토큰을 소비합니다. 따라서 토큰 효율이 높은 미리 추출된 결과를 사용하면 답변 파이프라인이 예산 범위 내를 유지하고 운영 비용을 절감하는 데 도움이 됩니다.
토큰화는 평소에는 잘 드러나지 않지만, 모델이 읽을 수 있는 데이터 양, 검색 인덱스가 매칭할 수 있는 항목, 그리고 각 요청의 비용을 물밑에서 결정하는 핵심 단계입니다.
관련 용어
토큰, 컨텍스트 창, 청킹, 임베딩, 대규모 언어 모델(LLM), 바이트 페어 인코딩(BPE), 키워드 검색, 하이브리드 검색, 레이턴시, 검색 API.