NLP_Preprocessing : 5)Subword Segmentation
Preprocessing Workflow
1. 코퍼스 수집 : 구입,외주,크롤링
2. 정제 : Task에 따른 노이즈 제거, 인코딩 변환
(3. 레이블링 : Task에 따른 문장 or 단어마다 labeling 수행)
4. Tokenization : 형태소 분석기 활용하여 분절 수행
(5. Subword Segmentation : 단어보다 더 작은 의미 추가 분절 수행)
6. Batchify : 사전 생성 및 word2index 맵핑 수행, 효율화를 위한 전/후처리
Token 평균 길이에 따른 성격과 특징 : "토큰 길이에 따른 Trade-off가 존재"
- 짧을 수록 : Vocabulary 크기 감소 → 희소성 문제 감소
OoV가 줄어듬
Sequence의 길이가 길어짐 → 모델의 부담 증가 - 길 수록 : Vocabulary 크기 증가 → 희소성 문제 증대
OoV가 늘어남
Sequence의 길이가 짧아짐 → 모델의 부담 감소
OoV가 미치는 영향
입력 데이터에 OoV가 발생할 경우 <UNK> 토큰으로 치환하여 모델에 입력한다.
이전 단어들을 기반으로 다음 단어를 예측하는 task(NLG)에서 치명적이다.
이상적인 Token 길이의 형태
- 빈도가 높을 경우는 하나의 Token으로 치환
- 빈도가 낮을 경우 더 잘게 쪼개어 각각 빈도가 높은 Token으로 치환
Subword : "단어보다 더 작은 의미 단위"
한국어 단어를 예로 들면 "집중"은 集(모을 집) + 中(가운데 중)
영어 단어를 예로 들면 "Concentrate"는 con(together) + centr(center) + ate(make)
그러나 Subword 단위까지 분절하기 위해서는 언어별 subword 사전을 사용하거나
통계적으로 Segementation을 수행할 수 있다. (아래에서 소개하는 BPE 알고리즘)
Byte Pair Encoding (BPE) 알고리즘 : "압축 알고리즘을 활용하여 subword segmentation"
학습 코퍼스를 활용하여 BPE 모델을 학습 후, 학습/테스트 코퍼스에 적용하는 방식
BPE를 통해 OoV를 없앨 수 있어서 성능상 매우 큰 이점으로 작용
❗주의사항❗ : 한국어의 경우 작성자에 따라 띄어쓰기가 제멋대로인 경우가 많으므로 normalization 없이 바로 subword segmentation을 적용하는 것은 위험하다. → 형태소 분석기를 통한 tokenization을 진행한 후 subword segmentation을 진행하면 좋다.
장점
- 통계에 기반하여 희소성을 효과적으로 낮출 수 있다.
- 언어별 특성에 대한 정보 없이, 더 작은 의미 단위로 분절할 수 있다.
- OoV를 없앨 수 있다.
단점
- 학습 데이터 별로 BPE 모델이 생성된다.
BPE Training 과정
- 코퍼스의 단어 사전 생성 (빈도)
- Character 단위로 분절 후, pair 별 빈도 카운트
- 최빈도 pair를 골라 merge 수행
- Pair 별 빈도 카운트 업데이트
- ③ 과정으로 돌아가기
Subword Segmentation Module : "SentencePiece"
https://github.com/google/sentencepiece