Books/한국어 임베딩

[Books] 임베딩(embedding)의 종류

언킴 2022. 3. 5. 21:51
반응형

이기창님께서 작성하신 한국어 임베딩을 정리 및 요약했습니다.

 

컴퓨터는 사람이 사용하는 자연어를 제대로 이해할 수가 없다. 그렇기 때문에 기계가 이해할 수 있도록 변환해주는 작업이 필요하다. 자연어가 가지는 통계적인 패턴(statistical pattern)을 벡터로 변환해주는 것이다. 임베딩을 만들 때 쓰는 통계 정보는 단어의 빈도, 언어 모델, 분포 가정으로 총 세 가지가 존재한다. 

 

 

단어의 빈도

단어의 빈도는 BoW(Bag of Words)라고도 부르며, 어떤 단어가 많이 쓰였는지를 중요시한다. 순서를 고려하지 않고 단어들을 파싱(parsing)해서 단어의 빈도 수만 확인하는 방법이며, 대표적인 기법으로는 TF-IDF(Term Frequency-Inverse Document Frequency)이다. 딥러닝 버전으로는 Deep Averaging Network가 존재한다.[reference]

 

여기서 의미하는 Bag은 중복 원소를 허용하는 집합을 의미한다. BoW 임베딩에는 주제가 비슷한 문서라면 단어 빈도 또는 단어 등장 여부 역시 비슷할 것이고, BoW 임베딩 역시 유사할 것이라는 가정을 전제로 진행된다. 사용자 질문에 가장 적절한 문장을 보여줄 때 질문과 검색 대상 문서 임베딩 간 유사도를 구해 가장 높은 문서를 사용자에게 노출하는 형태로 많이 사용된다. 

 

TF-IDF

TF-IDF는 BoW 임베딩의 대표적인 기법 중 하나이다. 단순히 단어의 빈도만을 기반으로 임베딩 작업을 하게 되면 문제가 발생한다. 예를 들어 '을/를', '이/가' 와 같은 단어는 당연히 무수히 많이 등장할 것이다. 이런 문제를 보완하기 위해 제안된 기법이 TF-IDF이며, IDF를 통해 많이 등장한 단어에 패널티를 부과하는 형태로 계산되며, 수식은 다음과 같다. 

 

$ TF-IDF(w) = TF(w) \times \log(\frac{N}{DF(w)}) $

 

$TF$는 어떤 단어가 특정 문서에 얼마나 많이 쓰였는지에 대한 값을 의미하고, $DF$는 특정 단어가 나타난 문서 수를 의미한다. $DF$의 값이 클수록 모든 문서에 출현한 단어이기 때문에 범용적인 단어라고 볼 수 있다. $IDF$는 전체 문서 수($N$)을 $DF$로 나눈 후 로그를 취해준 값이다. 적게 출현한 단어일수록 더 큰 값을 부여한다는 의미이다. 예를 들어 전체 문서는 10이라고 하고, '학교'라는 단어는 2번 등장하고, '나'라는 단어는 10번 등장했다고 하자 그렇다면 학교의 $IDF$는 $\log(5)$가 되고, '나'의 $IDF$는 $\log(1)$이 된다. 학교가 훨씬 높은 $IDF$를 보여주고 있다.

 

Deep Averaging Network

Deep Averaging Network는 BoW 가정의 뉴럴네트워크 버전이라고 한다. DAN는 문장의 임베딩은 중복집합에 속한 단어의 임베딩을 평균을 취해 계산하게 된다. 그렇기에 단어들 간 순서가 달라지더라도 동일한 임베딩을 가지게 된다 DAN은 문장 내 어떤 단어가 쓰였는지, 쓰였다면 얼마나 쓰였는지에 대해서만 고려한다. 

 

 

언어 모델

통계 기반 언어 모델

단어의 순서를 고려하지 않는 BoW 가정의 대척점으로 언어 모델(Language model)이 존재한다. 언어 모델은 단어의 등장 순서를 학습해 주어진 단어 시퀀스가 얼마나 자연스러운지 확률을 부여한다. 단어가 n개 주어지면 언어 모델은 n개의 단어가 동시에 나타날 확률을 반환한다. 대표적인 기법으로는 n-gram, ELMo, GPT 등이 존재한다. 

 

n-gram

n-gram은 통계 기반 언어 모델이며, n은 단어를 의미한다. 주변 n개의 단어를 고려해 확률을 계산한다. 예를 들어 난폭, 운전 혹은 눈, 뜨다 등의 2개의 단어만을 고려해 확률 값을 구한다면 2-gram 혹은 bigram으로 부른다. n-gram의 확률을 구하기 위해서는 조건부확률(conditional probability)의 정의를 이용해 MLE(Maximum Likelihood Estimation)으로 유도하며, n-gram중 하나인 bigram의 수식은 다음과 같다. (MLE는 여기를 참고하자)

 

 \[ P(w_n | w_{n-1}) = \frac{Freq(w_{n-1}, w_n)}{Freq(w_{n-1})} \]

 

