# 토큰화가 무슨 뜻일까?
문법적으로 더 이상 나눌 수 없는 단위인
토큰으로 분리하는 작업을 의미합니다.
🚨 POS 태깅의 단점 🚨
처음 등장하는 단어를 처리할 경우, 모델에 Unknown Token이 들어가게 되어 모델의 성능이 낮아지는 것을 유발합니다.
# unknown token이란?
OOV(out of vocabulary),
즉 '단어 사전에 없다'는 문제가 발생할 경우에 나타난다.
인코딩 과정에서 처음 접하는 단어 토큰이 들어올 경우,
단어장에 없기 때문에 'unknown token (UNK)'를 반환하는 것이다.
✅ 예시
# 일반 토큰화
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> '링', '딩', '동', '-', '링', '딩', '동', ...
# Subword Tokenization (빈도 순: '링딩', '링디')
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> '링딩', '동', '-', '링딩', '동', '링디', '기', '링디' ...
예시에서는 빈도수가 높은 '링딩' 과 '링디'의 2 byte 짜리 토큰들을 1 byte로 치환해주었습니다.
이 때, '이웃하는' 2개의 바이트를 모두 치환할 수 있기 때문에, 3 byte 짜리 토큰까지 BPE 적용이 가능합니다. 적용 예시는 다음과 같습니다.
✅ 예시 2
# Subword Tokenization (빈도 순: '링딩동', '링디기')
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> '링딩동', '-', '링딩동', '링디기', '링디기' ...
✍️ 요약하자면, BPE의 핵심은! ✍️
✔︎ 빈도수가 높은 바이트를 치환
# '링딩동'을 A로, '링디기'를 B로 치환해보자.
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> 'A', '-', 'A', 'B', 'B' ...
✔︎ 그리고 '반복' 입니다.
# '링디기'를 치환한 B가 두 번 반복되면(BB), C로 치환해보자.
링딩동-링딩동, 링디기-딩디기-딩딩딩
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> 'A', '-', 'A', 'B', 'B' ...
'A', '-', 'A', 'B', 'B' ...
-> 'A', '-', 'A', 'C' ...
'A', '-', 'A', 'C' ...
(1) 글자 단위로 분리하여 딕셔너리에 추가
(2) 빈도수가 가장 높은 쌍을 딕셔너리에 추가.
-> 추가 서치 필요!
📚 관련 논문 (영문) : https://www.derczynski.com/papers/archive/BPE_Gage.pdf
# Unigram Language Model이란?
(문장에서 등장한 단어의 빈도수) % (전체 단어 수)
= (문장에서 각 단어가 등장할 확률)
-> 위의 확률을 계산한 후,
모델 학습 시 구해둔 단어들의 등장 확률을 곱하여
단어들이 '동시에' 나타날 확률을 구합니다.
✅ 예시
# Unigram Language Model로 단어의 등장확률을 구해보자
# (실제로 이렇게 출력되지는 않습니다 ㅎㅎ)
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> [ subword 목록 ]
'링딩동' (확률 = 40%)
'링디기' (확률 = 40%)
'딩딩딩' (확률 = 20%)
-> 다만, fine-tuning 과정에서는 전처리를 하면서 다양한 토큰화 과정을 시도해볼 수 있습니다.
📚 관련 논문 (영문) : https://aclanthology.org/D18-2012.pdf
📚 참고 자료 (한글) :
https://velog.io/@yeop2/AI-%EB%AA%A8%EB%8D%B8-%ED%83%90%ED%97%98%EA%B8%B0-4-%EB%8C%80%ED%95%99-%EC%BB%A4%EB%AE%A4%EB%8B%88%ED%8B%B0-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EC%83%9D%EC%84%B1%EA%B8%B0