언어 모델(Language Model)

몽뭉뭉·2024년 1월 18일

NLP 스터디

목록 보기
3/10

이 글은 위키독스 딥러닝을 이용한 자연어 처리 입문 를 보고 스스로 공부하는 차원에서 적는 글입니다. 최대한 내 말로 적으려고 노력하고 있습니다.


언어 모델(Language Model)이란?

언어 모델은 단어(문장) 시퀀스에 확률을 할당(assign)하는 모델이다. 언어모델은 통계에 기반한 전통적인 모델과 인공 신경망을 이용한 모델로 나뉜다. 이번 글에서는 통계에 기반한 전통적인 언어모델인 SLM(Statistical Language Model)을 다룬다.

SLM은 조건부 확률(conditional probability)을 이용하여 주어진 이전 단어들로부터 다음 단어를 예측한다.


조건부 확률

조건부 확률은 아래의 관계를 갖는다.

P(A,B) = P(A)P(B|A)
P(A,B) = P(A)P(B|A)

4개의 확률이 조건부 확률의 관계를 가질 때는 다음과 같은 식이 성립한다

P(A,B,C,D) = P(A)P(B|A)P(C|A,B)P(D|A,B,C)

이를 조건부 확률의 연쇄법칙(Chain Rule)이라고 한다.
그에 대한 일반화 식이다.

P(x1,x2,x3...xn)=P(x1)P(x2x1)P(x3x1,x2)...P(xnx1...xn1)P(x_1, x_2, x_3 ... x_n) = P(x_1)P(x_2|x_1)P(x_3|x_1,x_2)...P(x_n|x_1 ... x_{n-1})

연쇄법칙(Chain Rule)을 적용하여 문장에 대한 확률을 구할 수 있다.

문장에 대한 확률

문장 'An adorable little boy is spreading smiles' 의 확률을 P(An adorable little boy is spreading smiles)P(\text{An adorable little boy is spreading smiles}) 라고 해보자!

각 단어는 문맥으로 인해 생기기 때문에 전에 나왔던 단어에 영향을 받고 뒤에 단어가 나온다. 따라서 이는 조건부 확률로 표현할 수 있다. 조건부 확률을 문장의 확률 관점에서 적으면 "문장의 확률은 각 단어들이 이전 단어가 주어졌을 때 다음 단어로 등장할 확률의 곱" 이다.

P(w1,w2,w3,w4,w5,...wn)=n=1nP(wnw1,...,wn1)P(w_1, w_2, w_3, w_4, w_5, ... w_n) = \prod_{n=1}^{n}P(w_{n} | w_{1}, ... , w_{n-1})


카운트 기반의 접근

SLM은 이전 단어로부터 다음 단어의 확률을 카운터를 기반으로 결정한다.
An adorable little boy가 나왔을 때, is가 나올 확률인 P(is|An adorable little boy)P(\text{is|An adorable little boy})를 구해봅보자.

P(is|An adorable little boy)=count(An adorable little boy is)count(An adorable little boy )P\text{(is|An adorable little boy}) = \frac{\text{count(An adorable little boy is})}{\text{count(An adorable little boy })}
이러한 식이 나온다. 예를 들어 기계가 학습한 데이터에서 100번의 An adorable little boy가 포함되어있고 그 중 is가 뒤에 나오는 경우가 30번이면 P(is|An adorable little boy)P(\text{is|An adorable little boy}) 는 30%이다.

희소 문제(Sparsity Problem)

카운팅 기반의 접근은 희소의 문제를 발생시킨다.
카운팅을 하려면 학습데이터에 An adorable little boy라는 텍스트가 반드시 있어야한다. 만약 존재하지 않으면 분모가 0이 된다. 만약 존재하더라도 An adorable little boy is 라는 텍스트도 존재해야한다. 그렇지 않으면 분자가 0이 되어버려서 이 텍스트를 예측하지 못한다. 이를 해결하려면 방대한 양의 학습 데이터가 존재해야하는데 확보하기 쉽지않다.


n-gram

위와 같은 희소문제(Sparsity Problem)을 개선한 것이 n-gram모델이다. n-gram은 아까 예시 An adorable little boy is 처럼 전체를 보는 것이 아니라 is 앞의 n개만 보겠다는 것이다. 즉, 코퍼스를 n개 단어 뭉치로로 나누어서 하나의 토큰으로 보는 것이다.

