본문 바로가기
Deep Learning/NLP

[패캠] (LM) 기존의 언어 모델

by 룰루셩 2022. 2. 5.

기존의 언어모델

[패스트 캠퍼스] 김기현의 딥러닝을 활용한 자연어생성 올인원 패키지 Online.

Ch 02. Language Modeling
    03. n-gram
    04. Smoothing and Discount
    05. Interpolation and Back-off
    06. Perplexity

강의를 듣고 작성하였다.
(혹시 본 포스팅이 저작권 등의 문제가 있다면 알려주세요. 바로 내리도록 하겠습니다.
개인 공부 후 언제든지 다시 찾아볼 용도로 작성하고 있습니다.) 


 

n-gram

👉좋은 모델이란 Generalization을 잘하는 모델!
Training(seen) data를 통해서 test(unseen) data에 대해 훌륭한 prediction을 할 수 있는가?

이전에 배웠던 것처럼 n번째 이전의 단어가 주어졌을 때 n번째 단어가 나올 확률로 언어모델을 만든다고 생각하면..→ 이걸 counting word sequence 관점으로 보고 다시 수식으로 써보면

$P(x_n|x_{<n}) = {COUNT(x_1, ... , x_n) \over COUNT(x_1, ... , x_{n-1})}$ 이렇게 쓸 수 있다.

이때 분자가 0이 되면 $P(x_n|x_{<n})$이 존재할 확률이 0이 된다. 그렇지만, 이미 이렇게 확률로 나타낸다는 건 존재하는 문장이다. 확률이 0이 나오는 것은 너무 강력하다. 확률이 0이 되면 안된다. 또한 분모가 0이 되면 정의조차 할 수 없다.

 

Markov Assumption

Markov assumption을 적용하면, 앞에 있는 몇 개의 단어만 보고서도 $P(x_n|x_{<n})$을 근사할 수 있다.

  • if k =2,
    $P(x_n|x_{<n})\approx P(x_n|x_{n-1}, x_{n-2})$

$n = k+1$

k n-gram 명칭  
0 1-gram uni-gram 자기 자신만 봄
1 2-gram bi-gram 자기 자신까지 두개.. 앞에 한개만 보는 것
2 3-gram tri-gram  

n이 커질수록 오히려 확률이 정확하게 표현되는데 어렵다. n이 너무 작아도 확률이 너무 커질 것이다.

보통 3-gram을 가장 많이 사용한다.

  • 확률값을 근사하는 가장 간단한 방법은 코퍼스에서 빈도를 세는 것이다.
    • 하지만 복잡한 문장일수록 코퍼스에서 출현 빈도가 낮아 부정확한 근사가 이루어질 것이다.
    • 확률값이 0이 된다던지..
  • Markov Assumption 도입하여 확률값을 근사하는 것을 생각해볼 수 있다.
    • 그러면 학습 코퍼스에서 보지 못한 문장에 대해서도 확률값을 구할 수 있다.

그러나 여전히 문제가 있다.

⇒ Markov assumption해도 corpus에 아예 단어 자체가 없다면 확률이 0으로 나올 것이다.

 


Smoothing & Discounting

Markov assumption 적용하더라도 Training corpus에 없는 unseen word sequence의 확률은 0이 될 것이다.

count가 0이 되지 않도록 아주 작은 값을 분자 분모에 더해서 확률을 아주 작게라도 존재하게 만드는 것

 


Interpolation & Back-off

  • Interpolation(보간법)
    • 다른 Language Model을 linear하게 일정 비율로 섞는 것
    • general domain LM + domain specific LM
  • Back-off
    • 희소성을 대처하는 방법
    • 조건부 확률에서 조건부 word sequence를 줄여가면 언젠가는 확률을 구할 수 있다.
    • 확률값이 0이 되는 현상을 막기 위한 것
  • 전통적인 NLP에서는 단어를 discrete symbol로 보기 때문에 문제가 발생한다.
  • 여러가지 방법을 통해 문제를 완화하려고 하지만 근본적인 해결책은 아니다!!

 


언어 모델 평가: Perplexity

👉좋은 언어 모델이란?
실제 사용하는 언어의 분포를 가장 잘 근사한 모델
- 실제 사용하는 언어 → 테스트 시 입력 문장들
- 분포를 잘 근사 → 문장의 likelihood가 높을 것

잘 정의된 테스트셋의 문장에 대해서 높은 확률을 반환하는 언어모델!

 

  • Perplexity(PPL)
    evaluation metric으로 이걸 많이 사용
    • 테스트 문장에 대해서 언어모델을 이용하여 확률(likelihood)를 구하고
    • PPL 수식에 넣어 언어모델의 성능 측정
      • 문장의 확률을 길이에 대해서 normalization한다고 생각한다. 이것은 기하평균 구한다고 생각하면 됨
      $PPL(x_1, ... , x_n;\theta) = P(x_1, ... , x_n)^{-{1 \over n}}$ → 여기서 $P(x_1,...,x_n;\theta)$는 likelihood
      $= ^n\sqrt{1 \over {P(x_1, ... , x_n;\theta})}$ → 문장길이 n에 대해서 normalization
    • 테스트 문장에 대해서 확률이 높을수록 좋은건데
      역수 취한거니까 테스트 문장에 대한 PPL은 작을수록 좋다.
  • Perplexity가 의미하는 것은?
    • 선택할 수 있는 문장의 개수 (Time-step별 평균 가짓수)
    • PPL이 낮을수록 확률 분포가 Sharp하다. : sharp하다는 건 높은 확률이 하나 존재하는 거니까 고를 수 있는게 적다.
    • PPL이 높을수록 확률 분포가 Flat하다. : 고를수 있는게 PPL개, 확률이 다 비슷비슷해서 고를수가 없다. (no clue)
  • 즉, 언어모델은 다음 단어를 찍는건데, 언어모델에서 PPL은 다음에 올 단어를 헷갈리고 있는 숫자를 의미한다. 그래서 작은 값일수록 좋고 이것이 의미하는 것은 매 time-step마다 평균적으로 헷갈리고(no clue)있는 단어의 수 이다.

'Deep Learning > NLP' 카테고리의 다른 글

[패캠] (Seq2Seq) seq2seq 모델  (0) 2022.02.06
[패캠] (LM) Neural LM  (0) 2022.02.05
[패캠] (LM) 언어모델  (0) 2022.02.05
[패캠] 자연어 생성이란  (0) 2022.02.05
[패캠] tokenization  (0) 2021.10.08

댓글