Contents
1.Language Modeling
2.N-gram Language Model
3.Neural Language Model
4.RNN Language Model
5.Perplexity
많은 사람들이 자동완성 기능, 인터넷 검색과 같은 Language Model을 일상생활에서 사용합니다.
Q : How to learn a Language Model?
A : (pre-deep learning) Learn n-gream Language Model
n-gram : a chunck n consecutive words (연이은 단어들의 덩어리)
n-gram 모델은 카운트에 기반한 통계적 접근을 사용하고 있기 때문에 SLM의 일종입니다. 하지만 이전에 등장한 모든 단어를 고려하는 것이 아니라, 일부 단어만 고려하는 접근 방법을 사용합니다.
'일부 단어를 몇 개 보느냐'를 결정하는 것이 n-gram에서의 n이 가지는 의미입니다.
IDEA : Collect statistics about how frequent diffrent n-grams are, and use these to predict next word (n-그램의 빈도에 대한 통계를 수집하고 이를 다음 단어를 예측하는데 사용)
- unigrams : the, students, opened, theirs
- bigrams : the students, students opened, opened their
- trigrams : the students opened, students opened their
- 4-grams : the students opened their
Markov Assumption : X(t+1)은 n-1개의 단어에만 영향을 받는다라는 가정
-> 다음 단어를 예측하기 위해서 확률을 계산하는 것이 아니라 여기서는 some large corpus of text에서 count해서 근사화하는 값을 계산합니다.
ex) 4-gram Language Model로 다음 단어 예측하기
As the proctor started the clock, the students opened their __
n-gram 언어 모델은 언어 모델링에 바로 앞의 n-1개의 단어만 참고합니다.
4-gram 언어 모델이라고 가정하여 위 문장을 가지고 앞서 배운 n-gram 언어 모델링을 하는 방법을 알아보겠습니다. 모델은 바로 앞 3개의 단어만 참고하며 더 앞의 단어들은 무시합니다.
위 예제에서 다음 단어 예측에 사용되는 단어는 students, opened, their입니다.
P(w|boy is spreading)=count(boy is spreading w)count(boy is spreading)
그 후에는 훈련 코퍼스에서 (n-1)-gram을 카운트한 것을 분모로, n-gram을 카운트한 것을 분자로 하여 다음 단어가 등장 확률을 예측했습니다. 예를 들어 갖고있는 코퍼스에서 students opened their가 1,000번, students opened their books가 400번, students opened their exams가 100번 등장했다면 각 확률은 아래와 같습니다.
P(books|students opened their=0.4
P(exams|students opened their)=0.1
문장에 존재하는 앞에 나온 단어를 모두 보는 것보다 일부 단어만을 보는 것으로 현실적으로 코퍼스에서 카운트 할 수 있는 확률을 높일 수는 있었지만, 여전히 n-gram 모델에 대한 희소 문제가 존재합니다.
n을 작게 선택하면, 훈련 코퍼스에서 카운트는 잘 되겠지만 근사의 정확도는 현실의 확률분포와 멀어집니다. 그렇기 때문에 적절한 n을 선택해야 합니다. 앞서 언급한 trade-off 문제로 인해 정확도를 높이려면 n은 최대 5를 넘게 잡아서는 안 된다고 권장되고 있습니다.
n이 커지거나 corpus가 증가하면, 모델 사이즈가 커진다는 문제점도 있습니다. 기본적으로 코퍼스의 모든 n-gram에 대해서 카운트를 해야 하기 때문입니다.
앞의 개념을 통해서 예시로 n-gram 동장 방식을 알아보겠습니다.
이전 n-gram Language Model 문제점에 대한 대안으로 대체적으로 성능이 우수한 인공 신경망을 이용한 언어 모델이 많이 사용되고 있습니다.
n-gram 언어 모델은 충분한 데이터를 관측하지 못하면 언어를 정확히 모델링하지 못하는 희소 문제(sparsity problem)가 있었습니다. 희소 문제는 기계가 단어 간 유사도를 알수 있다면 해결할 수 있는 문제입니다.
언어 모델 또한 단어의 유사도를 학습할 수 있도록 설계한다면, 훈련 코퍼스에 없는 단어 시퀀스에 대한 예측이라도 유사한 단어가 사용된 단어 시퀀스를 참고하여 보다 정확한 예측을 할 수 있을 겁니다. 이런 아이디어를 가지고 탄생한 언어 모델이 신경망 언어 모델 NNLM입니다.
-> window size : 4
Input 단어 x의 시퀀스를 window 사이즈 만큼 입력하여, one-hot vector를 거쳐 임베딩 합니다.
임베딩 한 벡터 값들을 concatenate하여 가중치 값과 연산하여 hidden layer를 거치게 됩니다. 최종적으로 softmax 함수를 통해 확률 분포를 output 할 수 있으며 해당 분포를 통해서 제일 가능성이 높은 다음 단어를 예측하게 됩니다.
기존의 뉴럴 네트워크 알고리즘은 고정된 크기의 입력을 다루는 데는 탁월하지만, 가변적인 크기의 데이터를 모델링하기에는 적합하지 않습니다.
RNN(Recurrent Neural Network, 순환신경망)은 시퀀스 데이터를 모델링 하기 위해 등장으며, 기존의 뉴럴 네트워크와 다른 점은 ‘기억’(hidden state)을 갖고 있다는 점입니다.
는 t 시간 스텝에서의 입력 벡터, 는 t 시간 스텝에서 RNN의 기억을 담당하는 hidden state, 는 출력 벡터입니다. U, W, V는 모델의 파라미터입니다.
첫 다이어그램에 없던 은 hidden state의 초기값으로, 구현을 위해 필요한 부분이며 일반적으로 0으로 초기화 합니다.
은닉층 :
네트워크의 기억에 해당하는 hidden state 는 입력 x와 과거의 기억 을 조합하여 만들어집니다. 조합하는 방식은 파라미터 U와 W에 의해 결정됩니다. U는 새로운 입력이 새로운 기억에 영향을 미치는 정도를, W는 과거의 기억이 새로운 기억에 영향을 미치는 정도를 결정한다고 볼 수 있습니다. 비선형함수로는 tanh나 ReLU가 주로 사용됩니다. 여기에서는 tanh를 쓰겠습니다.
출력층:
출력, 즉 예측값은 마지막 hidden state 로부터 계산됩니다. 와 V를 곱하는데, 여기서 V는 hidden state와 출력을 연결시켜주며 출력 벡터의 크기를 맞춰주는 역할을 합니다. 마지막으로 출력을 확률값으로 변환하기 위해 softmax 함수를 적용합니다. softmax 함수는 모든 출력값을 0 ~ 1 사이로 변환하고, 출력값의 합이 1이 되도록 합니다.
#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 # 계산 결과는 현재 시점의 은닉 상태가 된다.
<각 벡터와 행렬의 크기>
Xt : (d×1)
Wx : (Dh×d)
Wh : (Dh×Dh)
ht−1 : (Dh×1)
b : (Dh×1)
단어 벡터의 차원 : d, 은닉 상태의 크기 : Dh
BPTT(Backpropagation Through Time) : 각 레이어마다의 weight는 실제론 동일한 웨이트여야 하므로 모든 업데이트도 동일하게 이루어져야 한다. 따라서 각 layer마다 동일한 위치의 weight에 해당하는 모든 derivative error를 다 더한다음 (더하는 거나 평균 내는거나 사실상 같은 의미) weight를 1번 업데이트 해준다.
(어차피 edge하나를 펼친거니까 k스텝으로 펼쳐서 k개의 에러를 구한다음, 에러를 하나로 합치고 이 edge에 대해 업데이트 해주면 끝) 사실상 이것이 BPTT의 핵심적인 부분이다.
1. 고정크기 입력 , 고정크기 출력
-> 순환적인 부분이 없기 때문에 RNN이 아닙니다.
2. 고정크기 입력 & 시퀀스 출력
-> 예)이미지를 입력해서 이미지에 대한 설명을 문장으로 출력하는 이미지 캡션 생성
3. 시퀀스 입력 & 고정크기 출력
-> 예) 문장을 입력해서 긍부정 정도를 출력하는 감성 분석기
4. 시퀀스 입력 & 시퀀스 출력
-> 예) 영어를 한국으로 번역하는 자동 번역기
5. 동기화된 시퀀스 입력 & 시퀀스 출력
예) 문장에서 다음에 나올 단어를 예측하는 언어 모델
언어 모델의 성능을 평가하는 척도인 perplexity(PPL)를 측정하는 방법은 정량 평가/extrinsic evaluation 방법의 하나입니다. PPL은 문장의 길이를 반영하여 확률값을 정규화한 값이라고 할 수 있습니다. PPL을 이용하여 언어 모델에서 테스트 문장들의 점수를 구하고, 이를 기반으로 언어 모델의 성능을 측정합니다.
최근 Perplexity가 감소하고 있음을 확인할 수 있는데, 해당 값이 낮을 수록 좋습니다.
투빅스 14기 한유진
RNN이 등장하게 된 배경과 학습이 이루어지는 과정을 잘 설명해주셔서 많은 도움이 되었습니다. 좋은 강의 감사합니다!
투빅스 15기 조준혁
Language를 활용한 모델 설계에 대한 기초를 배울 수 있는 강의였습니다. 감사합니다.
투빅스 14기 이정은
Language model에 대한 전반적인 내용을 이해할 수 있는 강의였습니다. 감사합니다 : )
투빅스 15기 김동현
Language Model과 RNN에 대해서 잘 설명해주셨습니다.
N-gram Language Model
RNN Language Model
투빅스 14기 정재윤
Language Model과 RNN에 대해서 전반적으로 설명해주신 강의였습니다.
Language Model은 다음에 나올 단어를 예측하는 모델로 대표적으로 N-gram Model이 있습니다. 여기서 n-gram이란 빈칸 앞에 등장한 n개의 단어를 고려하여 예측하는 방식입니다. 하지만 이 방식은 훈련 데이터에 동일한 형식이 등장하지 않으면 제대로 예측할 수 없다는 희소문제와 모든 데이터들이 저장되어야 한다는 저장문제를 가지고 있습니다.
이 후 발전된 형태로 나온 것이 Neural Language Model이었으며 더 나아가서 RNN이 만들어지게 됩니다. RNN에서 가장 중요한 점은 같은 가중치를 적용한다는 점입니다. 또한 n개만을 보는 것이 아닌 모든 길이의 입력을 모두 고려한다는 점입니다. 하지만 단점 역시 존재하는데 반복적인 계산으로 시간이 오래 걸린다는 점과 vanishing gradient가 발생해서 오래전에 입력된 단어들의 의미는 점차 사라진다는 점이 있습니다. 이 점들을 개선한 lstm, gru 등의 모델은 추후의 강의에 나옵니다.
Perplexity는 언어모델을 평가하는 방법 중 하나로 정량적인 평가 방법입니다. Perplexity는 문장의 길이를 반영하여 확률값을 정규화한 값으로 이 값이 낮으면 낮을수록 모델의 성능이 좋습니다.
투빅스 15기 조효원
언어모델(Language model)은 단순하게 말하자면, 주어진 단어 set이 있을 때 다음에 가장 나올 법한 단어를 모델링하는 것입니다. 딥러닝 이전에는 n-gram 단위로 통계를 이용해 모델링을 시도했습니다. 그러나 count-based 접근은 sparsity 문제와 저장의 문제가 있었습니다. 신경망 기반 접근법들이 발달하면서 해당 문제들은 사라집니다. 하지만 여전히 문제들은 남아있었습니다. 특히 window based 신경망 언어모델의 경우, window size의 한계 때문에 문제가 발생합니다. 이러한 문제점 속에서 등장한 것이 RNN으로, 순차적인 정보에 특화된 모델입니다. 시간 스텝을 고려하여, 과거의 기억을 계속 가진 상태로 학습을 진행합니다. 자연스럽게 과거의 기억은 잊혀집니다.
투빅스 14기 강재영
주어진 문장 다음 단어를 예측하는 ' Language Model ' 들에 대해서 배웠습니다.
N-gram Language Model
Neural Language Model
따라서 이러한 문제를 해결하기 위해 나타난 RNN - LM
투빅스 15기 이수민
투빅스 14기 박준영
이번강의는 Natural Language Processing with Deep Learning에 관한 강의였습니다.
N-gram Language Model : n개의 단어를 가지고 단어의 빈도를 기반으로한 통계적 model
하지만 n개의 단어를 보기때문에 sparsity 문제가 발생할 수 있다. 훈련 셋에 단어가 존재하지 않으면 확률이 0이 된다.
n이 커지거나 corpus가 증가하면 모델 사이즈가 커져 storage 문제점 발생
NNLM: n-gram 모델의 희소성문제를 해결하기위해 단어의 유사도를 학습할 수 있게했습니다. window 사이즈를 입력하고, one-hot벡터를 커쳐 임베딩한뒤에 NN을 통과하여 softmax를 통해 가능성이 높은 단어를 예측
희소성 문제를 해결했으며 모든 n-gram을 저장하지 않아도되서 storage문제도 해결했습니다. 하지만 window의 사이즈가 클수록 가중치가 커져 window 사이즈를 줄일 수 밖에 없습니다.
RNN : 시퀀스 데이터를 모델링하기 위한 모델입니다. hidden state를 이용하여 이전 정보를 기억합니다. 이를 통해, 길이의 입력을 처리할 수 있고, 입력 size가 커져도 모델크기가 증가하지 않습니다. 하지만 계산이 느리고 vanishing gradient 문제가 발생되어 거리가 멀어질수록 초반부의 단어가 결과에 미치는 영향이 적어진다.
language model을 평가하는데 정량평가 하나로 perplexity방법이 있습니다. 예측한 corpus의 inverse를 corpus 길이로 normalize해준 값이다. perplexity가 낮을수록 좋은 language model이라 할 수 있습니다.
Language model에 대해 배울수 있는 좋은 강의였습니다. 좋은강의 감사합니다.
투빅스 14기 강의정
Lecture 6 - Natural Language Processing with Deep Learning를 주제로 발표해주셨습니다.
투빅스 15기 이윤정
투빅스 14기 정세영
Language Model과 RNN의 큰 틀을 잘 설명해주셔서 쉽게 이해할 수 있었던 강의였습니다.
Language Model이란, 다음 단어를 예측하는 모델
n-gram Language Model
Neural Network Language Model (NNLM) (window-based)
RNN Language Model
-> 각 시점의 gradient가 그 이전 시점들에도 의존하기 때문에 하나의 edge를 펼쳐 구한 여러 loss들을 합쳐서 업데이트해주는 것