딥러닝/NLP

한국어 임베딩 - 벡터가 어떻게 의미를 가지게 되는가

eunsour 2022. 9. 19.
반응형

자연어 계산과 이해

 임베딩은 자연어를 컴퓨터가 처리할 수 있는 숫자들의 나열인 벡터로 바꾼 결과이다. 컴퓨터는 임베딩을 계산/처리해 사람이 알아들을 수 있는 형태의 자연어로 출력한다.

 

 그러면 임베딩에 자연어 의미를 어떻게 함축할 수 있을까. 그 비결은 자연어의 통계적 패턴 정보를 통째로 임베딩에 넣는 것이다. 자연어의 의미는 해당 언어 화자들이 실제 사용하는 일상 언어에서 드러나기 때문이다. 임베딩을 만들 때 쓰는 통계 정보는 크게 세 가지가 있다. 첫째는 문장에 어떤 단어가 (많이) 쓰였는지이고, 둘째는 단어가 어떤 순서로 등장하는지이며, 마지막으로는 문장에 어떤 단어가 같이 나타났는지와 관련된 정보다. 

 

구분 백오브워즈 가정 언어 모델 분포 가정
내용 어떤 단어가 (많이) 쓰였는가 단어가 어떤 순서로 쓰였는가 어떤 단어가 같이 쓰였는가
대표 통계량 TF-IDF PMI
대표 모델 Deep Averaging Network ELMo, GPT Word2Vec

 

 백오브워즈 가정에서는 어떤 단어가 (많이) 쓰였는지 정보를 중시한다. 저자의 의도는 단어 사용 여부나 그 빈도에서 드러난다고 보기 때문이다. 단어의 순서 정보는 무시한다. 백오브워즈 가정에서 가장 많이 쓰이는 통계량은 Term Frequency-Inverse Document Frequency(TF-IDF)이며 백오브워즈 가정의 딥러닝 버전은 Deep Averaging Network(Iyyer et al., 2015)다. 

 

 단어의 등장 순서를 무시하는 백오브워즈 가정의 대척점에는 언어 모델(language model)이 있다. 언어 모델은 단어의 등장 순서를 학습해 주어진 단어 시퀀스가 얼마나 자연스러운지 확률을 부여한다. ELMo, GPT 등과 같은 뉴럴 네트워크 기반의 언어 모델이 여기에 해당한다. 

 

 분포 가정(distributional hypothesis)에서는 문장에서 어떤 단어가 같이 쓰였는지를 중요하게 따진다. 단어의 의미는 그 주변 문맥을 통해 유추해볼 수 있다고 보는 것이다. 분포 가정의 대표 통계량은 점별 상호 정보량(PMI, Pointwise Mutual Information)이며 대표 모델은 Word2Vec을 꼽을 수 있다. 

 

위의 세 철학은 서로 연관이 있다. 언어 모델에서는 단어의 등장 순서를, 분포 가정에서는 이웃 단어(문맥)를 우선시한다. 어떤 단어가 문장에서 주로 나타나는 순서는 해당 단어의 주변 문맥과 떼려야 뗄 수 없는 관계를 가진다. 한편 분포 가정에서는 어떤 단어 쌍이 얼마나 같이 자주 나타나는지와 관련된 정보를 수치화하기 위해 개별 단어 그리고 단어 쌍의 빈도 정보를 적극 활용한다. 백오브워즈 가정, 언어 모델, 분포 가정은 말뭉치의 통계적 패턴을 서로 달은 각도에서 분석하는 것이며 상호 보완적이다. 

 

어떤 단어가 많이 쓰였는가

