본문 바로가기

AI/NLP Paper

[NLP] (NNLM)A Nueral Probabilistic Language Model 리뷰

Abstract

통계학적 언어 모델을 만들게 된 목적은 언어에서 word sequences의 결합 확률 함수를 학습하기 위해서입니다. 하지만 이는 Curse Of Dimensionality(차원의 저주)라는 본질적인 문제가 있습니다.

 

이에 논문에서는 단어의 분산 표현을 학습함으로써 문제를 해결하고자 합니다.

 

Introduction

언어 모델이나 다른 학습이 어려운 근본적인 문제는 차원의 저주 때문입니다. 특히 많은 discrete random variables사이의 분산을 합친 모델을 만들려고 할 때 문제가 발생합니다.

 

예를 들어, 우리가 10개의 연속적인 단어의 분산을 합친 모델을 단어장 크기가 100,000인 $V$를 이용해서 만들려고 한다고 가정하겠습니다. 이러한 경우 free parameters는 $100,000^{10} -1 = 10^{50} -1$개가 생겨나게 됩니다.

 

통계학적 언어 모델은 아래의 조건부 확률로 표현될 수 있습니다.

$w_t$ 는 t번 째 단어, sub_sequence는 $w_{i}^j = (w_i, w_{i+1}, \cdots , w_j)$입니다.

$$\hat{P}(w_{1}^T) = \prod_{t=1}^T \hat{P}(w_t | w_{1}^{t-1})$$ 

이러한 통계기반의 언어 모델은 이미 자연어를 포함하는 많은 기술들에 적용되었고, 효과적이라 알려져 있습니다.

 

통계기반의 모델을 만들 때, 단어 순서에 대한 이점을 가져올 수 있다면 모델 생성 문제의 어려움을 상당히 감소시킬 수 있습니다. 그리고 word sequence에서 시간적으로 가까이 있는 단어가 통계적으로 더 의존적이라는 사실이 있습니다. 이는 다음에 나오는 단어는 바로 전의 단어에 영향을 크게 받는다는 말입니다.

 

따라서 n-gram모델은 많은 수의 컨텍스트, 즉 마지막 n-1개의 단어의 조합 각각에 대해 다음에 나올 단어에 대한 조건부 확률 표를 구성합니다.

$$\hat{P}(w_t | w_1^{t-1}) \approx \hat{P}(w_t | w_{t-n+1}^{t-1})$$

 

이 방법으로 단어들을 성공적으로 조합하기 위해서는 훈련 corpus에 등장했거나, 충분히 자주 등장한 단어를 이용해야 합니다. 그렇다면 훈련 시에 한 번도 보지 못했던 새로운 n개의 단어 조합이 나타난다면 어떻게 될까요?

 

우리는 이러한 경우에 등장 확률을 0으로 계산하는 것을 원치 않습니다. 새로운 단어의 조합은 언제든 발생할 수 있고, 문맥이 커질수록 더 자주 발생하기 때문입니다. 

 

이 문제에 대한 간단한 방법으로는 back-off trigram model로 만들어진 더 작은 context size를 이용해 예측된 확률이나 smoothed trigram model을 이용해 예측된 확률을 이용하는 방법이 있습니다.

 

하지만 이 방법에는 적어도 2개의 개선되어야 하는 부분이 있습니다.

  1. 한 개나 두 개 단어 이상의 문맥은 고려를 하지 않는다.
  2. 단어 사이의 유사도를 구하지 않는다.

예를 들어 "The cat is walking in the bedroom"이라는 문장을 훈련 corpus에서 봤다고 가정하겠습니다. 

그러면 나중에 "A dog was running in a room"이라는 문장의 일반화에 이 전에 본 문장이 도움이 될 것입니다. 'dog'와 'cat'이 의미적, 문법적으로 유사하기 때문입니다.

 

이를 다루기 위한 방법은 이후에 더 자세히 나옵니다.

Fighting the Curse of Dimensionality with Distributed Representations

논문에서 제시하는 방법은 아래와 같이 간단하게 요약할 수 있습니다.

  1. 단어장에 있는 각 단어를 연관된 word feature vector로 만들어 분산 표현
  2. word sequence의 결합 확률 함수를 feature vector의 관점에서 표현
  3. word feature vector와 확률 함수의 파라미터를 동시에 학습

feature vector란 단어를 바라보는 또 다른 관점입니다. 단어가 벡터 공간의 한 점과 연관이 있다고 보는 것입니다.

이 쯤에서 "분산 표현"에 대해서 다시 생각해보겠습니다.

처음에 분산 표현....이 도대체 뭔소린가 싶었는데 여기서 단어를 벡터 공간의 한 점으로 고려하자! 라는 말이 있습니다.

이는 단어가 벡터 공간에서 단어의 특징을 나타내는 어떠한 실수 값으로 표현 된다는 의미입니다.

예를 들면 "고양이" = (0.1, 0.3, 1.0) 뭐 이런식으로 말이죠

벡터의 값을 정하는 방법은 뒤에 나오겠지만 모델이 학습하면서 결정하게 됩니다.

