토크나이저가 언어마다 중요한 이유
언어 모델은 단어를 보지 않습니다. 토큰을 봅니다. 텍스트가 토큰으로 쪼개지는 방식이 비용, 속도, 그리고 언어 간 공정성을 조용히 결정합니다.
언어 모델은 단어를 읽지 않고, 글자도 읽지 않습니다. 어떤 텍스트든 모델에 닿기 전에 **토크나이저(tokenizer)**를 거치는데, 토크나이저는 텍스트를 토큰이라는 단위들의 연속으로 잘라냅니다. 그리고 모델은 오직 그 토큰만을 봅니다. 이 단계는 워낙 상류에 있어서 무시하기 쉽지만, 하류의 거의 모든 것을 좌우합니다. 요청 비용이 얼마인지, 모델의 기억이 실질적으로 얼마나 긴지, 그리고 놀랍게도 모델이 서로 다른 인간 언어를 얼마나 공정하게 대하는지까지 말이죠.
토크나이저는 모델의 감각 기관입니다. 같은 생각을 표현하는 데 어떤 언어가 다른 언어보다 두 배나 더 비쌀 수 있는 이유를 이해하고 싶다면, 여기서 출발해야 합니다.
토큰이란 실제로 무엇인가
토큰은 텍스트의 한 덩어리이며, 대개 온전한 단어가 아닙니다. 현대 토크나이저는 텍스트를 서브워드(subword) 조각으로 쪼개는 경향이 있습니다. 흔한 단어는 토큰 하나일 수 있고, 드문 단어는 여러 개로 쪼개집니다. 만들어 낸 단어나 특이한 문자열은 거의 글자 단위까지 쪼개지기도 합니다. 공백과 문장 부호도 토큰이며, 대소문자에 따라 쪼개지는 방식이 달라질 수 있습니다.
왜 온전한 단어가 아니라 서브워드일까요? 온전한 단어로 된 어휘는 엄청나게 거대할 텐데도, 새로 생기는 단어나 이름, 오타는 죄다 놓칠 것이기 때문입니다. 그렇다면 그냥 개별 글자를 쓰면 안 될까요? 그렇게 하면 시퀀스가 극도로 길어지고, 모델이 작디작은 조각들로부터 의미를 다시 짜맞추도록 강요받기 때문입니다. 서브워드 토큰화는 그 절충안입니다. 고정되어 관리 가능한 어휘이면서도, 조각들을 결합해 어떤 입력이든 표현할 수 있죠. 흔한 패턴을 효율적으로 포착하면서도, 처음 보는 것 앞에서 완전히 막혀버리는 일은 결코 없습니다.
어휘는 어떻게 만들어지는가
토크나이저의 어휘는 손으로 적은 것이 아닙니다. 모델이 훈련되기도 전에 방대한 텍스트 말뭉치로부터 학습됩니다. 인기 있는 방법들의 바탕에 깔린 일반 원리는 동일합니다. 작게 시작해서 자주 함께 나타나는 것을 병합한다.
전형적인 접근은 기본 글자들로 시작한 뒤, 가장 빈번하게 인접한 쌍을 반복적으로 찾아내 새로운 단위로 병합하고, 그 단위를 어휘에 추가합니다. 이를 여러 번 하면 빈번한 시퀀스, 즉 흔한 접두사, 접미사, 끊임없이 등장하는 온전한 단어가 단일 토큰이 되고, 드문 시퀀스는 더 작은 조각으로 쪼개진 채 남습니다. 그 결과물이 훈련 텍스트의 통계에 맞춰진 어휘입니다.
이 마지막 구절이 이야기 전체의 핵심입니다. 토크나이저는 그것이 만들어진 텍스트에 맞춰져 있습니다. 그 텍스트에 풍부했던 것은 무엇이든 짧고 효율적인 토큰을 얻습니다. 부족했던 것은 무엇이든 자잘한 조각 여럿으로 쪼개집니다.
이것이 언어 간에 공정하지 않은 이유
대부분의 큰 토크나이저는 널리 쓰이는 소수 언어가 지배하는 말뭉치로 훈련됩니다. 그런 언어들, 특히 영어는 효율적인 토큰화를 누리게 됩니다. 흔한 단어가 단일 토큰이 되고, 한 문장이 비교적 적은 토큰으로 변하죠.
그 말뭉치에서 과소 대표된 언어는 사정이 더 나쁩니다. 같은 의미를 그런 언어로 표현하면 토큰이 눈에 띄게 더 많이 필요할 수 있습니다. 토크나이저가 그 언어를 위한 압축적인 단위를 한 번도 학습하지 못해, 단어를 자잘한 조각 여럿으로 쪼개는 방식으로 되돌아가기 때문입니다. 문자 집합이 큰 표기 체계나 토크나이저가 거의 보지 못한 문자 체계는 특히 큰 타격을 받을 수 있는데, 때로는 글자 하나당 토큰 하나에 가까워지기도 합니다.
이것은 사소한 겉치레 차이가 아닙니다. 직접적이고 누적되는 결과를 낳습니다.
- 비용. 모델은 보통 토큰당 가격이 매겨지고 토큰 단위로 과금됩니다. 같은 내용을 말하는 데 당신의 언어가 더 많은 토큰을 필요로 한다면, 똑같은 대화도 단지 더 비쌉니다.
- 실질 기억. 모델의 컨텍스트 윈도는 토큰으로 측정됩니다. 문장당 토큰이 많으면 들어가는 문장이 줄어들고, 그래서 토큰 비효율적인 언어에서는 모델이 당신의 문서를 실질적으로 더 적게 기억합니다.
- 속도. 읽고 생성할 토큰이 많을수록 요청당 연산이 늘고 응답이 느려집니다.
그래서 과소 대표된 언어의 사용자는 동일한 콘텐츠에 대해 더 많이 내고, 실질 기억은 더 짧고, 더 오래 기다릴 수 있습니다. 이 불공정은 모델 아래, 토크나이저 단계에서 이미 새겨져 있습니다.
품질에 미치는 하류 영향
토큰화는 비용뿐 아니라 능력까지 좌우할 수 있습니다. 단어가 여러 조각으로 산산이 부서지면, 모델은 의미를 다시 짜맞추는 데 더 많은 일을 해야 하고, 단어 수준에서라면 명백했을 패턴이 여러 토큰에 걸쳐 얇게 퍼져 버립니다. 글자를 세거나, 철자를 다루거나, 문자를 조작하거나, 신중한 산술을 하는 등 텍스트의 정확한 구조에 달린 작업은 놀라운 방식으로 휘청거릴 수 있습니다. 바로 모델이 사람이 보는 글자와 숫자가 아니라 토큰을 보기 때문입니다.
이것은 그러지 않으면 영문 모를 일군의 동작을 설명해 줍니다. 모델이 단어의 글자 수를 잘못 셀 때, 그것은 머리가 나빠서가 아닙니다. 애초에 글자를 깔끔하게 분리된 단위로 가진 적이 없었던 것이죠. 토크나이저는 모델에게 덩어리를 건넸고, 그 덩어리가 작업에 필요한 세부를 가려 버렸습니다.
이에 대해 무엇이 이루어지는가
완벽한 해결책은 없지만, 손댈 수 있는 지렛대는 있습니다. 더 균형 잡힌 다국어 말뭉치로 토크나이저의 어휘를 구축하면, 과소 대표된 언어가 효율적인 토큰을 더 공정하게 배분받습니다. 어휘를 더 크게 만들면 더 많은 언어가 압축적인 단위를 얻을 여지가 생기지만, 모델 구성 요소가 커지는 대가를 치릅니다. 어떤 시스템은 처음부터 다국어용으로 설계되어 토크나이저 훈련에 그에 맞는 가중치를 둡니다.
이 중 어느 것도 격차를 완전히 지우지는 못합니다. 어떤 고정된 어휘든 우선순위를 반영하기 때문입니다. 모든 문자 체계에 동시에 가능한 한 가장 효율적인 인코딩을 줄 수는 없습니다. 그래도 토크나이저에 대해 의도적으로 신경 쓰는 것은 파이프라인 전체에서 가장 지렛대가 큰 공정성 결정 중 하나입니다. 바로 다른 모든 것의 상류에 자리 잡고 있기 때문이죠.
사용자로서 어떻게 생각해야 하는가
토크나이저를 직접 통제할 일은 드물지만, 그것에 대해 추론할 수는 있습니다. 토큰화가 비효율적인 언어로 작업한다면, 토큰 수가 더 많아질 것을 예상하고, 예산과 컨텍스트 한도에 이를 반영해 계획하며, 글자에 매우 민감한 작업은 더 불안정할 수 있음을 염두에 두세요. 두 모델의 비용을 비교할 때는, 같은 텍스트라도 토큰 수가 모델마다 다를 수 있음을 기억하세요. 각 모델이 저마다의 토크나이저를 탑재하기 때문입니다. "토큰당 가격"이라는 헤드라인은, 당신의 실제 텍스트가 몇 개의 토큰이 되는지 모른다면 별 의미가 없습니다.
정리
토크나이저는 사람의 텍스트를 모델이 실제로 소비하는 단위로 바꾸는 보이지 않는 층이며, 훈련에 쓰인 그 말뭉치가 무엇이었든 그것으로부터 만들어집니다. 이 한 가지 사실이 바깥으로 파문을 일으킵니다. 그 말뭉치에서 잘 대표된 언어는 저렴하고 압축적이며 유능한 대우를 받지만, 과소 대표된 언어는 똑같은 의미에 대해서도 더 많이 내고, 컨텍스트에 덜 담기며, 더 느리게 돌아갑니다. 토큰화는 건너뛰어도 되는 기술적 세부가 아닙니다. 모델의 비용 구조 상당 부분과 공정성 상당 부분이, 모델 자체가 어떤 사고를 시작하기 한참 전에 조용히 결정되는 지점입니다.
