[CS224n] Lecture 6 - Language Models and Recurrent Neural Network

tobigsNLP·2020년 12월 31일
5

CS224n Review

목록 보기
6/16
post-thumbnail

작성자 : 투빅스 13기 김민정

Contents

  1. Language Modeling
  2. N-gram Language Model
  3. Neural Language Model
  4. RNN Language Model
  5. Perplexity

1. Language Modeling


많은 사람들이 자동완성 기능, 인터넷 검색 등의 Language Model을 일상생활에서 사용합니다.

자동완성, 인터넷 검색 기능처럼 현재까지 주어진 문장의 다음 단어를 예측하는 것은 Language Modeling이라고 하며, 이러한 일을 수행하는 모델을 Language Model이라고 합니다.

조금 더 formal하게 표현을 하자면, 특정 문장에 확률을 할당한다고 말할 수 있습니다. 문장의 이미 주어진 단어 x(1)부터 x(t)가 주어졌을 때, 다음에 올 단어 x(t+1)의 확률을 위와 같이 나타낼 수 있습니다.

확률을 차례로 곱해 나가면서, 좌변에 있는 특정 문장의 확률을 식의 우변과 같이 연속된 조건부확률로 풀어 쓴 이후에 확률을 계산할 수 있습니다.


2. N-gram Language Model


N-gram Language Model은 딥러닝을 도입하기 전에 주로 사용된 방법입니다. N-gram은 연속된 N개의 단어 덩어리를 의미합니다.

어떤 단어가 올 확률은 큰 corpus에서 counting을 통해 구할 수 있습니다. 다만 그 전에 '다음 단어는 오직 직전의 n-1개의 단어에만 영향을 받는다.'라는 가정을 합니다. 즉, n-2번째와 같은 그 이전의 단어는 다음에 오게 될 단어와 전혀 상관이 없다는 뜻입니다.

N-gram 문장이 나타날 확률과 (N-1)-gram이 나타날 확률을 이용하면, 현재 문장이 주어졌을 때 다음 단어가 올 확률을 계산할 수 있게 됩니다.

N-gram을 이용한 간단한 예시입니다.

1) Sparsity problems
N-gram은 N개의 이전 단어만 가지고 보기 때문에 문장의 문맥을 담기에는 한계가 있습니다. 그렇다고 N을 늘리기에는 문제가 있습니다.
첫 번째로, 특정 N-gram의 corpus 내 출현 빈도가 낮을 때 발생하는 Sparsity 문제입니다. corpus에 N-gram이 한번도 등장하지 않으면 확률에 0을 주기 때문에 예측해야 하는 단어까지 포함된 N-gram이 하나도 없어서 분자가 0이 될 수도 있고, 예측해야 하는 단어 이전의 (N-1)-gram이 하나도 없어서 분모가 0이 되는 경우가 생길 수도 있습니다.
이에 대한 해결책으로 최소한의 확률을 부여해 0이 되는 것을 막는 스무딩과 N-gram 대신 (N-1)-gram으로 줄이는 backoff가 있습니다.

2) Storage problems
두 번째로, Storage 문제입니다. N-gram의 count 정보를 저장하기 위해 model의 크기가 지나치게 커지는 문제가 발생하게 됩니다.

3) Incoherence problems
세 번째로, Incoherence 문제입니다. N-gram model이 문맥을 충분히 반영하지 못하는 문제입니다. 앞서 언급한 '다음 단어는 오직 직전의 n-1개의 단어에만 영향을 받는다.'라는 가정 때문에 이전 문맥을 충분히 반영하지 못하기 때문에 중요한 정보를 놓칠 수 있습니다. N의 크기를 늘리면 이러한 문제를 어느정도 해결할 수 있겠지만 동시에 Sparsity 문제가 심해지게 됩니다.


3. Neural Language Model


N-gram mpdel의 고질적인 문제를 해결하기 위해 도입한 것이 Neural Network입니다. Lecture3의 NER에 적용했던 window-based Neueal Network는 center의 앞뒤로 window를 정했다면, 여기서는 N-gram처럼 예측할 단어 이전에 window를 고정한다고 생각하면 됩니다.

다음 단어를 예측하기 위해 특정 개수의 단어를 입력으로 받습니다. 여기서는 the/students/opened/their 이렇게 4개의 단어를 입력 받았고, 적절히 embedding해준 후에 Neural Network를 통해 다음 단어의 확률을 찾아냅니다. 이와 같이 특정 개수의 단어를 Neural Network의 input으로 입력 받는 model을 Fixed-window Neural Language Model이라고 합니다.

