부분 토큰 문제: 실제 사용에서의 심각성
초록
이 논문은 토크나이저와 사용자 텍스트 사이의 불일치가 초래하는 “부분 토큰 문제”(Partial Token Problem, PTP)를 실제 언어와 코드 환경에서 조사한다. 중국어, 독일어 복합어, 그리고 프로그래밍 코드에서 토큰 경계와 의미/구문 경계가 자주 어긋나는 것을 정량화하고, 자연스러운 프롬프트가 부분 토큰으로 끝날 때 모델의 다음 토큰 확률이 수십 배에서 수천 배까지 급감한다는 사실을 실험적으로 입증한다. 또한 기존 완화 기법과 최신 정확한 해결책을 비교 평가하여, 정확한 방법이 PTP를 완전히 해소함을 보인다.
상세 분석
본 연구는 토크나이저가 텍스트를 토큰 시퀀스로 변환하는 과정에서 발생하는 구조적 불일치를 ‘부분 토큰 문제(PTP)’라 정의한다. PTP는 프롬프트가 기대되는 다음 토큰의 앞부분만 포함할 때, 모델이 해당 토큰을 전체 토큰으로 인식하지 못해 비정상적으로 낮은 확률을 할당하는 현상이다. 기존 연구들은 임의의 문자 프리픽스를 사용해 PTP를 시연했지만, 실제 사용자 입력이 단어 경계 혹은 구문 경계와 일치하는 경우에도 문제가 발생하는지를 확인하지 못했다.
논문은 세 가지 대표 도메인을 선정했다. 첫째, 공백이 없는 로그그래픽 언어인 중국어·일본어 등에서는 단어 경계가 토큰 경계와 일치하지 않을 확률이 높다. 실험에서는 중국어 위키피디아 1,000개 문장을 Jieba로 단어를 구분하고, 여러 최신 토크나이저(LLaMA‑3, Hunyuan 등)로 토큰화했을 때 14%~25%의 단어‑토큰 불일치가 관찰되었다. 둘째, 독일어와 같은 고도로 복합어가 풍부한 언어에서는 복합어가 토큰화될 때 내부 형태소 경계가 무시되어 ‘Ei’와 ‘gelb’가 각각 별도 토큰으로 분리되지 않는다. 셋째, 프로그래밍 코드에서는 연속된 구두점이나 긴 식별자가 하나의 토큰으로 합쳐지는 경우가 빈번해, ‘()’ 뒤에 콜론 ‘:’이 포함된 ‘():’가 단일 토큰이 되는 등 구문 경계와 토큰 경계가 크게 어긋난다.
이러한 불일치를 기반으로 저자들은 “repeat‑after‑me” 과제를 설계했다. 프롬프트는 자연스러운 문장을 제시하고, 모델에게 해당 문장을 그대로 반복하도록 요구한다. 그러나 프롬프트는 의도적으로 부분 토큰 직전까지만 제공한다(예: “是” 뒤에 ‘一个’의 첫 부분이 누락된 상태). 실험 결과, 동일한 문장을 완전 토큰 경계에서 제공했을 때와 비교해 모델이 올바른 다음 토큰에 할당하는 확률이 10⁻³~10⁻⁴ 수준으로 급감했으며, 특히 중국어에서는 4자리 수(10⁴배)까지 감소했다. 이 현상은 모델 규모와 무관하게 지속되었으며, 오히려 더 큰 모델일수록 확률 감소 폭이 커지는 경향을 보였다.
완화 방안으로는 두 가지 접근법을 비교했다. 첫 번째는 ‘토큰 힐링(token healing)’이라 불리는 휴리스틱 방법으로, 프롬프트 끝에서 하나 이상의 토큰을 뒤로 빼고(‘백오프’) 모델이 다시 샘플링하도록 한다. 이 방법은 일부 경우에 성능을 회복했지만, 불일치 정도가 큰 경우에는 여전히 낮은 정확도를 보였다. 두 번째는 최근 제안된 정확한 해결책들(예: Vieira et al., Phan et al., Turaga, Hayase et al.)을 적용한 것으로, 프롬프트와 가능한 모든 토큰 시퀀스의 트리를 구축해 원본 LM의 텍스트 수준 확률 분포를 그대로 유지한다. 실험에서는 이러한 정확한 방법이 PTP를 완전히 해소하여 100% 정확도를 달성했으며, 특히 Hayase et al.의 트리 샘플링 방식이 가장 효율적이었다.
결론적으로, 논문은 토크나이저와 사용자 입력 사이의 경계 불일치가 실제 언어·코드 사용에서 빈번히 발생하고, 이는 모델의 예측 품질을 심각하게 저하시킨다는 사실을 실증한다. 또한, 기존의 휴리스틱 완화 기법은 제한적이며, 텍스트 수준 확률을 보존하는 정확한 알고리즘이 실용적인 해결책임을 제시한다. 이러한 결과는 모델 제공자와 API 설계자가 토큰화 오류를 사전에 방지하거나, 런타임에 정확한 보정 로직을 삽입하는 방향으로 시스템을 재설계해야 함을 시사한다.
댓글 및 학술 토론
Loading comments...
의견 남기기