데이터 분석/자연어처리

2. 자연어 처리 - Subword, BPE 알고리즘(OoV, UNK)

Jerry Jun 2021. 1. 17. 16:35
728x90

SubWord

Subword 란 단순한 단어 하나에도 작은 의미들이 뭉쳐있어 있는데 그 단위를 말하는 것이다.

한국어 단어를 예시로 들면 "집중"은 직역하는 [가운데] 로 [모은다] 라는 두가지 의미를 담고 있다. 그래서 자연어 처리를 할 때 이런 작은 단위들로 분절하여 의미를 둔다면 더 좋은 성능을 발휘할 것이다.

 

하지만 우리 머리로는 뜻이 나오지만 컴퓨터가 Subword 단위까지 분절하기 위해서는 subword 사전같은 데이터들이 필요할 것이다. 

 

 

BPE(Byte Pair Encoding) 알고리즘

2015년에 발표한 것으로 압축 알고리즘을 이용하여 subword segmentation 을 제안했다. 학습 코퍼스를 이용하여 BPE 모델을 학습한 뒤, 실제 코퍼스에 적용해보는 것이다. 이 알고리즘을 활용하여 언어별로 구분을 을 하지 않아도 되고, OoV(Out of Vocabulary) 를 제거할 수 있다는 장점이 있다.

 

OoV 가 발생하면 모델에 단어가 들어갈 공간에 UNK(Unknown token) 토큰이 들어가게 되어 이후 단어를 예측하는데 치명적인 장애를 겪을 수 있다는 점을 알아두자.

 

BPE algorithm

BPE 알고리즘의 학습과정은 다음과 같다.

  1. 코퍼스들의 단어들을 파악하고 빈도 계산
  2. 단어들을 모두 한 글자로 분절하고 pair 별로 빈도 계산
  3. 가장 많은 빈도를 가진 pair 합치기
  4. 다시 pair 별 빈도 재계산
  5. 3번 과정으로 돌아가기

이렇게 학습이 완료가 되면 실제 데이터에 적용을 시켜야 한다.

실제 코퍼스 데이터들의 각 단어들을 한 글자 단위로 분절시키고, 학습과정에서 빈도 순으로 결합된 pair 순으로 합치는 것이 완성이다. 이런 과정을 할 때 주의할 것은 단어들만 있는 것이 아니라 단어의 끝 또는 공백을 뜻하는 </w> 같은 것도 있다는 것을 알아두어야 한다. 실제 적용할 때 수집된 코퍼스들이 띄어쓰기가 뒤죽박죽인 경우가 있을 수 있다. 그렇기 때문에 바로 Subword Segmentation 을 진행하면 위험하다. 먼저 행태소 분석기를 이용한 tokenization 을 진행하고, Subword segmentation 을 하는 것이 좋을 것이다. 

300x250