토크나이저, 언어 모델의 첫 번째 설계 결정

가져올 것인가, 만들 것인가, 무엇이 최선인가

byHJH

tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")


토크나이저를 바꾸는 순간 임베딩 테이블 전체가 무효가 되고, 사실상 모델을 처음부터 다시 학습해야 한다. 토크나이저는 모델이 세계를 지각하는 감각 기관이며, 감각 기관은 태어난 후에 교체할 수 없다.


예진은 작은 토크나이저와 큰 토크나이저 등 다양한 토크나이저를 만들었다.


from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("cooler8/yejin-korean-tokenizer-200k")



1장. 모델은 글자를 읽지 못한다


1.1 신경망의 입장에서 본 텍스트


신경망은 실수 벡터만을 입력받는다. "안녕하세요"라는 문자열은 신경망에게 아무 의미가 없다. 텍스트를 신경망에 넣으려면 반드시 두 단계를 거쳐야 한다.


텍스트를 이산적인 단위(토큰)의 시퀀스로 자르고, 각 단위에 정수 ID를 부여한다.

각 ID를 임베딩 테이블에서 벡터로 변환한다.



1번이 토크나이저의 일이고, 2번부터가 모델의 일이다. 즉,

토크나이저는 연속적인 문자의 세계와 이산적인 ID의 세계를 잇는 변환기이며, 모델은 토크나이저가 잘라준 단위 너머를 볼 수 없다.

모델에게 토큰은 원자다. 토큰 내부의 철자 구조는 모델이 직접 관측할 수 없고, 학습 데이터에 나타난 통계적 흔적으로만 간접적으로 추론할 수 있다.


이 사실 하나에서 많은 것이 따라 나온다. "strawberry에 r이 몇 개인가"라는 질문에 대형 모델이 오답을 내는 유명한 현상은 지능의 결함이 아니라 지각의 구조다. 모델은 straw와 berry라는 두 개의 원자를 볼 뿐, 그 안의 글자들을 세지 않는다. 사람에게 "이 단어의 획수가 몇 개냐"고 묻는 것과 비슷하다. 셀 수는 있지만, 지각의 기본 단위가 아니므로 별도의 노력이 필요하고 자주 틀린다.


1.2 어휘 크기라는 트레이드오프


토큰의 단위를 어떻게 정할 것인가. 양 극단부터 보자.


문자(character) 단위로 자르면 어휘가 아주 작아진다. 영어라면 알파벳과 기호 백여 개면 충분하다.

미등록 단어(OOV, Out-of-Vocabulary)

문제도 원천적으로 없다. 그러나 시퀀스가 극단적으로 길어진다. "internationalization"이 20개 토큰이 된다. 트랜스포머의 셀프 어텐션은 시퀀스 길이의 제곱에 비례하는 비용을 지불하므로, 시퀀스가 길어지는 것은 계산량과 문맥 창 양쪽에서 치명적이다. 또한 문자 하나하나는 의미의 밀도가 너무 낮아서, 모델이 의미 조합을 배우는 데 더 많은 레이어와 데이터를 소모한다.


단어(word) 단위로 자르면 반대가 된다. 시퀀스는 짧고 각 토큰의 의미 밀도는 높다. 그러나 어휘가 폭발한다. 영어의 굴절형, 파생어, 고유명사, 신조어까지 담으려면 어휘가 수십만을 넘어가고, 그래도 학습 데이터에 없던 단어는 반드시 나타난다. 미등록 단어는 <UNK>라는 하나의 토큰으로 뭉개지는데, 이는 정보의 완전한 소실이다. 게다가 어휘 크기는 임베딩 테이블과 출력 소프트맥스의 크기를 직접 결정하므로, 어휘 50만은 파라미터와 연산 양쪽에서 큰 비용이다. 형태적으로 연결된 단어들 — run, runs, running, runner — 이 완전히 독립된 ID를 받아서, 모델이 이들의 관계를 처음부터 다시 배워야 한다는 문제도 있다.


정리하면 이렇다.



단위 어휘 크기 시퀀스 길이 OOV 의미 밀도

문자 매우 작음 매우 김 없음 매우 낮음

단어 매우 큼 짧음 심각함 높음

서브워드 조절 가능(수만) 중간 거의 없음 중간



현대의 모든 주류 언어 모델이 서브워드(subword)를 쓰는 이유가 이 표에 있다. 서브워드 토크나이제이션은 자주 나오는 단어는 통째로 하나의 토큰으로, 드문 단어는 의미 있는 조각들로 분해한다. "the"는 한 토큰이지만 "internationalization"은 "international" + "ization"쯤으로 쪼개진다. 어휘 크기라는 다이얼을 돌려서 문자와 단어 사이의 어느 지점이든 선택할 수 있다는 것, 이것이 서브워드의 본질이다.


1.3 토크나이저는 압축기다


서브워드 토크나이저를 이해하는 가장 생산적인 관점은 압축이다. 좋은 토크나이저란 같은 텍스트를 더 적은 토큰으로 표현하는 토크나이저다. 토큰당 평균 문자 수, 혹은 단어당 평균 토큰 수(fertility)가 압축률의 지표가 된다.