unigrams : an, adorable, little, boy, is
bigrams : an adorable, adorable little, little boy, boy is
trigrams : an adorable little, adorable little boy, little boy is
4-grams : an adorable little boy, adorable little boy is

P(insults|boy is spreading)=0.500P(\text{insults|boy is spreading}) = 0.500
P(smiles|boy is spreading)=0.200P(\text{smiles|boy is spreading}) = 0.200
결론적으로 이런 경우에는 insults라는 단어를 고르게 되는것이다. 우리는 이런 결과가 잘 나온 것인지에 대해 모델들을 평가할만한 지표가 필요하다.


펄플렉서티(Perplexity, PPL)

Perplexity(PPL)은 언어모델에 대한 평가지표로 쓰인다.
'perplexed' 라는 단어는 헷갈리는 이라는 의미로 쓰일 수 있다. 이로 인해 PPL은 헷갈리는 정도로 쓰인다.

=> PPL은 헷갈리는 정도이므로 낮을수록 좋은 것이다.

아래는 PPL의 수식이다

PPL(W)=P(w1,w2,w3,...,wN)1N=1P(w1,w2,w3,...,wN)NPPL(W)=P(w_{1}, w_{2}, w_{3}, ... , w_{N})^{-\frac{1}{N}}=\sqrt[N]{\frac{1}{P(w_{1}, w_{2}, w_{3}, ... , w_{N})}}

이는 문장 길이로 정규화된 문장 확률의 역수이다. 여기에는 chain rule과 n-gram도 적용할 수 있다.

PPL은 선택할 수 있는 경우의 수를 의미하는 분기계수(branching factor)이다. 예를 들어 PPL이 10이 나왔다고 하면 해당 모델은 예측하는 모든 시점(time step)마다 평균적으로 10개의 단어를 가지고 어떤 것이 정답인지 고민한다는 것이다. 따라서 PPL이 더 낮은 모델이 좋은 모델이라 볼 수 있다. 하지만 PPL이 낮다는 것이 테스트 상에서 좋다는 것이지 사람이 평가할 때 좋은 모델이라는 것은 아니다.


N-gram 성능비교

PPL을 이용하여 NLP로 유명한 스탠포드 대학에서 실험을 한결과 다음과 같은 결과가 나왔다.

UnigramBigramTrigram
Perplexity962170109

이 결과를 통해 n을 1,2,3 순으로 높일 수록 결과가 좋아지는 것을 알 수 있다.


한계점

이러한 SLM(통계기반 언어모델)은 한계점이 존재한다.

1. 여전히 존재하는 희소문제(Sparsity problem)

아무리 n-gram을 사용해도 학습데이터에 테스트하고자 하는 데이터가 존재하지 않으면 앞서말한 희소문제가 발생한다

2. n을 선택하는 trade-off 문제

n을 높이면 그만큼 학습 데이터에 존재하지 않을 확률이 높아져 Sparsity problem이 발생할 확률이 높다. 또 너무 낮추면 그만큼 성능이 떨어진다.이에 n을 최대 5까지만 사용하라는 결과가 있다.

3. Domain에 맞는 코퍼스 수집

각 분야에 따라 사용되는 단어가 다르다. 따라서 각 domain에 사용되는 코퍼스를 수집하지 않으면 성능이 잘 나오지 않는다.

4. 한국어에서의 한계점

이전 글에서도 말했다 시피 한국어를 언어모델로 만드는 것은 어려움이 따른다. 그 이유는 다음과 같다.
1. 한국어는 어순이 중요하지 않다.
2. 한국어는 교착어이다.
3. 한국어는 띄어쓰기가 제대로 지켜지지 않는다.

현재 이 같은 문제들로 인해 인공신경망을 이용한 언어모델을 주로 사용한다


알게된 점들

  1. N-gram에 대해 정확히 몰랏는데 이번 기회에 확실히 알게됨
  2. 조건부확률을 공부한지 오래되어 까먹었는데 다시 알게됨
  3. 언어모델의 평가지표에 대해 궁금하던 참이었는데 perplexity(PPL)이라는게 있다는걸 알게됨. 물론 요즘은 잘 안쓰인다는 것은 암 ㅎㅎ

0개의 댓글