✍️ STUDY/NLP

[cs224n] Lecture 5 - Language Models and Recurrent Neural Networks

Ju_pyter 2023. 11. 20. 12:19

Language Modeling

   

조건부확률로 표현

 

 

- Language Model은 텍스트에 확률을 할당하는 시스템으로 생각할 수 있다. (문장의 단어 x(1), x(2) , ... x(t) 가 주어졌을 때 다음에 올 단어 x(t+1) 의 확률)

- 예를 들어 텍스트의 일부 를 가지고 있을 때, Language Model에 따라 이 텍스트가 발생할 확률(자연스러운 문장일 확률)은 다음과 같다. 

단어 sequence > 연속적으로 발생하는 사건에 대한 확률 > 확률 곱


⇒ 단어의 시퀀스(문장)에 대해서 얼마나 자연스러운 문장인지를 확률을 이용해 예측한다.

 

활용 

  • 문장의 확률 또는 단어의 등장 확률을 예측
  • 기계번역, 음성인식, 자동완성(ex. 구글 검색) 

You use Language Models every day!!

 

n-gram Language Models

- Deep Learning 이전에 Language Model에 주로 사용된 모델

- 예측에 사용할 앞 단어들의 개수 (window) 를 정하여 모델링하는 방법 (이전에 등장한 n-1 개의 단어들을 이용해 다음 단어를 예측한다) 

- N-gram: n개의 연속된 단어 덩어리

 

"the students opened their _"
  • unigrams: "the", "students", "opened", "their"
  • bigrams: “the students”, “students opened”, “opened their”
  • trigrams: “the students opened”, “students opened their”
  • 4-grams: “the students opened their”

 

Idea: 서로 다른 N-grams의 빈도에 대한 통계를 수집하고 이를 다음에 올 단어를 예측하는 데 사용한다.

simplifying assumption: 단어 은 앞의 개의 단어에만 영향을 받는다.

 

 

  • Question: n-gram과 (n-1)-gram의 확률을 어떻게 얻을 수 있을까?
  • Answer: 큰 텍스트 뭉치(corpus)에서 그들의 빈도를 counting하여 구한다.

    전체 단어 확률> N-gram 확률로 근사>Count 방법으로 확률을 계산하여 근사


Example

4-gram model

4-gram model을 사용하므로 'students' 이전 단어들을 고려하지 않는다.

 

'students opened their' 다음에 단어 w가 나올 확률: 4-gram을 3-gram으로 나눈 값

 

For example, suppose that in the corpus:

  • "students opened their" : 1,000번 발생
  • "students opened their books" : 400번 발생
    ⇒ 
  • "students opened their exams" : 100번 발생
    ⇒ 

 

N-gram Language Model의 문제점

1. Sparsity Problems

: n이 커질수록 문제가 심각해진다. ▷ 일반적으로 n < 5로 설정

  • Sparsity Problem 1
    • Problem: "students opened their "가 훈련 코퍼스에 존재하지 않으면, 의 확률은 0이 된다. ⇒ 위 조건부 확률의 분자가 0
    • (Partial) Solution: smoothing 모든 의 count에 대해 작은 값의 를 더해준다.
  • Sparsity Problem 2
    • Problem : "students opened their" 훈련 코퍼스에 존재하지 않으면, 의 확률은 계산할 수 없다. ⇒ 위 조건부 확률의 분모가 0
    • (Partial) Solution: backoff n-gram 대신 (n-1)-gram인 "opened their"의 값으로 대신한다.

2. Storage Problems

n 이 커지거나 corpus 가 증가하면 Corpus 내 모든 n-gram 에 대한 count 를 저장해줘야 하기 때문에 모델의 크기가 증가 (실행이 오래걸리는 단점)

 

Generating text with a n-gram Language Model

trigram Language Model

 

  • 인 2개의 단어 "today the"로 다음 단어를 예측한다.
  • 해당 단어들을 기반으로 확률 분포를 구하면, 가능성이 있는 단어들의 확률 분포를 얻을 수 있다.
  • 전체적인 의미에서 일관성 X .  '다음 단어는 오직 직전의 개의 단어에만 영향을 받는다'라는 가정 때문에 이전 문맥을 충분히 반영하지 X.
  • 의 크기를 늘리면 이러한 문제를 어느정도 해결할 수 있겠지만 동시에 Sparsity 문제가 심해지게 된다.

 