그렇게 정해진 단어의 특징을 나타내는 실수 벡터들이 벡터 공간에 위치하게 되고,

이처럼 "단어를 실수벡터의 벡터 공간에서의 분포로 나타낸다!" 라는 게 "분산 표현"의 의미 같습니다.

정확하지 않을 순 있지만....저는 이렇게 이해했습니다..ㅎㅎ

여기서 feature의 크기, 그러니까 벡터의 차원은 단어장의 크기에 비해 아주 작은 값입니다.

 

결합 확률은 이 전 단어에 대한 현재 단어의 조건부 확률의 곱으로 나타나고, 결합 확률 함수는 훈련 데이터의 log-likelihood를 최대화하기 위해 파라미터를 반복적으로 업데이트하게 됩니다.

 

이처럼 단어를 벡터를 이용해 표현하면 위에서 본 예문과 비슷한 문장을 아래와 같이 구할 수 있습니다.

예문 The cat is walking in the bedroom A dog was running in a room
비슷한 문장 The cat is running in a room A dog is walking in a bedroom
A cat was running in the bedroom The dog was walking in the room
The cat is walking in a room A dog is running in a room

이게 가능한 이유는 유사한 단어는 유사한 feature vector를 가진다고 예상할 수 있기 때문입니다.

 

Relation to Previous Work

고차원 이산 분포 모델에 신경망을 적용하면 각각 다른 성질을 가지는 random variables의 집합인 $Z_1, \cdots , Z_n$의 결합 확률을 배우는 데에 유용하다는 아이디어는 이미 있습니다. 해당 모델에서의 결합 확률은 조건부 확률의 곱으로 아래와 같이 분해됩니다.

$$\hat{P}(Z_1 = z_1, \cdots , Z_n = z_n) = \prod_i \hat{P}(Z_i = z_i | g_i(Z_{i-1} = z_{i-1}, \cdots , Z_1 = z_1))$$

 

이처럼 언어 모델을 만들기 위해 신경망을 사용하는 것은 새로운 게 아닙니다. 

 

하지만 이 논문에서는 기존의 아이디어를 large scale로 확장하고, 문장에서 단어의 역할을 학습하기보단 word sequences 분포의 통계적 모델을 학습하는데 중점을 뒀습니다.

 

또한, 단어 사이의 유사성을 구하는 아이디어도 새로운 것이 아닙니다.

 

하지만 이 전의 모델들에서처럼 단어의 유사성을 이산 랜덤 또는 결정론적 변수로 characterizing 하는 게 아니라 연속적인 실수 벡터(학습된 분산 특징 벡터)를 이용해 두 단어 사이의 유사성을 표시합니다.

 

 

A Nueral Model

신경망 모델에서 training set은 $w_1, \cdots, w_T ( w_t \in V)$들의 sequence입니다. 

 

목표는 좋은 모델 $f(w_t, \cdots, w_{t-n+1}) = \hat{P}(w_t | w_1^{t-1})$를 학습하는 것입니다. 

여기에는 어떠한 $w_1^{t-1}$에 대해서 $\sum_{i=1}^{|V|}f(i, w_{t-1}, \cdots, w_{t-n+1}) = 1, f>0$을 만족해야 한다는 조건이 있습니다.

 

위 함수 $f$를 다음과 같이 두 부분으로 decompose 해줍니다.

 

  1. $i$ (in $V$) 를 C를 이용해 실수 벡터 $C(i)$로 매핑해줍니다. 이 과정이 단어장의 각 단어를 연관된 distributed feature vector로 표현하는 것입니다. 이때, $C$는 $|V| \times m$ 모양의 free parameter matrix로 표현됩니다.

    이때 $C$의 파라미터는 단순히 단어들의 feature vector입니다. 

    단어장에 있는 각 단어를 $m$차원의 벡터로 나타낸 행렬이고, $i$번 째 행은 단어 $i$의 feature vector $C(i)$입니다.

    다시 말해 $C$는 룩업 테이블(look-up table)이라고 볼 수 있습니다.

  2. 다음으로 $C(w_{t-n+1}), \cdots, C(w_{t-1})$ 를 g를 이용하여 확률로 매핑해줍니다.

    $$f(i, w_{t-1}, \cdots, w_{t-n+1}) = g(i, C(w_{t-1}), \cdots, C(w_{t-n+1}))$$
    $g$는 $\theta (C, w)$를 파라미터로 가지는 feed-forward 신경망을 사용하며, 이때 입력값을 확률 값으로 매핑하기 위해 $softmax$ 함수를 출력층에 사용하게 됩니다.

여기서 최적의 파라미터 $\theta$를 찾는 것은 훈련 corpus에서의 penalized log-likelihood를 최대화시키는 $\theta$를 찾는 것입니다.

$$L = \frac{1}{T} \sum_t logf(w_t, w_{t-1}, \cdots, w_{t-n+1} ; \theta) + R(\theta)$$

$R(\theta)$는 규제항(regularization term)이며, 이 논문에서는 weight decay penalty(L2 penalty)를 사용했습니다.

 

 