백오브워즈 가정

 수학에서 (bag)이란 중복 원소를 허용한 집합(multiset)을 뜻한다. 원소의 순서는 고려하지 않는다. 자연어 처리 분야에서 백오브워즈란 단어의 등장 순서에 관계없이 문서 내 단어의 등장 빈도를 임베딩으로 쓰는 기법을 말한다. 백오브워즈는 문장을 단어들로 나누고 이들을 중복 집합에 넣어 임베딩으로 활용하는 것이라고 보면 된다. 

 

 백오브워즈 임베딩에는 ‘저자가 생각한 주제가 문서에서의 단어 사용에 녹아있다'는 가정이 깔려있다. 다시 말해 주제가 비슷한 문서라면 단어 빈도 또는 단어 등장 여부 역시 비슷할 것이고, 백오브워즈 임베딩 역시 유사할 것이라고 보는 것이다. 빈도를 그대로 백오브워즈로 쓴다면 많이 쓰인 단어가 주제와 더 강한 관련을 맺고 있을 것이라는 전제 역시 깔려 있다. 

 

 백오브워즈 임베딩은 간단한 아이디어지만 정보 검색(Information Retrieval) 분야에서 여전히 많이 쓰이고 있다. 사용자의 질의에 가장 적절한 문서를 보여줄 때 질의를 백오브워즈 임베딩으로 변환하고 질의와 검색 대상 문서 임베딩 간 코사인 유사도를 구해 가장 높은 문서를 사용자에게 노출한다.

 

TF-IDF

 단어 빈도 또는 등장 여부를 그대로 임베딩으로 쓰는 것에는 큰 단점이 있다. 어떤 문서에든 쓰여서 해당 단어가 많이 나타났다 하더라도 문서의 주제를 가늠하기 어려운 경우가 있기 때문이다. 예컨대 ‘을/를', ‘이/가' 같은 조사는 대부분의 한국어 문서에 등장한다. 이에 우리는 ‘을/를' 또는 ‘이/가’만으로는 해당 문서의 주제를 추측하기 어렵다. 

 

 이러한 단점을 보완하기 위해 제안된 기법이 Term Frequency-Inverse Document Frequency(TF-IDF)이다. 단어-문서 행렬에 다음 수식과 같이 가중치를 계산해 행렬 원소(matrix element)를 바꾼다. TF-IDF 역시 단어 등장 순서를 고려하지 않는다는 점에서 백오브워즈 임베딩이라고 이해할 수 있다. 

 수식에서 TF(Term Frequency)는 어떤 단어가 특정 문서에 얼마나 많이 쓰였는지 빈도를 나타낸다. 많이 쓰인 단어가 중요하다는 가정을 전제로 한 수치다. 예컨대 A라는 단어가 문서 1에서 10번, 문서 3에서 5번 쓰였다면 문서 1 - 단어 A의 TF는 10, 문서 3 - 단어 A의 TF는 5가 된다. 

 

 DF(Document Frequency)란 특정 단어가 나타난 문서의 수를 뜻한다. 만약 A라는 단어가 말뭉치 전체에서 문서 1, 문서 3에만 등장했다면 DF는 2가 된다. DF가 클수록 다수 문서에 쓰이는 범용적인 단어라고 볼 수 있겠다. TF는 같은 단어라도 문서마다 다른 값을 갖고, DF는 문서가 달라지더라도 단어가 같다면 동일한 값을 지닌다. 

 

 IDF(Inverse Document Frequency)는 전체 문서 수(N)를 해당 단어의 DF로 나눈 뒤 로그를 취한 값이다. 그 값이 클수록 특이한 단어라는 뜻이다. 이는 단어의 주제 예측 능력과 직결된다. 

 

Deep Averaging Network