Neural Language Model

- 다음에 등장할 단어를 예측하는 언어모델이면서 동시에 단어의 'distributed representation' (단어 벡터 표현) 을 학습

-NNLM 도 N-gram 과 유사하게 정해진 n 개의 단어만을 참고해서 (윈도우 범위) 예측 수행

 

Recall the Language Modeling task:

  • Input: 단어들의 시퀀스 
  • Output: 다음에 올 단어의 확률 분포 

Window-based neural model

  • Lecture 3에서 NER에 적용했던 Window-based neural network는 Center를 기준으로 앞뒤의 window를 정했다면
  • Lecture 5에서는 예측할 단어의 이전에 window를 고정

A fixed-window neural Language Model


- window 사이즈 만큼의 단어를 one-hot vector 형태로 입력하여 임베딩

- 임베딩 벡터들을 concatenate하여 가중치 값과 연산한 후 hidden layer를 통과

- 최종적으로 softmax 함수를 통해 각 단어들의 확률 분포값을 얻을 수 있으며, 이를 통해 제일 가능서이 높은 다음 단어를 예측

특정 개수의 단어를 Neural Network의 input으로 받는 model을 Fixed-window Neural Language Model이라고 함.

 

n-gram LM에 대한 개선점

  • 단어의 embedding을 통한 sparsity problem 해결
  • 관측된 n-gram을 저장할 필요가 없음

남아 있는 문제점

  • 너무 작은 고정된 windowd의 크기 → n-gram 모델과 같이 문맥을 반영 X
  • Window를 크게 하면 도 커지게 됨 → window 크기의 한계
  • 와 에는 완전히 다른 가중치 가 곱해져 발생하게 되는 No symmetry. → 단어의 위치에 따라 곱해지는 가중치가 다르기 때문에 모델이 비슷한 내용을 여러 번 학습하는 비효율성을 가진다.

  어떤 길이의 input도 처리할 수 있는 neural architecture가 필요

 

RNN Language Model

Recurrent Neural Networks (RNN)

  • Core idea: 동일한 가중치 W를 반복적으로 적용한다.
  • 기존의 뉴럴 네트워크 알고리즘은 고정된 크기의 입력을 다루 데는 탁월하지만 ,가변적인 크기의 데이터를 모델링하기에는 적합하지 않다.
  • RNN(Recurrent Neural Network, 순환신경망)은 시퀀스 데이터를 모델링하기 위해 등장했으며, 기존의 뉴럴 네트워크와 다른 점은 '기억(hidden state)'을 갖고 있다는 점이다.
  • 기존의 신경망 구조에서는 모든 입력이 각각 독립적이라고 가정했는데, 많은 경우에 이러한 가정 옳지 않을 수 있다. 문장에서 다음에 나올 단어를 추측하고 싶다면 이전에 나온 단어들의 연속성을 아는 것 자체가 큰 도움이 될 수 있다. 
  • RNN이 recurrent하다고 불리는 이유는 동일한 태스크를 한 시퀀스의 모든 요소마다 적용하고, 출력 결과는 이전의 계산 결과에 영향을 받기 때문이다.

동일한 가중치 W 를 반복적으로 적용 단어간의 symmetric 하지 않았던 NNLM 의 단점을 보완 

#python code
hidden_state_t = 0 # 초기 은닉 상태를 0(벡터)로 초기화
for input_t in input_length: # 각 시점마다 입력을 받는다.
    output_t = tanh(input_t, hidden_state_t) # 각 시점에 대해서 입력과 은닉 상태를 가지고 연산
    hidden_state_t = output_t # 계산 결과는 현재 시점의 은닉 상태가 된다.

 

RNN Language Model

  • RNN 계층은 그 계층으로의 입력과 1개 전의 RNN 계층으로부터의 출력을 받는다. 그리고 이 두 정보를 바탕으로 현 시각의 출력을 계산한다.
  • 결과로 시각 의 출력 가 된다. 이 는 다음 계층을 향해 위쪽으로 출력되는 동시에, 다음 시각의 RNN 계층(자기 자신)을 향해 오른쪽으로도 출력된다.
  • 현재의 출력()은 한 시각 이전 출력()에 기초해 계산됨을 알 수 있다.

