언어 모델이 텍스트를 읽기 전에, 텍스트는 셀 수 있는 조각들로 나뉘어야 합니다. 이 조각들을 토큰이라고 하며, 토큰화는 이러한 조각 나누기 과정입니다. 토큰은 단어 전체일 수도 있고, "ing"나 "pre"와 같은 접미사 조각일 수도 있고, 구두점일 수도 있고, 심지어 단일 문자일 수도 있습니다. 모델은 가공되지 않은 텍스트를 직접 보는 것이 아니라, 이러한 토큰에 매핑된 정수 ID의 시퀀스를 보게 됩니다.
각 방식은 서로 다른 장단점을 가지고 있습니다. 단어 수준 토큰화는 의미는 그대로 유지하지만 수백만 개의 희귀 단어가 생성되고 오타 처리에 어려움을 겪습니다. 문자 수준 토큰화는 어휘 크기는 작지만 매우 긴 문자열을 생성합니다. 바이트 쌍 인코딩과 같은 서브워드 방식은 그 중간에 위치합니다. 이러한 방식은 문자로 시작하여 목표 어휘 크기에 도달할 때까지 가장 빈번하게 사용되는 쌍을 반복적으로 병합합니다.
왜 중요한가
- 어휘 크기는 모델의 임베딩 테이블과 메모리 사용량을 결정합니다.
- 토큰 개수는 컨텍스트 창과 모든 API 호출의 비용을 설정합니다.
- 잘못된 토큰화는 단어를 분할하는 방식으로 다국어 성능을 저하시킵니다.
- 라틴 문자 체계가 아닌 언어는 문장당 훨씬 더 많은 토큰이 필요한 경우가 많습니다.
영어 문장은 20개의 토큰으로 표현될 수 있지만, 서구 중심의 토크나이저를 사용하면 태국어나 힌디어로 된 같은 문장은 60개 이상의 토큰을 사용할 수 있습니다. 이러한 불균형은 수십억 명의 화자에게 속도, 가격, 정확도에 영향을 미칩니다.
Comments
No comments yet. Be the first to share a thought.
Leave a comment