해당 글은 자연어 처리 바이블 (임희석 저) 에서 참고하여 작성되었음을 알려 드립니다.
목차
1. 언어모델의 정의와 종류
2. 통계적 언어 모델
3. 일반화
4. 모델 평가와 퍼플렉서티(Perplexity)
1.언어 모델의 정의와 종류
언어모델(Language Model, LM)의 정의
언어를 이루는 구성 요소(글자, 형태소, 단어, 단어열(문장), 문단 등)에 확률값 을 부여하여 이를 바탕으로 다음 구성 요소를 예측하거나 생성하는 모델을 말함.
언어모델의 종류
통계에 기초한 통계적 언어모델 (Statistical Language Model, SLM)
인공 신경망에 기초한 딥러닝 언어모델(Deep Neural Network Language Model, DNN LM)
=. 본 게시물의 경우 SLM 을 중심으로 서술하려고 한다.
2. 통계적 언어 모델
통계적 언어모델
정의 : 통계적 언어 모델 은 단어열이 가지는 확률 분포를 기반으로 각 단어의 조합을 예측하는 전통적인 언어 모델
목표 : 실제로 많이 사용하는 단어열(문장)의 분포를 정확하게 근사하는 것.
주어진 단어를 바탕으로 다음 단어로 올 확률이 가장 높은 단어를 예측하는 일련의 과정을 의미한다.
위와 같은 목표를 달성하기 위한 원리는 조건부 확률 을 언어 현상에 적용해 보는 것
1) 조건부 확률과 언어모델
조건부 확률의 표현식
P ( P ∣ A ) = P ( A , B ) P ( A ) P(P|A) = \frac{P(A,B)}{P(A)} P ( P ∣ A ) = P ( A ) P ( A , B )
P ( A ) P ( B ∣ A ) = P ( A , B ) P(A)P(B|A) = P(A,B) P ( A ) P ( B ∣ A ) = P ( A , B )
P ( A , B ) = P ( A ) P ( B ∣ A ) P(A,B) = P(A)P(B|A) P ( A , B ) = P ( A ) P ( B ∣ A )
위 표현식을 응용하면 다음과 같은 조합도 가능하고, 이를 연쇄법칙 이라고 한다.
P ( A , B , C , D ) = p ( A ) P ( B ∣ A ) P ( C ∣ A , B ) P ( D ∣ A , B , C ) P(A,B,C,D) = p(A)P(B|A)P(C|A,B)P(D|A,B,C) P ( A , B , C , D ) = p ( A ) P ( B ∣ A ) P ( C ∣ A , B ) P ( D ∣ A , B , C )
위 식을 일반화 하면 다음과 같음
P ( w 1 , . . . , w n ) = ∏ n = 1 n P ( w n ∣ w 1 , . . . , w n − 1 ) P(w_{1},...,w_{n}) = \prod^{n}_{n = 1}P(w_{n}|w_{1},...,w_{n-1}) P ( w 1 , . . . , w n ) = ∏ n = 1 n P ( w n ∣ w 1 , . . . , w n − 1 )
"나는 사과를 먹는다" 라는 문장을 바탕으로 위의 식을 적용해 본다면
P ( 나는 , 사과를 , 먹는다 ) = P ( 나는 ) P ( 사과를 ∣ 나는 ) P ( 먹는다 ∣ 나는 , 사과를 ) P(나는, 사과를, 먹는다) = P(나는)P(사과를|나는)P(먹는다|나는,사과를) P ( 나 는 , 사 과 를 , 먹 는 다 ) = P ( 나 는 ) P ( 사 과 를 ∣ 나 는 ) P ( 먹 는 다 ∣ 나 는 , 사 과 를 )
단어 뿐만 아니라 글자나 형태소 의 결합 확률을 바탕으로 이와 같은 식을 사용할 수 있다.
모델은 코퍼스(corpus)내에서 각 단어들의 조합이 나오는 횟수를 카운트한 후 이에 기반 하여 확률을 계산한다.
예를 들어 "나는 엄청" 뒤에 "잘생겼다" 가 나올 확률인 P(잘생겼다|나는,엄청)을 구하기 위해서는 코퍼스 안에서 "나는 엄청" 이 나오는 횟수와 나는 엄청 잘생겼다 가 나오는 횟수를 모두 세어 나누어 주어야 한다.
P ( 잘생겼다 ∣ 나는 , 엄청 ) = c o u n t ( 나는 , 엄청 , 잘생겼다 ) c o u n t ( 나는 , 엄청 ) P(잘생겼다|나는,엄청) = \frac{count(나는,엄청,잘생겼다)}{count(나는,엄청)} P ( 잘 생 겼 다 ∣ 나 는 , 엄 청 ) = c o u n t ( 나 는 , 엄 청 ) c o u n t ( 나 는 , 엄 청 , 잘 생 겼 다 )
하지만 코퍼스의 양이 많아지고, 단어의 조합이 많아질 수 록 이와 같은 연산은 복잡성 이 증가해 이를 해결하고 기존의 연쇄 법칙을 간소화하기 위해 등장한 개념이 마르코프 가정(Markov assumption) 이다.
마르코프 가정 이란 미래 사건에 대한 조건부가 과거에 대해서는 독립 이며, 현재의 사건(or 바로 직전) 의 사건에 대해서만 영향을 받는다고 하는 가정
P ( w 1 , . . . , w n ) ≈ ∏ n = 1 n P ( w n ∣ w 1 , . . . , w n − 1 ) P(w_{1},...,w_{n}) \approx \prod^{n}_{n = 1}P(w_{n}|w_{1},...,w_{n-1}) P ( w 1 , . . . , w n ) ≈ ∏ n = 1 n P ( w n ∣ w 1 , . . . , w n − 1 )
2) N-gram 언어모델
문장 내의 단어는 주변의 여러 단어와 연관되어 있는 경우가 많다. 예를 들면
"The boy is looking at a pretty girl" 이라는 문장이 있을 때, pretty는 멀리 있는 boy 보다 girl과 연관이 되어 있을 가능성이 높다.
N-gram 은 몇개의 주변 단어를 볼 것인지를 정하는 N개의 단어열 을 말한다. 위의 문장을 예로 들면
1-gram : The, boy , is , looking, at, a, pretty, girl
2-gram : The boy, boy is, is looking, looking at, at a, a pretty, pretty girl
3-gram : The boy is , boy is looking, is looking at, looking at a, at a pretty, a pretty girl
N-gram 언어 모델에서는 특정 단어가 등장하는 확률을 계산할 때 N-1 개의 이전 단어가 등장하는 확률만 고려 => 이와 같은 특징 때문에 N-1차 마르코프 가정 이라고 부르기도 함.
1-gram 은 이전 0개를 고려해 사실상 모든 단어가 독립적이고 2-gram 은 이전 1개의 단어를, 3-gram 은 이전 2개의 단어를 조건부로 고려한다.
1 − g r a m : P ( w 1 , . . . , w n ) ≈ ∏ i = 1 n P ( w i ) 1-gram: P(w_{1},...,w_{n}) \approx \prod^{n}_{i = 1}P(w_{i}) 1 − g r a m : P ( w 1 , . . . , w n ) ≈ ∏ i = 1 n P ( w i )
2 − g r a m : P ( w 1 , . . . , w n ) ≈ ∏ i = 1 n P ( w i ∣ w i − 1 ) 2-gram: P(w_{1},...,w_{n}) \approx \prod^{n}_{i = 1}P(w_{i}|w_{i-1}) 2 − g r a m : P ( w 1 , . . . , w n ) ≈ ∏ i = 1 n P ( w i ∣ w i − 1 )
"나는 엄청 잘생겼다" 라는 문장을 2-gram 모델을 적용한 식으로 바꾸면 다음과 같다.
P ( 잘생겼다 ∣ 나는 , 엄청 ) ≈ P ( 잘생겼다 ∣ 엄청 ) P(잘생겼다|나는,엄청) \approx P(잘생겼다|엄청) P ( 잘 생 겼 다 ∣ 나 는 , 엄 청 ) ≈ P ( 잘 생 겼 다 ∣ 엄 청 )
c o u n t ( 나는 , 엄청 , 잘생겼다 ) c o u n t ( 나는 , 엄청 ) ≈ c o u n t ( 엄청 , 잘생겼다 ) c o u n t ( 엄청 ) \frac{count(나는,엄청,잘생겼다)}{count(나는,엄청)} \approx \frac{count(엄청,잘생겼다)}{count(엄청)} c o u n t ( 나 는 , 엄 청 ) c o u n t ( 나 는 , 엄 청 , 잘 생 겼 다 ) ≈ c o u n t ( 엄 청 ) c o u n t ( 엄 청 , 잘 생 겼 다 )
좌변이 우변으로 근사하게 되는 이유는 마르코프 가정 때문이다.
N값을 정하는 기준 => 적당한 N값을 찾아야 한다.
성능 => N이 크면 클 수 록 자연스럽게 언어를 이해하거나 생성할 수 있다.
리소스 => N이 너무 커지면 성능이 좋아지는 것에 비해 리소스가 기하급수적으로 증가한다.
3) SLM의 단점
희소성 문제
위에서 설명한 SLM 들은 모두 특정 단어열의 갯수를 count 하는 방식
그런데 특정 단어열이 없는 경우 이에 대한 확률이 0이되면서 정확한 모델링을 하기 어려워 짐
이를 해결하기 위해 방대한 양의 코퍼스가 필요하고 다양한 일반화 방법들이 존재함
딥러닝 기반의 언어모델을 사용해서 해결할 수 있기도 함.
생성 task에서의 문제
통계적으로 계산되어 생성된 문장들은 코퍼스와 지나치게 유사할 수 있다.(잘 학습되거나 N이 높을 수록)
4) 로그 확률
언어 모델에서 확률값을 계산할 때는 원래의 확률값(raw probability)에 로그(log)를 취하는 것이 보편적이다.
로그 확률을 사용하는 이유
언더플로(underflow) 를 피하기 위함
언더플로란 부동 소수점 연산에서 컴퓨터가 표현할 수 있는 것보다 작은 값이 발생하여 계산 결과를 표시할 수 없는 상태를 말한다.
N-gram 모델을 사용하다 보면 언더플로가 발생할 가능성이 높기 때문에 일반적으로 사용한다.
l o g ( p 1 × p 2 × p 3 ) = l o g p 1 + l o g p 2 + l o g p 3 log(p_{1}\times p_{2} \times p_{3}) = logp_{1} + logp_{2} + logp_{3} l o g ( p 1 × p 2 × p 3 ) = l o g p 1 + l o g p 2 + l o g p 3
위의 연산처럼 1이 되지 않는 확률 값은 계속 곱해지면 계속 작아지는데, 로그를 취하는 경우 덧셈으로 환산 가능해 계산이 편리해지고 언더플로를 피할 수 있다.
N-gram 모델은 로그를 취했을 때 다음과 같이 표현될 수 있다.
l o g P ( w 1 , w 2 , . . . , w n ) ≈ ∑ i = 1 n l o g P ( w i ∣ w i − N , . . . , w i − 1 ) logP(w_{1},w_{2},...,w_{n}) \approx \sum^{n}_{i = 1}logP(w_i|w_{i-N},...,w_{i-1}) l o g P ( w 1 , w 2 , . . . , w n ) ≈ ∑ i = 1 n l o g P ( w i ∣ w i − N , . . . , w i − 1 )
위 식에서는 파이가 시그마로 바뀐것, 마르코프 가정이 적용된 것을 확인할 수 있으면 된다.
3. 일반화
SLM은 희소성 문제가 발생할 수 있다.
이는 모델 정확도 저하의 요인이 되고,
N-gram에선 희소성문제를 해결하기 위해 마르코프 가정을 도입했지만, 완전 해결되지 않았다.
N-gram 모델은 학습데이터와 테스트데이터가 유사해야 예측성능이 좋다.
코퍼스의 크기를 키우면 해결되지 않을까 생각할 수도 있지만, 실제 언어 조합을 모두 표현할 수 있는 코퍼스를 구축하는 것은 현실적으로 불가능 하다
따라서 일반화 기법이 도입되었다.
1) 스무딩(Smoothing)
정의 : 코퍼스 내에 존재하지 않는 단어 조하, 즉 모델이 한번도 본 적 없는 단어에 대해 특정 값(α \alpha α )를 부여하여 확률 분포에 약간의 변화를 주는 방법
일반적으로 α \alpha α 는 0보다 크고 1보다 작거나 같기 때문에, 전체 문장의 확률이 0이되는 문제를 방지할 수 있다.
이를 보여주는 식은 다음과 같다.
P ( w i ∣ w < i ) ≈ c o u n t ( w < i , w i ) + α c o u n t ( w < i + α V ) P(w_{i}|w_{<i}) \approx \frac{count(w_{<i},w_{i})+\alpha}{count(w_{<i}+\alpha V)} P ( w i ∣ w < i ) ≈ c o u n t ( w < i + α V ) c o u n t ( w < i , w i ) + α
변수들을 살펴보면 V는 어휘 사이즈로 단일 단어의 개수를 의미한다. 여기서 α \alpha α 값을 1처리하는 것을 라플라스 스무딩 이라고 한다.
예를 들어 "I eat a strawberry", "I eat a blueberry", "I eat a strawberry cake" 3개의 문장으로 이루어진 코퍼스가 있을때, "I eat a blueberry cake"라는 문장이 등장할 확률을 구한다고 가정하자. 그런데 "blueberry cake"이라는 단어열이 없어 모든 확률은 0이 된다. 그런데 이것을 라플라스 스무딩 처리하면 다음 과 같다.
P ( c a k e ∣ b l u e b e r r y ) ≈ c o u n t ( b l u e b e r r y , c a k e ) + 1 c o u n t ( b l u e b e r r y ) + V ) ≈ 0 + 1 1 + 6 P(cake|blueberry) \approx \frac{count(blueberry,cake)+1}{count(blueberry)+V)} \approx \frac{0+1}{1+6} P ( c a k e ∣ b l u e b e r r y ) ≈ c o u n t ( b l u e b e r r y ) + V ) c o u n t ( b l u e b e r r y , c a k e ) + 1 ≈ 1 + 6 0 + 1
장점 : 제로데이터가 적은 경우 쉽고 유용하다
단점
N-gram 처럼 희소문제가 큰 모델의 경우 원래의 단어의 빈도수에서 크게 벗어나는 비효율성을 보인다.
라플라스 스무딩 만으로는 일반화를 완벽하게 달성하지 못한다.
2) 보간법(Interpolation)과 백오프(Back off)
기본적인 보간법
특정 N-gram의 확률을 이전 N-gram의 확률과 섞음으로써 일반화
예를 들어 3-gram 모델의 경우 특정 단어의 확률을 구할 때 이전 2개의 단어만 보는 것이 아니라, 2-gram,1-gram 모델의 확률까지 구하고 일정한 비율의 가중치를 각각 곱한후 합한다.
P ( w n ∣ w n − 1 , w n − 2 ) ⌢ = λ 1 P ( w n ∣ w n − 1 , w n − 2 ) + λ 2 P ( w n ∣ w n − 1 ) + λ 3 P ( w n ) \stackrel\frown{P(w_{n}|w_{n-1},w_{n-2})} = \lambda_{1}P(w_{n}|w_{n-1},w_{n-2})+\lambda_{2}P(w_{n}|w_{n-1})+\lambda_{3}P(w_{n}) P ( w n ∣ w n − 1 , w n − 2 ) ⌢ = λ 1 P ( w n ∣ w n − 1 , w n − 2 ) + λ 2 P ( w n ∣ w n − 1 ) + λ 3 P ( w n )
라플라스 스무딩 의 경우
원래 라플라스 스무딩의 경우 모든 제로 데이터에 똑같은 빈도수를 부여하기 때문에 문제가 발생하는데, 보간법을 사용하면 제로 데이터 들의 N-gram 정보에 따라 다르게 부여
백오프
여러 N-gram을 고려하지만 모두 합하지 않는다는 점에서 차이
4. 모델 평가와 퍼플렉서티(Perlexity)
Perplexity : 주어진 확률 모델이 샘플을 얼마나 잘예측하는가를 측정하는 지표
한국어로 의역하면 '헷갈리는 정도' 로 의역할 수 있는데 모델이 테스트 데이터셋에 대하여 확률분포를 얼마나 확실하게 예측할 수 있는지를 나타냄
따라서 PPL 점수가 낮으면 낮을 수 록 좋더라
계산 방법
모델이 샘플의 확률을 예측하는 시점에서 얼마나 많은 후보군을 두고 고민하는가를 나타냄.
선택지가 10개 있고 1개를 꼽아야 한다면 확률은 1 10 \frac{1}{10} 1 0 1 , PPL은 10이다.
확률의 역수 로 볼수 있을 듯
N개의 단어 w n w_{n} w n 으로 이루어진 문장 W에 대하여 다음 단어를 예측하는 모델이 있다면 식은 다음과 같다.
P P L ( W ) = P ( w 1 , w 2 , . . . , w N ) − 1 N = 1 P ( w 1 , w 2 , . . . , w N ) N = ∏ i = 1 N 1 P ( w 1 , w 2 , . . . , w N ) N PPL(W) = P(w_{1},w_{2},...,w_{N})^{-\frac{1}{N}} = \sqrt[N]{\frac{1}{P(w_{1},w_{2},...,w_{N})}}= \sqrt[N]{\prod_{i=1}^{N}\frac{1}{P(w_{1},w_{2},...,w_{N})}} P P L ( W ) = P ( w 1 , w 2 , . . . , w N ) − N 1 = N P ( w 1 , w 2 , . . . , w N ) 1 = N ∏ i = 1 N P ( w 1 , w 2 , . . . , w N ) 1
나중에 다시 정리하면 좋은 내용들
마르코프 가정(Markov assumption)
보간법