Deep Averaging Network(Iyyer et al., 2015)는 백오브워즈 가정의 뉴럴 네트워크 버전이다. 모델의 콘셉트는 다음 그림과 같다. 

 

 Deep Averaging Network는 백오브워즈 가정과 연결될 수 있는 지점은 단어의 순서를 고려하지 않는다는 점에 있다. 그림에서 확인할 수 있는 것처럼 [Predator is a masterpiece]라는 문장의 임베딩은 중복 집합 {Predator, is, a, masterpiece}에 속한 단어의 임베딩을 평균을 취해 만든다. 벡터의 덧셈은 교환 법칙이 성립하기 때문에 순서가 상관없어진다. 

 

 요컨대 Deep Averaging Network는 문장 내에 어떤 단어가 쓰였는지, 쓰였다면 얼마나 많이 쓰였는지 그 빈도만을 따진다. 이러한 문장 임베딩을 입력받아 해당 문서가 어떤 범주인지 분류한다. 간단한 구조의 아키텍처임에도 성능이 좋아서 현업에서도 자주 쓰인다. 

 

 

반응형

 

단어가 어떤 순서로 쓰였는가 

통계 기반 언어 모델 

 언어 모델(Language model)이란 단어 시퀀스에 확률을 부여하는 모델이다. 단어의 등장 순서를 무시하는 백오브워즈와 달리 언어 모델은 시퀀스 정보를 명시적으로 학습한다. 따라서 백오브워즈의 대척점에 언어 모델이 있다고 말할 수 있다.

 

 단어가 n개 주어진 상황이라면 언어 모델은 n개 단어가 동시에 나타날 확률을 반환한다. 통계 기반의 언어 모델은 말뭉치에서 해당 단어 시퀀스가 얼마나 자주 등장하는지 빈도를 세어 학습한다. 

 

 잘 학습된 언어 모델이 있다면 어떤 문장이 그럴듯한 지(확률 값이 높은지), 주어진 단어 시퀀스 다음 단어는 무엇이 오는 게 자연스러운지 알 수 있다.

  • 누명을 쓰다 → 0.41
    누명을 당하다 → 0.02
  • 두시 삼십이분 → 0.51
    이시 서른두분 → 0.08

 n-gram이란 n개 단어를 뜻하는 용어다. [난폭, 운전], [눈, 뜨다] 등은 2-gram 또는 바이그램이다. [누명, 을, 쓰다] 등은 3-gram 또는 트라이그램, [바람, 잘, 날, 없다] 등은 4-gram이다. 경우에 따라서 n-gram은 n-gram에 기반한 언어 모델을 의미하기도 한다. 말뭉치 내 단어들을 n개씩 묶어서 그 빈도들을 학습했다는 뜻이다. 

 

 다음 표는 네이버 영화 리뷰 말뭉치에서 각각의 표현이 등장한 횟수를 가리킨다. 띄어쓰기 단위인 어절을 하나의 단어로 보고 빈도를 센 것이다. 표를 보면 [내 마음 속에 영원히 기억될 최고의 명작이다]는 이 말뭉치에 한 번도 등장하지 않는다. 이 경우 네이버 영화 말뭉치로 학습한 언어 모델은 해당 표현이 나타날 확률을 0으로 부여하게 된다. 즉, 문법적으로나 의미적으로 결함이 없는 훌륭한 한국어 문장임에도 해당 표현을 말이 되지 않는 문장으로 취급한다는 이야기다.

네이버 영화 말뭉치의 각 표현별 등장 횟수

 

 [내 마음 속에 영원히 기억될 최고의] 라는 표현 다음에 [명작이다]라는 단어가 나타날 확률은 조건부 확률(conditional probability)의 정의를 활용해 최대 우도 추정법(Maximum Likelihood Estimation)으로 유도하면 다음 수식과 같다. Freq란 해당 문자열 시퀀스가 말뭉치에서 나타난 빈도를 가리킨다. 하지만 수식의 우변의 분자가 0이어서 전체 값이 0이 된다. 

