서브워드(Subword)란
자연어 처리(NLP)에서 하나의 단어를 더 작은 의미 단위인 부분 단어로 분절하는 방식
왜 토큰화/벡터화 해야하나
- 딥러닝 모델은 문자열을 그대로 연산 불가능
- 따라서 텍스트를 모델에 넣기 위해서는 문자열 -> 토큰 -> 정수ID시퀸스 -> (임베딩) 실수 벡터로 바꿔야함
- 유사도 학습(비슷한 단어/문장)을 하려면 거리/각도 같은 수치연산이 가능한 벡터 공간 필요
timestep이란
시퀸스 모델에서 순서가 있는 입력의 한 칸
['오늘', '학원', '간다'] -> timestep1 = '오늘', timestep2 = '학원'
서브워드 토크나이징이 필요한 이유
단어 사전(상위 단어 N개) 방식의 한계
- 한국어는 활용/조사/띄어쓰기 등 변형이 많고 신조어도 많아 OOV가 계속 생김
- 단어 사전은 OOV를
<unk>로 처리하기에 정보 손실이 큼
서브워드의 장점
- 모르는 단어도 조각으로 조합 가능->
<UNK>감소
- 띄어쓰기, 오타에도 강함
- VOCAB SIZE를 고정하면서도 커버리지 확보 가능
vocab_size가 정확히 뭔가?
1) vocab_size = 토큰 "종류" 개수(사전 크기)
SentencePiece가 학습해서 만드는 서브워드 조각 종휴(10000개)
2) 문장 토큰 수(시퀸스 길이) = 실제 한 문장이 쪼개진 토큰 "개수"
- 같은 문장이라도 vocab_size가 더 크면 큰 조각을 더 많이 쓸수 있어서 문장 토큰 개수는 줄어들수 있다
SentencePiece와 WordPiece
- SentencePiece(이하 spm)는 "▁"기호를 사용하여 공백(단어 경계))를 표현
- WordPiece는 ##가 공백표시가 아닌 단어 내부 접두 표식(앞 토큰에 붙는 조각)