압축률이 왜 중요한가. 첫째, 문맥 창은 토큰 수로 정의된다. 같은 8K 문맥이라도 압축률이 2배 좋으면 실질적으로 2배의 텍스트를 담는다. 둘째, 추론 비용과 API 요금은 토큰 수에 비례한다. 셋째, 학습 효율이다. 같은 코퍼스가 더 적은 토큰이 되면 같은 계산 예산으로 더 많은 "지식"을 통과시킬 수 있다.


이 압축 관점은 이 바카라 전체를 관통하는 렌즈다. 뒤에서 다룰 BPE는 문자 그대로 1994년의 데이터 압축 알고리즘이고, "현존 최고의 토크나이저" 논쟁의 상당 부분은 결국 "누구의 압축이 어떤 분포에서 더 효율적인가"의 논쟁이다. 그리고 한국어 사용자가 같은 내용으로 더 많은 요금을 내는 문제도, 본질적으로 영어에 최적화된 압축기가 한국어를 비효율적으로 압축하는 문제다.


1.4 이 장에서 기억할 것


모델은 토큰 내부를 보지 못한다. 토큰은 모델의 지각 원자다. 토크나이제이션은 어휘 크기 ↔ 시퀀스 길이의 트레이드오프이며, 서브워드는 그 다이얼이다.

좋은 토크나이저는 좋은 압축기다. 이 관점 하나로 이 분야의 논쟁 대부분을 정리할 수 있다.



2장. 짧은 역사 — 규칙에서 통계로


2.1 규칙 기반의 시대


초기 자연어 처리에서 토크나이제이션은 언어학의 영역이었다. 공백으로 자르고, 구두점을 분리하고, 축약형("don't" → "do n't")을 규칙으로 처리했다. Penn Treebank 토크나이저가 대표적이다. 이 접근의 문제는 명확했다. 규칙은 언어마다 새로 만들어야 하고, 공백이 없는 언어(중국어, 일본어, 태국어)에서는 아예 성립하지 않으며, 교착어(한국어, 터키어, 핀란드어)에서는 하나의 "단어"가 어근과 여러 접사의 결합이라 공백 단위가 의미 단위와 어긋난다.


한국어 진영이 오랫동안 형태소 분석기(MeCab, Kkma, Okt 등)에 의존한 것도 이 맥락이다. "먹었습니다"를 "먹/었/습니다"로 자르는 것은 언어학적으로 옳지만, 형태소 분석기는 사전과 규칙의 유지보수 비용이 크고, 신조어와 오탈자에 취약하며, 분석기마다 결과가 달라 재현성이 흔들렸다.


2.2 통계적 전환 — 신경망 기계번역과 OOV의 벽


2014~2015년 신경망 기계번역(NMT)이 부상하면서 문제가 첨예해졌다. 당시 모델들은 단어 단위 어휘를 썼고, 어휘를 아무리 키워도 번역해야 할 문장에는 반드시 처음 보는 단어 — 고유명사, 숫자, 합성어 — 가 나타났다. <UNK>로 뭉개진 단어는 번역이 불가능했다.


2016년 Sennrich, Haddow, Birch의 논문 "Neural Machine Translation of Rare Words with Subword Units"가 전환점이었다. 이들의 통찰은 단순했다. 번역 불가능해 보이는 희귀 단어의 상당수는 사실 알려진 조각들의 조합이다. 그렇다면 단어를 통계적으로 자주 나오는 조각으로 분해하면, 열린 어휘(open vocabulary)를 닫힌 어휘로 다룰 수 있다. 이들이 가져온 도구가 1994년 Philip Gage의 데이터 압축 알고리즘, Byte Pair Encoding(BPE) 이었다.


이 순간부터 토크나이제이션은 언어학에서 통계학으로 넘어갔다. 언어학적 "옳음" 대신 코퍼스 통계에 의한 "효율"이 기준이 되었다. 이후 Google의 WordPiece(BERT), Unigram LM과 SentencePiece(Kudo), OpenAI의 바이트 수준 BPE(GPT-2)로 이어지는 계보가 모두 이 전환 위에 서 있다.


2.3 계보 한눈에 보기



연도 이정표 핵심 기여

1994 Gage, BPE 데이터 압축 알고리즘으로서의 BPE

지금 바로 작가의 멤버십 구독자가 되어
멤버십 특별 연재 콘텐츠를 모두 만나 보세요.

brunch membership
HJH작가님의 멤버십을 시작해 보세요!

前 SAMSUNG KNOX 메인개발자, 前 ETRI ARM firmware 강사 6年, 前(주)쏘닥 CTO, 前(주)이엑스 CTO. 스타트업 CTO... 기술을 쉽게...

431 구독자

오직 멤버십 구독자만 볼 수 있는,
이 작가의 특별 연재 콘텐츠

  • 최근 30일간 23개의 멤버십 콘텐츠 발행
  • 총 449개의 혜택 콘텐츠
최신 발행글 더보기
카지노 게임의 이전글Open ZeliAi