Introduction


  • Word-level : ‘apple’, ‘apples’, ‘apple-like’ 와 같은 단어들을 별개로 취급하니, OOV(Out-Of-VOCA) 문제가 있으므.
  • Character-level : OOV 문제는 없지만, 문장이 너무 길어지고 char-level에 semantics가 담긴다고 보기는 어려움.
    BPE 제안.

BPE


Algorithm


  • 모든 단어들을 char-level로 분리.
  • 가장 빈번한 쌍을 찾아 페어를 붙여서 token으로 취급.
  • 정해진 횟수만큼 반복하여 token생성.

Benefits


  • OOV 및 new-word에 대응
  • 효율적인 VOCA 만들기 가능.
  • semantics 가 token 단위에도 담길 수 있음.(un-like char-level encoding)

Examples(from Gemini)


가상의 데이터셋에 다음과 같은 단어들이 빈도수와 함께 있다고 가정해 봅시다.

데이터셋:

  • low: 5회
  • lower: 2회
  • newest: 6회
  • widest: 3회

Step 1: 초기 상태 (글자 단위 분리)

모든 단어를 글자로 쪼개고 빈도를 셉니다.

  • l o w (5)
  • l o w e r (2)
  • n e w e s t (6)
  • w i d e s t (3)

현재 어휘 집합(Vocab): {l, o, w, e, r, n, s, t, i, d}

Step 2: 빈도수 계산 및 첫 번째 병합

모든 인접한 쌍의 빈도를 셉니다.

  • lo: 7회 (low 5 + lower 2)
  • ow: 7회
  • we: 8회 (lower 2 + newest 6) …등등
  • es: 9회 (newest 6 + widest 3)
  • st: 9회 (newest 6 + widest 3)

가장 빈도가 높은 es를 합쳐 **es**라는 새 토큰을 만듭니다. (동점일 경우 보통 먼저 나오는 걸 선택)

업데이트된 데이터:

  • l o w
  • l o w e r
  • n e w es t
  • w i d e es t

Step 3: 두 번째 병합

다시 쌍을 셉니다. 이번에는 est가 자주 붙어 나옵니다.

  • est: 9회 (newest 6 + widest 3)
    est를 합쳐 **est**를 만듭니다.

업데이트된 데이터:

  • l o w
  • l o w e r
  • n e w est
  • w i d i est

Step 4: 반복… (최종 결과)

이 과정을 계속 반복하면, low도 하나의 토큰이 될 수 있습니다. 최종적으로, 처음 보는 단어인 **lowest**가 입력으로 들어온다면?

  • 학습된 토큰인 low + est로 쪼개서 인식하게 됩니다.