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회 (low5 +lower2)ow: 7회we: 8회 (lower2 +newest6) …등등es: 9회 (newest6 +widest3)st: 9회 (newest6 +widest3)
가장 빈도가 높은 e와 s를 합쳐 **es**라는 새 토큰을 만듭니다. (동점일 경우 보통 먼저 나오는 걸 선택)
업데이트된 데이터:
l o wl o w e rn e westw i d eest
Step 3: 두 번째 병합
다시 쌍을 셉니다. 이번에는 es와 t가 자주 붙어 나옵니다.
est: 9회 (newest6 +widest3)
es와t를 합쳐 **est**를 만듭니다.
업데이트된 데이터:
l o wl o w e rn e westw i d iest
Step 4: 반복… (최종 결과)
이 과정을 계속 반복하면, low도 하나의 토큰이 될 수 있습니다. 최종적으로, 처음 보는 단어인 **lowest**가 입력으로 들어온다면?
- 학습된 토큰인
low+est로 쪼개서 인식하게 됩니다.