새소식

딥러닝/자연어 처리

[Language Model] Neural Network Language Model

  • -

n-gram 모델의 경우 단어를 discrete symbol로 보기 때문에 '애완동물' 이라는 단어 시퀀스는 학습 코퍼스에 존재하지만 '반려동물'이라는 단어 시퀀스는 학습 코퍼스에 존재하지 않는다면 '애완동물'과 '반려동물'의 단어의 유사도를 알 수 없기 때문에  P(보호 단체 | 반려 동물)0으로 연산할 것이다. (Unseen sequence에 대한 대처가 미흡)

따라서 Markov Assumption이나 Smoothing 같은 기법들을 도입하여 문제점을 완화하였으나 문제점을 근본적으로 해결하지는 못하였다.

 

Neural Network Language Model

단어의 유사성을 학습할 수 있다면  unseen sequence에 대해 대처를 할 수 있을 것이다.

단어 벡터 간 유사도를 구하는 벡터를 얻어내는 Word embedding을 통해 word를 continuous로 다룸으로서 이러한 문제점을 해결하고자 하였다.

 

https://wikidocs.net/45609

 

NNLM(feed-forward Nerual Network Language Model)은 word embedding 을 처음으로 사용한 모델이다.

위 그림에서처럼 input layer, projection layer, hidden layer, output layer로 구성되어 있다.

  • 예문 : "what will the fat cat sit on"
  • window size = 4인 모델이라고 가정 (특정 단어를 예측하기 위해 참고할 단어의 수)
    입력(what, will, the, fat, cat) -> 언어모델 -> 출력(sit)

1. input layer의 input으로 one-hot encoding된 단어를 넣는다.

2. one hot vector와 Projection layer의 가중치가 곱해지는 연산이 이루어진다.
     Projection layer의 가중치의 `one hot vector의 1값의 idx에 해당되는` row가 결과가 된다.

https://wikidocs.net/45609

3. projection layer의 output을 hidden layer에 입력하고 activation function을 거친다.

https://wikidocs.net/45609

4. hidden layer에서 w,b와의 행렬곱을 하고 activation function까지 통과하여 얻은 y_hat값을 output layer에서 실제 y값과 cross entropy로 비교하여 loss를 계산하고 back-propagtion을 진행한다.

 

NNLM의 한계점

임베딩 벡터를 통해 단어를 표현하기 때문에 단어의 유사도를 계산하여 희소 문제를 해결하였다.

그러나 n-gram과 마찬가지로 다음 단어를 예측하기 위해 모든 이전 단어를 참고하는 것이 아니라 중심단어 이전의 정해진 n개의 window size만큼의 단어만 참고한다.

이를 해결하기 위해 나온 언어 모델이 RNN이다.

728x90
Contents