'내 마음 속에 영원히 기억될 최고의' 다음에 '명작이다'가 나타날 확률

 

 n-gram 모델을 쓰면 이런 문제를 일부 해결할 수 있다. 직전 n - 1 개 단어의 등장 확률로 전체 단어 시퀀스 등장 확률을 근사(approximation)하는 것이다. 이는 한 상태의 확률은 그 직전 상태에만 의존한다는 마코프 가정(Markov assumption)에 기반한 것이다. [내 마음 속에 영원히 기억될 최고의] 다음에 [명작이다]가 나타날 확률을 바이그램 모델로 근사하면 다음 수식과 같다. [최고의 명작이다] 빈도를 [최고의] 빈도로 나눠준 값이다. 다시 말해 [명작이다] 직전의 1개 단어만 보고 전체 단어 시퀀스 등장 확률을 근사한 것이다. 

바이그램 근사 예시 (1)

 

 그렇다면 바이그램 모델에서 [내 마음 속에 영원히 기억될 최고의 명작이다]라는 단어 시퀀스가 나타날 확률은 얼마나 될까? 이는 다음 수식과 같다. 일단 [내]가 단독으로 등장할 확률을 계산한다. 이후 [내] 다음에 [마음]이 나타날 확률을 곱한다. 여기에 [마음] 다음에 [속에]가 등장할 확률을 곱한다. (1. [내]가 나타난 경우를 고려한다. 2. [내] 다음에 [마음]이 나타났고, 3. [마음] 다음에 [속에]가 등장한 사건이 동시에 일어날 확률을 구하려는 것이므로 이들 확률 간 곱셈이 된다). 이렇게 단어를 슬라이딩해가면서 끝까지 계산한 결과가 다음 수식이 된다. |V|는 어휘 집합에 속한 단어 수를 가리킨다. 

 

바이그램 근사 예시 (2)

 

 n-gram 모델은 바이그램 모델의 확장판으로 직전 1개 단어만 참고하는 바이그램 모델과 달리 전체 단어 시퀀스 등장 확률 계산 시 직전 n - 1 개 단어의 히스토리를 본다. 

 

 하지만 문제는 여전히 남아 있다. 데이터에 한 번도 등장하지 않는 n-gram이 존재할 때 예측 단계에서 문제가 발생할 수 있다. ‘또바기'‘언제나 한결같이 꼭 그렇게'라는 뜻을 가진 한국어 부사다. 학습 데이터에 [아이는] 다음에 [또바기]라는 단어가 한 번도 등장하지 않았다면 이 언어 모델은 예측 단계에서 [그 아이는 또바기 인사를 잘한다]는 자연스러운 한국어 문장이 등장할 확률을 0으로 부여하게 된다. 

 

 이를 위해 백오프(back-off), 스무딩(smoothing) 등의 방식이 제안됐다. 백오프란 n-gram 등장 빈도를 n보다 작은 범위의 단어 시퀀스 빈도로 근사하는 방식이다. n을 크게 하면 할수록 등장하지 않는 케이스가 많아질 가능성이 높기 때문이다. 예컨대 7-gram 모델을 적용하면 네이버 영화 리뷰 말뭉치에서 [내 마음 속에 영원히 기억될 최고의 명작이다]의 등장 빈도는 0이 된다. 

 

 이를 백오프 방식(N을 4로 줄임)으로 7-gram 빈도를 근사하면 다음 수식과 같다. 수식에서 a, b는 실제 빈도와의 차이를 보정해주는 파라미터다. 물론 빈도가 1 이상인 7-gram에 대해서는 백오프하지 않고 해당 빈도를 그대로 n-gram 모델 학습에 사용한다. 

 

 스무딩은 등장 빈도 표에 모두 k만큼을 더하는 기법이다. 이렇게 되면 [내 마음 속의 영원히 기억될 최고의 명작이다]의 빈도는 k(=0 + k)가 된다. 이 때문에 Add-k 스무딩이라고 부르기도 한다. 만약 k1로 설정한다면 이를 특별히 라플라스 스무딩(laplace smoothing)이라고 한다. 스무딩을 시행하면 높은 빈도를 가진 문자열 등장 확률을 일부 깎고 학습 데이터에 전혀 등장하지 않는 케이스들에게는 작으나마 일부 확률을 부여하게 된다.

 

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

 위에서 설명한 통계 기반 언어 모델은 단어들의 빈도를 세어서 학습한다. 그런데 이를 뉴럴 네트워크로 학습할 수도 있다. 뉴럴 네트워크는 입력과 출력 사이의 관계를 유연하게 포착해낼 수 있고, 그 자체로 확률 모델로 기능할 수 있기 때문이다. 그림 콘셉트는 다음 그림과 같다.

