chatGPT를 위한 NLP 기초 : 워드 임베딩
지난 시간들을 다시 복습해 보면 자연어를 처리하기 위해서는 문자들을 컴퓨터가 해석할 수 있도록 벡터화를 진행을 해야 한다. 벡터화에는 통계 기반 기법과 추론 기반 기법으로 나뉜다. 저번 시간에는 통계 기반 기법에 대해서 공부를 했었다. 여기서 추가로 설명하자면 통계 기반 기법은 주로 머신러닝 학습에서 쓰인다. 그리고 추론 기반 기법은 신경망을 활용한 기법으로 주로 딥러닝 학습에서 사용되며 주변 단어의 맥락으로 추론을 하는 방식이다.
오늘은 추론 기반 기법을 활용하는 벡터화들에 대해서 간략하게 알아보도록 하겠다.
우리가 앞서 배운 통계 기반 기법은 희소 벡터의 특징을 가지고 있다. 희소 벡터에는 차원의 저주라는 문제가 있는데 이 차원의 저주는 용량은 커졌지만 실제 샘플 수가 작은 상태를 일컫는다. 대표적인 통계 기반 기법인 원-핫 인코딩을 예로 들어보면 단어장의 크기가 5,000이면 실제 유효한 값인 1 하나를 제외하고 나머지 4,999개는 무효한 값인 0이 된다. 즉 용량은 커졌지만 샘플의 수가 작은 상태가 되어 버린 것이다. 이렇게 되면 모델을 학습시키기가 어려워 진다.
참고자료(차원의 저주) : http://thesciencelife.com/archives/1001
출처 : https://www.pinecone.io/learn/dense-vector-embeddings-nlp/
이러한 문제를 해결하기 위해서 워드 임베딩 기법을 통해서 단어장의 크기보다 적은 차원의 밀집 벡터로 만든다. 이 밀집 벡터는 임베딩 벡터 부르기도 하며 희소 벡터와 달리 0과 1로 이루어진 값이 아니라 다양한 실숫값을 가진다.
또한 워드 임베딩에서 단어 사이의 관계나 문장에서 단어가 갖는 특징을 계산해서 숫자로 나타낸다. 이 숫자가 높을수록 단어의 연관성이 높은 적합한 표현이라고 판단할 수 있다.
즉, 정리해 보자면 워드 임베딩은 희소 벡터가 아닌 길이가 짧은 밀집 벡터로 나타낸다. 그리고 이 밀집 벡터는 단어가 갖는 의미, 단어 간의 관계 등을 식으로 내포하고 있다.
그렇다면 이제부터는 워드 임베딩을 만드는 여러 가지 방법들 중 대표적인 Word2vec와 이를 개선하여 나온 FastText와 GloVe를 살펴보도록 하겠다. 우선은 간단하게 살펴볼 FastText와 GloVe를 소개하겠다.
FastText는 Word2vec와 유사하지만 문자 단위 n-gram 표현을 학습한다는 점에서 차이점을 보이고 있다. 이는 하나의 단어 안에도 여러 단어들이 존재하는 내부단어(서브워드)를 고려하여 학습을 한다는 것이다. 반면 Word2Vec는 쪼개질 수 없는 단위이다. 그리고 n-gram은 또 다른 특징이 있는데 n은 하이퍼파라미터로 단어들이 얼마나 분리되는지 결정한다.
한국에서는 FastText를 음절 단위와 자모 단위로 쪼갤 수 있다.
GloVe는 통계 기반 기법과 추론 기반 기법을 모두 사용한 방법이다. 추론 기반인 Word2Vec와 통계 기반인 LSA의 단점을 보완한 것이다.
GloVe를 이해하기 위해서는 윈도우 기반 동시 행렬과 동시 등장 확률 그리고 GloVe의 손실 함수를 설계할 줄 알아야 한다.
위의 FastText와 GloVe에 대해서는 소개만 하고 넘어 가도록 하겠다. 추가적으로 더 공부하고 싶다면 아래의 링크를 참조하면 자세히 공부해 볼 수 있을 것이다.
FastText : https://wikidocs.net/22883
GloVe : https://wikidocs.net/22885