N-gram Language Model과 비교하여 Neural Language Model의 장단점을 살펴보겠습니다.

  • 장점
  1. Softmax 덕분에 Sparsity 문제를 해소할 수 있음
  2. Counting 값을 저장할 필요가 없음
  • 단점
  1. N-gram과 같이 문맥을 반영하지 못함 (window size가 작기 때문)
  2. 단어의 위치에 따라 곱해지는 가중치가 다르기 때문에 Neural Model이 비슷한 내용을 여러 번 학습하는 비효율성을 가짐

4. RNN Language Model

RNN의 핵심 아이디어는 각 input마다 다른 가중치를 부여한 Neural Language Model과 다르게, 동일한 가중치를 반복적으로 사용한다는 것입니다.

그리고 RNN의 이름에서도 알 수 있듯이, 순차적인(Recurrent) 정보를 처리하는 것이 기본적인 아이디어입니다.
기존의 신경망 구조에서는 모든 입력이 각각 독립적이라고 가정했는데, 많은 경우에 이런 방법은 옳지 않을 수 있습니다. 한 예로, 문장에서 다음에 나올 단어를 추측하고 싶다면 이전에 나온 단어들의 연속성을 아는 것 자체가 큰 도움이 될 수도 있습니다.
RNN이 recurrent하다고 불리는 이유는 동일한 태스크를 한 시퀀스의 모든 요소마다 적용하고, 출력 결과는 이전의 계산 결과에 영향을 받기 때문입니다.

RNN의 구조를 간단하게 살펴보겠습니다. 입력 값은 단어들의 시퀀스이고, output은 추측된 단어들의 시퀀스입니다. 매 시퀀스마다 같은 가중치를 적용하는 왼쪽의 RNN의 recurrent한 구조를 오른쪽과 같이 표현할 수 있습니다. 그리고 네트워크를 학습할 때에는 시간 스텝 에서의 출력 값이 실제로 다음 입력 단어가 되도록 Ot = X(t+1) 과 같이 설정해줍니다.

RNN의 장단점을 살펴보겠습니다.

  • 장점
  1. 이론 상으로는 Input length에 상관없이 다음 단어를 예측할 수 있음
  2. 먼 곳에 위치한 단어도 고려할 수 있어 context를 반영할 수 있음
  3. input이 길어져도 model size가 증가하지 않음
  • 단점
  1. 다음 단계로 진행하기 위해서는 이전 단계의 계산이 완료되어야 하므로 계산이 병렬적으로 진행되지 않아 느림
  2. 이론적으로는 먼 곳의 단어를 반영할 수 있지만 실제로는 vanishing gradient problem등의 문제가 있어 context가 반영되지 않는 경우도 있음


RNN의 학습은 어떻게 진행되는지 살펴보겠습니다.
1) 각 단어를 RNN model에 input으로 주고, 모든 단계에서 예상되는 다음 단어를 계산합니다.
2) 모든 단계에서 예상되는 다음 단어와 실제 다음 단어의 차이의 cross-entropy를 통해 loss를 구합니다.
3) 모든 단계에서의 loss의 평균을 통해 전체 loss를 구합니다.

다만 실제 RNN-model을 학습할 때 이와 같이 학습하면 지나치게 많은 계산이 필요하기 때문에 실제로는 단어 단위가 아니라 문장 혹은 문서 단위로 입력을 주기도 합니다. SGD를 통해 optimize하는 것도 좋은 방법이라고 합니다.

RNN을 학습하는 것은 기존의 신경망 모델을 학습하는 것과 매우 유사합니다. 그러나 네트워크의 각 시간 스텝마다 파라미터들이 공유되기 때문에 기존의 backpropagation을 그대로 사용하지는 못하고, Backpropagation Through Time (BPTT) 이라는 약간 변형된 알고리즘을 사용합니다. 각 출력 부분에서의 gradient가 현재 시간 스텝에만 의존하지 않고 이전 시간 스텝들에도 의존하기 때문입니다.


5. Perplexity


Perplexity는 Language Model의 성능을 측정하는 척도입니다. Language model을 통해 예측한 corpus의 inverse를 corpus 길이로 normalize해준 값입니다. cross-entropy에다가 로그 씌우고 exponential을 씌어서 구할 수 있으며, perplexity가 낮을 수록 좋은 Language Model이라고 할 수 있습니다.


참고자료

profile
2020 투빅스 텍스트 세미나

0개의 댓글