AI

태태개발일지 - 자연어처리(N-gram)

태태코 2026. 3. 21. 15:54
반응형

Language Model

단어를 얻을 확률을 구하는 것

 

 

NLP의 궁극적인 task는 다음 단어가 올 확률을 구하는 것이다.

 

과거의 언어모델

p(x) = p(x1)*p(x2|x1)*p(x3|X1,X2) =>

 

한 단어의 확률을 예측할 때 전의 모든 단어의 확률을 곱하여 사용했다.

 

rule

  1. p(xi) >=0
  2. 모든 확률의 합은 =1
  3. [BOS]시 문장시작 [EOS]시 문장종료

 

 

모델의 역사

  1. before 2000s : n-gram 
  2. 2000s-2018s: Rnns,Cnns 여러 task가 있었으면 각각 그에 맞게 만들었다.
  3. 2018s-2022s: transformer(bert,gpt-2)
    bert라는 언어모델을 공개하였고, bert를 가져와서 재조정하여 쓸 수 있었다.
    근간이 되는 model이 있고, 이를 미세조정하여 사용하였다.
  4. 2022s-now: Generalist larg language model(LLMS): 하나의 model이 다른 task를 다룰 수 있다.

 

 

N-gram

위의 수식에서 (xi-N+1)로 시작하게 된다. 즉 n-1개까지 보겠다는 것이다.

 

 

 

N-grams

 

unigram(n=1)

bigram(n=2)

trigram(n=3)

 

 

ex)

1. unigram

[BOS]의 확률

[BOS] i am a kid [EOS]

전체단어수 6

[BOS]의 수 1

px= 1/6

즉 이렇게 구하게 되면 he is a man 이 확률보다 [BOS][BOS][BOS][BOS]의 확률이 더 높아져서, 확률이 이상해진다.

 

2. bigram

[BOS] The cat is on the mat [EOS]

[BOS] I have a cat and a mat [EOS]

[BOS] I like the cat [EOS]

 

[BOS]의 개수 3개

[BOS]뒤에 i가 나온 개수

p("I"|[BOS])= 2/3

 

 

3. Trigram 바이그램과 n개 차이

 

문제점

unigram에서 bigram , Trigram으로 갈수록 확률이 작아지는 Sparsity 문제가 생김.

 

해결방법

smoothing

확률이 0으로 나온 것을 다 1로 만들어주자.

 

 

모두 1을 더했으니 |V|로 나눠주는 것이 필수  이다.

 

 

Add-k Smoothing

 

1을 모두 더해주니 power가 너무 강하다는 문제가생김

 

 

해결법

 

1보다 작은 소수 값 k를 더해준다.

 

k???

머신러닝에서 파라메타값을 구하듯 training/validation/test 셋으로 나누고 loss를 통해서 k값을 구한다.

 

 

앙상블 모델

Unigram,bigram,n-grams 모두 섞어서 쓴다.

 

 

Smoothing via backoff

 

 

n의 개수가 큰 모델부터 사용하여 있으면 통과시키고 없으면 n을 낮춘 모델을 사용한다.

만일 n을 내렸을때도 n이 0이된다면 [UNK] UNKOWN토큰을 두고 실제 학습에서 배제시킨다.

 

 

단어가 없는 이유?

기술 발전으로 인해 없는 단어가 생겼을 수 있다.

 

언어모델 평가

 

Perplexity

 

 

언어모델의 성능을 표시하는 지표이다.

 

 

이는저 수식에 Exp과 Log를 취해서 -1/n을 밖으로빼내고 log의 합으로 파이를 시그마로 변환하면 편하다.

 

 

 

 

Intrinsic metrics
    내재적 퀄리티(텍스트를 잘 이해하는가?)
extrinsic metrics
    직접적/구체적인 task를 적용하여, 얼마나 성능이 나오는가?

 

반응형