▷ 다른 관점으로 보면, RNN은 라는 '상태'를 가지고 있으며, 위 식의 형태로 갱신된다고 해석할 수 있다.

▷ 그래서 RNN 계층을 '상태를 가지는 계층' 혹은 '메모리(기억력)가 있는 계층'이라고 한다.

 

표기 :

  •  시간 스텝에서의 입력 벡터, one-hot vector 형태
  • : 입력 벡터 에 대한 word embedding
  •  시간 스텝에서 RNN의 기억을 담당하는 hidden state
  • RNN에는 가중치가 2개 존재.
    • : 입력 의 임베딩 를 출력 로 변환하기 위한 가중치
    • : RNN 출력을 다음 시각의 출력으로 변환하기 위한 가중치
    • 편향 

RNN 장점

  1. 입력(input)의 길이에 제한이 없다.
  2. (이론적으로) time step 에서 여러 이전 단계의 정보를 사용할 수 있다.
  3. 입력의 길이가 길어져도 모델의 크기가 증가하지 않는다.
  4. 매 time step 에 동일한 가중치를 적용하므로 symmetry하다.

RNN 단점

  1. Recurrent 계산이 느리다.
  2. 이론적으로는 먼 곳의 정보도 반영할 수 있지만, 실제로는 vanishing gradient problem 등의 문제 등으로 잘 반영되지 않은 경우도 있다.

 

Training a RNN Language Model

  1. 단어 들로 이루어진 시퀀스의 큰 corpus를 준비한다.
  2. 를 순서대로 RNN-LM에 입력하고, 매 step 에 대한 출력분포 를 계산한다.
    • 주어진 단어에서부터 시작하여 그 다음 모든 단어들에 대한 확률을 예측
  3. step 에 대한 손실함수 Cross-Entropy를 계산한다.
  4. 전체 training set에 대한 손실을 구하기 위해 평균값을 구한다.

 

 

* 다만 전체 corpus 에 대한 loss와 gradients를 계산하는 데는 많은 시간이 걸리기 때문에, 실제로는 문장이나 문서 단위로 입력을 주기도 한다.

* SGD를 통해서 Optimize하는 것도 하나의 방법이다.

 

Backpropagation for RNNs

  • 기존 역전파와 다르게 순환 신경망은 계산에 사용된 시간, 시점의 수가 영향을 준다. 따라서 시간에 따른 역전파라는 BPTT 를 사용
  • BPTT(Backpropagation Through Time) 방식 : timestep 에 따라 gradient 를 더해간다.

 

 각 레이어마다의 weight는 실제론 동일한 웨이트여야 하므로 모든 업데이트도 동일하게 이루어져야 한다. 따라서 각 layer마다 동일한 위치의 weight에 해당하는 모든 derivative error를 다 더한다음 (더하는 거나 평균 내는거나 사실상 같은 의미) weight를 1번 업데이트 해준다.


Question: 반복되는 가중치 행렬 에 관한 의 도함수는 어떻게 구할까?
Answer: 반복되는 가중치에 관한 gradient는 그것이 나타날때마다의 gradient의 합이다.

Multivariable Chain Rule

Backpropagation for RNNs: Proof sketch


Question: 이걸 어떻게 계산할까?
Answer: BPTT(Backpropagation Through Time) → timesteps 에 따라 gradients를 더해간다.

 

Generating text with a RNN

  • n-gram Language Model과 같이 RNN Language Model을 사용해 반복된 샘플링으로 text를 생성할 수 있다.
  • 샘플링된 출력은 다음 단계의 입력이 된다.

특정 종류의 text에서 RNN-LM을 학습시킨 다음 해당 style의 text를 생성할 수 있다.

  • RNN-LM trained on Obama speeches:
  • RNN-LM trained on Harry Potter:
  • RNN-LM trained on recipes:
  • RNN-LM trained on paint color names:

 

Evaluating Language Models

- Language Models을 위한 대표적인 평가 지표는 Perplexity이다.


⇒ Language Model을 통해 예측한 corpus의 inverse를 corpus의 길이로 normalize해준다.

 

perplexity

- Perplexity는 출현할 단어의 확률에 대한 역수(inverse)라고 할 수 있다.

- cross-entropy에다가 로그를 취한값의 exponential 값과 같다.

- Perplexity 값이 작을수록 좋은 Language Model이다.