오타의 숨겨진 비용: 인간의 타이핑 습관이 어떻게 토큰 수를 늘리는가

대규모 언어 모델(LLM) 시대에 우리는 흔히 프롬프트를 의도와 지침의 관점에서 생각합니다. 하지만 이러한 모델이 텍스트를 처리하는 근본적인 메커니즘인 토큰화(tokenization)는 숨겨진 비용과 효율성의 계층을 도입합니다. 인간은 문장의 의미를 읽지만, 토크나이저는 패턴으로 분해합니다. 이러한 패턴이 일반적인 것에서 벗어날 때 비용이 증가합니다.

Pankaj Pipada의 최근 관찰에 따르면 놀라운 현실이 드러났습니다. 우리의 자연스러운 타이핑 습관—오타, 약어, 그리고 대화형 채움말—이 우리가 비용을 지불하는 토큰 수에 직접적인 영향을 미칩니다. 모델은 대개 오타가 있는 단어를 통해 의도된 의미를 복구할 수 있지만, 과금 시스템은 그렇지 못합니다.

오타로 인한 토큰화 페널티

토크나이저는 일반적인 텍스트 패턴에 최적화되어 있습니다. 단어가 올바르게 철자되면 종종 단일 토큰으로 존재합니다. 오타가 발생하면 토크나이저는 더 이상 단어를 전체로 인식하지 못하고 더 작고 덜 효율적인 조각으로 분해해야 합니다.

OpenAI와 Claude 토크나이저를 사용한 다음 예시를 고려해 보세요:

  • 정확함: template (1 token) $\rightarrow$ 오타: tempalte (3 tokens)
  • 정확함: assistant (1 token) $\rightarrow$ 오타: assitant (2-3 tokens)
  • 정확함: like (1 token) $\rightarrow$ 오타: liek (2 tokens)

이러한 분해는 기술적인 맥락에서 특히 비용이 많이 듭니다. 코드베이스 내의 잘못된 변수 이름이나 함수 식별자는 한 번만 발생하는 것이 아닙니다. 선언, 참조, 로그, 그리고 diff에서 반복되며, 프로젝트 전체에 걸쳐 토큰 팽창을 가중시킵니다.

단어 형태와 대화형 노이즈

단순히 실수에 관한 것이 아닙니다. 우리가 언어를 어떻게 형성하는지에 관한 것입니다. 작은 접미사나 표현적인 문장 부호는 단어를 단일 토큰에서 여러 개의 토큰으로 바꿀 수 있습니다.

접미사 효과

단순한 접미사를 추가하는 것만으로도 예상치 못한 토큰 수 변화를 일으킬 수 있습니다:

  • describe (1 token) $\rightarrow$ describers (3 tokens)
  • error (1 token) $\rightarrow$ errored (2 tokens)

대화형 패딩

인간의 채팅은 작업의 명확성을 높이지 않으면서 비용을 늘리는 저신호 패딩으로 가득 차 있습니다:

  • 채움말: just, basically, actually
  • 완곡어법: maybe, I think, kind of
  • 래퍼(Wrappers): hey, please, thanks
  • 표현적 습관: yes (1 token) vs. yesss (3 tokens)

약어의 역설

인간은 종종 키스트로크를 최적화하지만, 토크나이저는 간결함을 위해 최적화되지 않습니다. 많은 경우, 단어의 짧은 버전은 훈련 데이터에서 덜 일반적이기 때문에 실제로 토큰 수를 증가시킵니다.

  • please (1 token) $\rightarrow$ pls (2 tokens)
  • thanks (1 token) $\rightarrow$ thx (2 tokens)
  • without (1 token) $\rightarrow$ w/o (2-3 tokens)

표준 사전적 단어는 약어보다 거의 항상 토크나이저 효율성이 더 높고 모델에게 더 명확합니다.

조용한 토큰 누수

대화 외에도 특정 기술적 문자열은 "토큰 누수" 역할을 하여 불균형적으로 많은 공간을 소비합니다:

  • 식별자: UUID와 해시값은 매우 파편화됩니다. 단일 UUID는 24-26개의 토큰을 소비할 수 있습니다.
  • 타임스탬프: RFC 3339 타임스탬프는 16-17개의 토큰을 소비할 수 있습니다.
  • URL 및 경로: 긴 파일 경로와 URL은 종종 토큰 비중이 높습니다.
  • 공백: 내부 공백은 일반적으로 괜찮지만, 앞뒤의 공백은 때때로 예측 불가능한 토큰 변화를를 일으킬 수 있습니다.

토론: 최적화 vs. 인간의 시간

데이터는 오타와 습관이 비용을나 늘린다는 것을 보여주지만, 커뮤니티는 이것이 수동 프롬프트 작성 시 중요할지 여부에 대해 의견이 갈립니다.

어떤 이들은 라이브 채팅 세션에서 타이핑을 검열하는 것이 "조기 최적화"의 일입니다라고 주장합니다. 한 댓글 작성자가 다음과 같이 언급했습니다:

"생성된 코드에 100k+ 토큰을 쓸 예정인데, 왜 오타를 고치기 위해 귀중한 인간의 시간을 1-2초 동안 되돌아가는 데 사용하겠습니까... 제 생각에는 그것이 100wpm 이상의 차이입니다."

다른 이들은 완벽한 철자를 보장하기 위한 정신적 부하가 실제로 문법적 모호성을 유래래할 수 있으며, 잠재적으로 프롬프트 실패와 비용이 많이 드는 재시도 과정을 유도할 수 있다고 제안합니다.

하지만 자동화된 파이프라인, 문서 인입, 또는 대규모 시스템 프롬프트의 경우, 이러한 통찰은 매우 중요합니다. 자동화된 워크플로우에서 "안개"를 걷어내고 깨끗한 텍스트를 보장하는 것은 상당한 비용 절감과 모델 성능 향상으로 이어질 수 있습니다.

Sources