컴퓨터공학/Machine Learning

Language Model (언어 모델) 요약, N-gram, RNN 개념 소개

jimmy_AI 2021. 11. 15. 15:42
반응형

시작하기전에 이 포스팅은 cs224n lecture 6의 내용을 바탕으로 작성되었음을 알린다.

 

Language Model (언어 모델) 이란?

카카오톡 메시지, DM, 문자메시지 등을 보내다보면 문장 자동 완성 기능을 본 적이 있을 것이다.

 

Language Model 이란 어렵게 생각할 필요 없이 현재까지의 텍스트를 바탕으로 다음 단어를 예측 하는 모델을 일컫는다고 생각하면 된다.

 

예를 들어,

 

내가 좋아하는 음식은 --- 이다.

 

같은 문장이 있다 할 때, ---에 치킨, 피자, 초밥, 삼겹살 같은 단어는 들어가기 적절하지만,

---에 컴퓨터, 지갑, 휴대폰, 책상 등의 단어는 들어가기 매우 어색할 것이다.

 

즉, 앞에 '내가 좋아하는 음식은' 이라는 맥락 뒤에 나올 단어들의 확률 값은 다를 것이고, 단어 확률 분포를 예측하여 자연스러운 문장을 생성해내려는 시도라고 생각하면 된다.

 

Language Model 접근법 1 : N-gram

언어 모델의 첫 번째 접근법으로 N-gram 방법이 제안되었다. 이는 통계 기반 기법으로, 앞의 N 단어를 한 덩어리로 생각하면서 다음 N+1 번째 단어의 확률 분포를 맞추려는 방식이다.

 

즉, 앞의 N 단어가 순서대로 \( x_1, x_2, ... , x_n\) 일 때, \( x_{n+1}\)번째 단어의 등장 확률을 다음과 같이 생각하는 것이다.

$$ P(x_{n+1} | x_1, ... , x_n) = \frac{P(x_1, ... , x_n, x_{n+1}) }{P(x_1, ... , x_n) }$$ 

$$ \approx \frac{count(x_1, ... , x_n, x_{n+1}) }{count(x_1, ... , x_n) }$$

 

코퍼스 내의 N 단어 뭉치의 등장 횟수를 카운팅 하는 원리인데, 예를 들어 '내가 좋아하는 음식은' 이라는 3-gram 단어 뭉치 뒤에 등장할 단어의 확률 분포를 코퍼스 내에서 '내가 좋아하는 음식은' 등장 횟수와 '내가 좋아하는 음식은 치킨' 이라는 4-gram 뭉치가 등장한 횟수를 비교하여 구하는 것이다.

 

그러나 N-gram 방식의 Language Model은 다음과 같은 문제점이 있다.

1. sparse 문제 ('내가 좋아하는 음식은' 이라는 뭉치가 코퍼스 내에 없다면?)

2. 모든 N-gram 코퍼스를 메모리에 저장하는 문제 (10만 단어가 5-gram만 되도 10만^5제곱이면 엄청나게 큰 수다.)

 

물론, 위의 문제점을 해결하려는 N-gram 보완 방법이 제시된 시도가 있었지만, 완전한 해결책을 가져다주지는 못했다.따라서 이를 RNN으로 극복하려는 시도가 도입되었다.

 

Language Model 접근법 2 : RNN

RNN은 자연어처리 태스크 전반에서 활용되는 뉴럴 네트워크 모델로, 자기 자신의 네트워크가 반복되면서 단어의 순서에 의한 정보를 학습할 수 있는 모델이다. 여기서는 자세한 모델 구조 설명은 생략하겠다.

 

RNN 구조로 Language Model을 구축해보려는 시도가 있었고, 실제로 N-gram 기법보다 더 좋은 성능을 기록하였다.(perplex 등 성능 지표 측정에서 우수한 성능을 보임)

 

word2vec 등 단어 임베딩 벡터를 순서대로 input으로 넣어 다음 단어의 확률 분포를 지속하여 예측하는 식의 모델로 Language Model을 구성하려는 시도이고, 단어 임베딩 정보로 처음 등장한 단어 순서에도 어느 정도 다음 단어를 예측할 수 있어 sparse 문제를 해결하였고, N-gram 코퍼스를 메모리에 저장할 필요가 없어져 이 문제도 해결했다!

 

그러나, RNN을 이용한 Language Model에서도 다음과 같은 문제점이 남아있었다.

1. backpropagation을 1단어씩 내려와야 해서 학습 속도가 매우 느린 문제

2. 아주 예전에 등장했던 단어에 대한 기억 소실 문제

 

Loss 함수는 true next word와의 cross-entropy를 주로 사용하고, RNN의 문제점을 해결하려는 몇가지 시도도 있어서 점점 개선되고 있는 언어 모델 접근 방식이기는 하다.

 

Language Model 응용

언어 모델은 실제로 다양한 NLP 태스크에서 응용될 수 있었다.

1. 문장, 문서 생성(다음 단어를 예측 확률 분포에서 샘플링하는 식으로)

2. POS tagging(단어 대신 품사를 맞추는 식으로)

3. 감성 분석(마지막 output을 가지고 긍정 / 부정 등 판단)

4. speech recognition(어떤 단어를 말하려 했는지에 대한 참고로 사용 가능)

등등 더 많은 NLP 태스크에서 응용될 수 있다.

 

실제로, 각 작가의 작품으로부터 따로 학습된 Language Model들은 단어의 확률 분포가 다르게 학습되기에 새로운 작품을 보았을 때, 어떤 작가의 작품인지 어느 정도 잘 맞출 수 있었다고 한다.

 

이상으로 Language Model의 간략한 개념을 살펴보고, N-gram, RNN을 이용한 접근법, 그리고 응용 사례까지 다루어 보았다. NLP의 근간이 되는 접근법인 만큼 잘 숙지하면 꼭 큰 도움이 될 것이라고 믿는다.