SubWord
Subword 란 단순한 단어 하나에도 작은 의미들이 뭉쳐있어 있는데 그 단위를 말하는 것이다.
한국어 단어를 예시로 들면 "집중"은 직역하는 [가운데] 로 [모은다] 라는 두가지 의미를 담고 있다. 그래서 자연어 처리를 할 때 이런 작은 단위들로 분절하여 의미를 둔다면 더 좋은 성능을 발휘할 것이다.
하지만 우리 머리로는 뜻이 나오지만 컴퓨터가 Subword 단위까지 분절하기 위해서는 subword 사전같은 데이터들이 필요할 것이다.
BPE(Byte Pair Encoding) 알고리즘
2015년에 발표한 것으로 압축 알고리즘을 이용하여 subword segmentation 을 제안했다. 학습 코퍼스를 이용하여 BPE 모델을 학습한 뒤, 실제 코퍼스에 적용해보는 것이다. 이 알고리즘을 활용하여 언어별로 구분을 을 하지 않아도 되고, OoV(Out of Vocabulary) 를 제거할 수 있다는 장점이 있다.
OoV 가 발생하면 모델에 단어가 들어갈 공간에 UNK(Unknown token) 토큰이 들어가게 되어 이후 단어를 예측하는데 치명적인 장애를 겪을 수 있다는 점을 알아두자.
BPE 알고리즘의 학습과정은 다음과 같다.
- 코퍼스들의 단어들을 파악하고 빈도 계산
- 단어들을 모두 한 글자로 분절하고 pair 별로 빈도 계산
- 가장 많은 빈도를 가진 pair 합치기
- 다시 pair 별 빈도 재계산
- 3번 과정으로 돌아가기
이렇게 학습이 완료가 되면 실제 데이터에 적용을 시켜야 한다.
실제 코퍼스 데이터들의 각 단어들을 한 글자 단위로 분절시키고, 학습과정에서 빈도 순으로 결합된 pair 순으로 합치는 것이 완성이다. 이런 과정을 할 때 주의할 것은 단어들만 있는 것이 아니라 단어의 끝 또는 공백을 뜻하는 </w> 같은 것도 있다는 것을 알아두어야 한다. 실제 적용할 때 수집된 코퍼스들이 띄어쓰기가 뒤죽박죽인 경우가 있을 수 있다. 그렇기 때문에 바로 Subword Segmentation 을 진행하면 위험하다. 먼저 행태소 분석기를 이용한 tokenization 을 진행하고, Subword segmentation 을 하는 것이 좋을 것이다.
'데이터 분석 > 자연어처리' 카테고리의 다른 글
4. 자연어 처리 - Word Embedding(WordNet) (0) | 2021.02.03 |
---|---|
3. 자연어 처리 - 텍스트 유사도(n-gram, 코사인 유사도) (1) | 2021.01.18 |
자연어 처리 기초 - 정규표현식 알아보기(정리, 실습편) (0) | 2021.01.16 |
1. 자연어 처리(NLP, NLU, NLG) - 수집, 정제, tokenization (0) | 2021.01.14 |