NNLM(Neural Network Language Model)
N-gram 언어 모델의 한계
* n-gram 언어 모델은 corpus에 충분한 양의 문장이 존재해야 예측도가 높아진다. 단순히 corpus에 있는 유사 문장들의 출현 빈도를 통해 단어를 예측하기 때문이다. 이렇게 훈련에 충분한 양의 데이터가 선행되지 않으면 모델링이 정확하지 않게 되는 문제를 희소 문제(sparsity problem)라고 한다.
* 예를 들자면 4 gram 모델에서 boy is spreading 다음의 단어를 예측한다고 했을 때 label이 smile임에도 불구하고 corpus에 boy is spreading smile이라는 문장이 없으면 절대로 smile이란 단어를 예측할 수가 없다.
* 이렇게 학습한 문장만 예측할 수 있는 한계점은 단어간의 유사도를 학습함으로서 해결 가능하다. 단어간의 유사도에 대한 정보를 가지고 있는 모델은 다음 단어 예측 시 학습하지 않은 문장이라도 단어간의 유사도를 통해 어떤 단어가 다음으로 와야 하는지를 계산할 수 있다.
NNLM의 학습 과정
* 만약 'What will the fat cat sit on' 이라는 문장에서 What will the fat cat까지 주어지면 sit이라는 단어를 예측하는 방식으로 훈련된다고 가정해보자. NNLM은 앞에 있는 문장의 모든 단어들을 사용하지 않고 특정 개수의 단어까지만 사용하게 된다. 이를 window라고 한다.여기서는 What을 제외한 will부터의 단어를 예측에 사용한다고 가정해보자.
1) One-Hot encoding
* 먼저 단어를 벡터의 형태로 바꿔줘야 할 것이다. 이 때 우리는 one hot encoding을 사용할 수 있다.
* 예문의 단어들을 벡터로 변환하면 다음과 같이 표현할 수 있다.
what = [1, 0, 0, 0, 0, 0, 0]
will = [0, 1, 0, 0, 0, 0, 0]
the = [0, 0, 1, 0, 0, 0, 0]
fat = [0, 0, 0, 1, 0, 0, 0]
cat = [0, 0, 0, 0, 1, 0, 0]
sit = [0, 0, 0, 0, 0, 1, 0]
on = [0, 0, 0, 0, 0, 0, 1]
* 이렇게 encoding된 벡터들은 input layer에 입력된다.
2) Lookup table 작업
* encoding된 벡터들은 projection layer를 통해 embedding vector로 변환된다. 이 과정을 더 살펴보자.
* 먼저 각 vector들은 가중치행렬 W와 곱해지게 된다. 이 가중치 행렬의 크기는 입력되는 one-hot vector의 차원이 m, 추출할 embedding vector의 차원이 n일 때 m x n 크기가 된다.
* 우리가 사용중인 예문을 통해 보자면, one-hot vector가 7차원이고, embedding vector의 크기를 5차원으로 설정하면 가중치 행렬 W는 7x5가 될 것이다.
* 이 때 곱해지는 과정에서 one-hot vector의 원소는 1개를 제외하고 모두 0이기 때문에 결국 가중치 행렬 W의 i번째 index를 그대로 읽어오는 것(lookup)과 동일하게 계산된다. 이 때문에 projection layer의 가중치 행렬을 lookup table이라고 한다.
3) Concatenation(연결)
* lookup table을 통해 생성된 embedding vector들은 projection layer에서 연결된다. 단, vector들을 하나의 matrix처럼 연결하는 것은 아니고 단순히 벡터들을 이어붙여 더 높은 차원의 벡터를 생성하게 된다. 우리 예시에서 embedding vector는 5차원이고, 4개의 단어가 사용됐으므로 projection layer에서 concatenated 된 vector는 20차원이 될 것이다.
* projection layer는 activation function이 없이 단순히 concatenate만 해주는 linear layer라고 할 수 있다.
4) Hidden layer
* projection layer를 거친 vector는 hidden layer를 거치게 된다. hidden layer를 거치며 입력 벡터들과 동일한 차원의, 그러니까 우리 예시에서 7차원의 vector가 출력된다.
5) Output layer
* hidden layer를 거친 벡터가 output layer에서 softmax함수를 통해 0~1사이의 실수 값을 가지게 되고, 이를 우리는 확률값으로 간주해 어느 단어일 확률이 가장 높은지를 판단할 수 있게 된다. 또한 훈련 중이라면 이 결과값과 정답 label을 cross entropy loss function을 활용해 loss를 계산할 수도 있다.
NNLM의 이점과 한계
1) 이점
* NNLM 모델을 통해 sparsity probelm을 해결할 수 있었다. 훈련을 반복함에 따라 비슷한 목적으로 사용되는 단어들은 유사한 embedding vector를 갖게 되어서 corpus에 없는 문장이라도 embedding vector간의 유사도를 기준으로 다음 단어를 예측하는 것이 가능해졌다.
2) 한계점 - 고정된 길이의 입력
* 문장에서 이전에 사용된 모든 단어들을 예측에 활용하는 것이 아니라 n개의 window size만큼의 단어만 활용할 수 있다는 단점이 있다.
* 문장의 길이가 달라져 one-hot vector들의 차원 크기가 다른 데이터가 들어온다면 처리할 수가 없다.
* 이러한 한계점은 RNN을 활용한 RNNLM을 통해 해결할 수 있다. 다음 포스팅에서 해당 내용을 다루겠다.
'Deep Learning > 자연어처리' 카테고리의 다른 글
RNN을 이용한 텍스트 생성 (0) | 2021.12.17 |
---|---|
RNN 언어 모델(RNNLM) (0) | 2021.12.17 |
Keras를 통한 SimpleRNN, LSTM 출력값의 이해 (0) | 2021.12.16 |
LSTM, GRU (0) | 2021.12.16 |
RNN(Recurrent Neural Network) (0) | 2021.12.16 |