뉴럴 네트워크 기반 언어 모델을 활용한 임베딩

 

 뉴럴 네트워크 기반 언어 모델은 그림처럼 주어진 단어 시퀀스를 가지고 다음 단어를 맞추는 과정에서 학습된다. 학습이 완료되면 이들 모델의 중간 혹은 말단 계산 결과물을 단어나 문장의 임베딩을 활용한다. ELMo, GPT 등 모델이 여기에 해당한다.

 

 마스크 언어 모델(masked language model)은 언어 모델 기반 기법과 큰 틀에서 유사하지만 디테일에서 차이를 보이는 기법이다. 다음 그림처럼 문장 중간에 마스크를 씌워 놓고, 해당 마스크 위치에 어떤 단어가 올지 예측하는 과정에서 학습한다.

 

마스크 언어 모델 기반 임베딩 기법

 언어 모델 기반 기법은 단어를 순차적으로 입력받아 다음 단어를 맞춰야 하기 때문에 태생적으로 일방향(uni-directional)이다. 하지만 마스크 언어 모델 기반 기법은 문장 전체를 다 보고 중간에 있는 단어를 예측하기 때문에 양방향(bi-directional) 학습이 가능하다. 이 덕분에 마스크 언어 모델 기반의 방법들은 기존 언어 모델 기법들 대비 임베딩 품질이 좋다. BERT가 이 부류에 속한다.

 

점별 상호 정보량

 점별 상호 정보량(PMI, Pointwise Mutual Information)은 두 확률변수(random variable) 사이의 상관성을 계량화하는 단위다. 두 확률변수가 완전히 독립인 경우 그 값이 0이 된다. 독립이라고 함은 단어 A가 나타나는 것이 단어 B의 등장할 확률에 전혀 영향을 주지 않고, 단어 B 등장이 단어 A에 영향을 주지 않는 경우를 가리킨다. 반대로 단어 A가 등장할 때 단어 B와 자주 같이 나타난다면 PMI 값은 커진다. 요컨대 PMI는 두 단어의 등장이 독립일 때 대비해 얼마나 자주 같이 등장하는지를 수치화한 것이다. 수식은 다음과 같다. 

 

점별 상호 정보량(PMI)

 

 PMI는 분포 가정에 따른 단어 가중치 할당 기법이다. 두 단어가 얼마나 자주 같이 등장하는지에 관한 정보를 수치화한 것이기 때문이다. 이렇게 구축한 PMI 행렬의 행 벡터 자체를 해당 단어의 임베딩으로 사용할 수도 있다. 

 

Word2Vec

 분포 가정의 대표적인 모델은 2013년 구글 연구 팀이 발표한 Word2Vec이라는 임베딩 기법이다. CBOW 모델은 문맥 단어들을 가지고 타깃 단어 하나를 맞추는 과정에서 학습된다. Skip-gram 모델은 타깃 단어를 가지고 문맥 단어가 무엇일지 예측하는 과정에서 학습된다. 둘 모두 특정 타깃 단어 주변의 문맥, 즉 분포 정보를 임베딩에 함축한다. 실제 Word2Vec 기법은 PMI 행렬과 깊은 연관이 있다는 논문이 발표되기도 했다.

 

 

 

Reference

 
한국어 임베딩
저자 : 이기창
감수 : NAVER Chatbot Model
출판 : 에이콘출판사
발매 : 2019.09.26

 

반응형

댓글