조금 더 자세하게 모델에 대해 살펴보겠습니다.

 

모델은 출력층에서 $softmax$함수를 이용하여 확률을 계산하게 됩니다.

$$\hat{P}(w_t | w_{t-1}, \cdots, w_{t-n+1}) = \frac{e^{y_{wt}}}{\sum_ie^{y_i}}$$

여기서 $y_i$는 unnormalized log-probabilities로 아래와 같이 계산됩니다.

$$y = b + Wx + Utanh(d+Hx)$$

  • $W$ = direct connection 여부에 관한 파라미터(direct connection 하지 않으면 0)
  • $b$ = output biases
  • $d$ = hidden layer biases
  • $U$ = hidden-to-output weights
  • $H$ = hidden layer weights
  • $x$ = $(C(w_{t-1}), C(w_{t-2}), \cdots, C(w_{t-n+1}))$

Optimization으로는 Stochastic gradient ascent를 사용합니다.

$$\theta \leftarrow \theta + \varepsilon\frac{\partial log \hat{P}(w_t | w_{t-1}, \cdots, w_{t-n+1})}{\partial \theta}$$

$\varepsilon$은 학습률입니다.

 

Experimental Results

실험에 사용된 데이터와 몇몇 조건은 아래와 같습니다.

  • Brown corpus : 800,000개 단어는 훈련, 200,000개 단어는 검증, 나머지는 테스트에 사용
                               초기 단어장에서 3회 이하로 등장하는 rare word는 하나의 symbol로 치환하여 16383개의 크기로 줄임
  • APNews : 1.4M 개 단어는 훈련, 검증과 테스트에 각각 1M 개의 단어 사용
                      빈도수 높은 단어(불용어 포함) 유지, 대문자 -> 소문자화, 숫자, rare word, 고유 명사는 각각 특수한 symbol로 치환
  • 초기 learning rate = 1e-3
  • $\varepsilon_t = \frac{\varepsilon_0}{1+rt}$ 조건에 따라 점진적으로 learning rate감소($t$ = 파라미터 업데이트 횟수, $r$ = 1e-8)
  • Brown corpus를 이용한 실험에는 Early stopping사용
  • weight decay penalty(L2 penalty) = 1e-4(Brown), 1e-5(APNew)

평가 지표로는 $perplexity$를 사용했습니다.

$$perplexity = \sqrt[N]{\frac{1}{\prod_{i=1}^N\hat{P}(w_t | w_1^{t-1})}}$$ 

$perplesity$는 $\frac{1}{\hat{P}(w_t | w_1^{t-1})}$의 기하 평균으로 의미의 모호성에 대한 점수입니다. 따라서 점수가 낮을수록 성능이 좋다는 의미입니다.

 

실험 결과 MLP(neural network)를 사용한 모델이 n-gram based의 다른 모델과 비교하였을 때, 가장 낮은 test perplexity를 보이며 보다 양질의 언어 모델을 학습하였음을 확인할 수 있습니다.

 

또한 MLP3 vs MLP1, MLP4 vs MLP2의 결과를 보면 hidden units가 유용한 것을 알 수 있습니다. 그리고 interpolated trigram과 mixing 했을 때 항상 $perplexity$감소에 도움을 주는 것을 알 수 있습니다.

 

direct connection이 유용한 지, 아닌지에 대해서는 확실히 답을 내릴 수 없었습니다.

 

하지만 direct connection을 추가한 이유는 적은 데이터셋에 대해서는 분명한 generalization 효과를 보였기 때문입니다.

 

또한 perplexity가 약간 증가하는 손해는 있었지만, direct connection은 수렴하기 위한 학습시간을 두배 정도 더 빠르게 해 줬습니다.

 

Conclusion

실험을 통해 논문에서 제안된 방법이 sota 방법에 비해 $perplexity$에서 10~20%의 성능 향상이 있었습니다.

 

이는 모델이 분산 표현을 학습하게 함으로써 차원의 저주 문제에 대항할 수 있음을 보여줍니다.

 

하지만 이 이후로도 아키텍처, 계산 효율, 사전 지식의 활용 등의 부분에 대해 모델 개선을 위한 과제가 훨씬 많을 것입니다.

 

논문에서 제시된 연구는 분산 표현을 기반으로 통계 언어 모델의 개선에 대한 문을 연다는 점에서 아주 중요한 연구입니다.

 

Summary

  1. 이 전의 언어 모델에서 겪는 차원의 저주 문제를 해결하기 위해 신경망을 이용해 단어의 분산 표현을 학습하게 하는 연구를 함

  2. 단어를 단어장의 크기에 비해 확연하게 작은 차원의 벡터로 표현함으로써 희소 문제 해결에 기여.

  3. 벡터 표현을 통해 단어 간 유사도를 구할 수 있게 함
  4. 하지만 여전히 문제는 남아있음.

역시 논문 읽기는 쉽지 않은 것이야....

읽는 것도 읽는 건데 정리하는 건 또 더 어려운 것이야...