\[ P(w^n_1) = P(w_1, w_2, \cdots , w_n) = \prod_{k=1}^n P(w_k | w_{k-1}) \]

 

n-gram의 경우 데이터에 한 번도 등장하지 않는 n-gram이 존재할 경우 예측 단게에서 문제가 발생할 수 있다. 위 수식은 각각의 확률값을 곱해서 연산을 진행하는데, 하나라도 확률값이 0으로 출력될 경우 확률을 0으로 부여하게 된다.  이를 위해 백오프(back-off), 스무딩(smoothing)등의 방식이 제안됐다. 백오프는 n-gram 등장 빈도를 n보다 작은 범위의 단어 시퀀스 빈도로 근사하는 방식이다. 예를 들어 7-gram의 단어로 예측했을 때 0의 값을 가진다면, 백오프 방식(4-gram 등)으로 낮은 범위의 단어를 사용해 근사하며, 이때 $\alpha$와 $\beta$를 사용하게 된다. 

 

$ Freq(7-gram) = \alpha Freq(4-gram) + \beta $

 

스무딩은 단어 등장 빈도 표에 모두 k만큼을 더하는 기법이다. 그렇게 되면 한 번도 안나온 문장도 k 번 출현 빈도를 가지게 되는 것이다. 이때문에 Add-k 스무딩이라고 부르기도 한다. k가 1인 특수한 경우는 라플라스 스무딩(laplace smoothing)이라고 부른다. 

 

 

 

뉴럴 네트워크 기반 언어 모델

언어 모델 중 통계 기반 언어 모델은 단어의 빈도를 기반으로 학습이 이루어진다. 뉴럴 네트워크 기반 언어 모델은 단어 시퀀스를 가지고 다음 단어를 예측하는 과정에서 학습된다. 학습이 완료되면 모델의 중간, 혹은 마지막 결과물을 단어나 문장의 임베딩으로 활용한다. 언어 모델 기반 기법은 단어를 순차적으로 입력받아 다음 단어를 맞추어야 하기 때문에 단방향(uni-directional)이다. 하지만 마스킹 모델(BERT, GPT와 같은)은 문장의 전체를 본 후 중간의 단어를 예측하기에 양방향(bi-directional) 학습이 가능하다. 

 

 

 

분포 가정 

분포 가정(distributional hypothesis)에서는 어떤 단어가 함께 쓰였는지 동시에 출현한 단어를 중요하게 따진다. 분포 가정의 대표 통계량은 PMI(Pointwise Mutual Information)이며, 대표적인 모델은 Word2Vec가 존재한다. 자연어 처리에서 분포란 특정 범위, 즉 윈도우(window) 내에 동시에 등장하는 단어 또는 문맥(context)의 집합을 의미한다. 타깃 단어(target word)와 문맥 단어(context word) 간의 관계를 유추해 타깃 단어들 끼리 유사한지를 판단한다. 

 

단어 간 관계를 유추할 때 형태소(morpheme)를 기반으로 주변 문맥을 고려해 단어 간 어떤 관계가 있을지 파악할 수 있을 것이다. 언어학에서는 형태소의 경계를 정하거나 품사를 나누는 형태로 접근한다. 이와 같은 접근은 말뭉치의 분포 정보와 매우 밀접한 관계를 이루고 있다고 한다. 이러한 정보를 임베딩에 함축하게 되면 해당 벡터에 해당 단어의 의미를 자연스레 내재시킬 수 있게 된다. 

 

점별 상호 정보량(Pointwise Mutual Information, PMI)

PMI는 두 확률변수 사이의 상관성을 계량화하는 단위이다. 두 확률변수가 완전한 독립인 경우 0을 의미한다. 반대로 단어 A와 B가 자주 같이 나타난다면 PMI 값은 커진다. 조건부 확률과 같은 맥락이지만, $\log$를 취해준 값이며, 수식은 다음과 같다. 

 

\[ PMI(A, B) = \log \frac{P(A,B)}{P(A) \times P(B)} \]

 

window size를 정하고, window size의 단어를 고려한 단어-문맥 행렬을 구축할 수 있을 것이다. 단어 문맥 행령의 예시는 다음과 같다. window size가 2라면 타깃 단어 앞뒤로 2개의 문맥 단어의 빈도를 계산하는 것이다.

 

Word2Vec

분포 가정의 대표적인 모델은 2013년에 구글 연구팀이 발표한 Word2Vec라는 임베딩 기법이다. Word2Vec는 CBOW와 Skip-gram으로 나뉘며, CBOW는 문맥 단어들을 가지고 타깃 단어 하나를 맞추는 과정에서 학습된다. Skip-gram은 타깃 단어를 가지고 문맥 단어가 무엇일지 예측한다. 모두 특정 타깃 단어 주변의 문맥, 즉 분포 정보를 임베딩에 함축하며, 대체로 CBOW보다 Skip-gram의 성능이 더 좋다고 알려져있다.