새소식

딥러닝/자연어 처리

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 과정

  1. 코퍼스의 단어 사전 생성 (빈도)
  2. Character 단위로 분절 후, pair 별 빈도 카운트
  3. 최빈도 pair를 골라 merge 수행
  4. Pair 별 빈도 카운트 업데이트
  5. ③ 과정으로 돌아가기

 

Subword Segmentation Module : "SentencePiece"

https://github.com/google/sentencepiece

 

 

728x90
Contents