새소식

자연어 NLP

[NLP] Evaluation Metric for Language Model(PPL, BLEU, ROUGE)

  • -

일반적으로 언어모델의 성능은 Perplexity, Cross Entropy, bit-per-character(BPC)로 측정하거나 GLUE benchmark의 Downstream task의 성능으로 측정된다. 그러나 Downstream task에 대해서는 task마다 지표가 상이할 수 있고 언어 모델 훈련시 모든 여러가지의 downstream task를 해보면서 측정하는 것은 reasonable하지 않을 수 있다.
언어모델은 일반적으로 perplexity를 minimize하는 것인데 perplexity가 0을 얻을 수 없기 때문에 perplexity의 lower bound가 무엇인가에 대해 생각해보아야 한다. 즉, optimal value 를 알 수 없다면, train한 언어모델이 얼마나 좋은지 어떻게 아냐는 것이다.
그리고, character-level의 언어모델의 perplexity가 word-level 언어모델의 perplexity보다 훨씬 작아도 character-level 언어모델이 더 좋다는 것을 의미하지는 않는다.


Language Model

언어모델은 임의의 token들의 Sequence에 확률을 assign하여 token들의 sequence가 존재할 가능성이 높을 수록 확률이 높아진다. 그리고 대부분의 언어 모델은 이전 토큰들(Context)가 주어졌을 때 각 토큰들의 확률의 곱으로 이 확률을 추정하게 된다.

 


Entropy & Cross Entropy

언어 모델에서 Entropy를 측정하는 함수는 아래의 F_N와 같다.

이를 정리하면,


즉, 인접한 token에 걸쳐 확장되는 정보의 양을 위처럼 표현할 수 있는 것이다.

 

cross entropy

그리고 F_N에서 N이 무한대로 갈때를 언어의 entropy라고 정의하고, 우리가 언어모델을 만드때는 finite sampling을 통해 empirical entropy(p가 1/N)로 entropy를 근사하게 된다.

Entropy는 random variable에 포함된 정보를 인코딩하기 위한 평균 비트 수로 exponentiation of entropy는 가능한 모든 정보의 총량이어야 한다. 즉 random variable의 가중 평균된 선택할 수 있는 수를 말한다.

 

 

Perplexity

perplexity는 훈련한 언어모델이 샘플을 얼마나 잘 예측하느냐의 척도이고, 직관적으로는 uncertainty를 measure하는 것이라고 볼 수 있다.

Perplexity의 수식을 보면 token 예측 확률 q의 역수를 기하평균한 것임을 알 수 있다. 모든 토큰에 대한 예측값이 1이면 perplexity는 1로 가장 최소 값이 되고 token 중 하나라도 0 prob를 가지면 무한대가 된다.([1,inf]). sentence 에 포함되는 단어가 적을 수록 즉 문장이 짧으면 토큰의 갯수(N)이 줄어들어 ppl의 variance가 커진다고 볼 수 있지만 길면 또 0의 prob를 가지는 토큰이 나올 확률이 높아지므로 마찬가지로 variance가 크다. ppl은 loss 로 사용되지 않고 log를 exponential로 없애서 사람이 직관적으로 이해하기 쉬운 값을 나타내서 trainig 확인 용으로 주로 사용되므로 variance가 큰것이 training하는데 영향을 끼치지는 않는다.

 

예를 들어 3bit entropy를 가지는 언어모델이 있을 때, 각 bit는 0또는 1을 가질 수 있으므로 다음 토큰을 예측하기 위해서 언어모델은 2^3=8 가지의 경우를 고려할 수 있고 이 모델의 perplexity는 8이라고 할 수 있다. 딥러닝에서는 cross entropy를 사용하므로 언어모델에서 PPL은 2^entropy가 아닌 2^cross_entropy가 된다.

 

 

Perpelxity나 cross entropy는 단순히 다음 토큰 값을 잘 맞췄느냐로 평가되는 척도이다. 그래서 사람이 보기에 좋은 문장인지 판단하기에는 좋은 metric은 아니다 해서 2002에 제안된 것이 BLEU score 이다.

 

BLEU(Bilingual Evaluation Understudy)

https://donghwa-kim.github.io/BLEU.html

BLEU 스코어는 정답에 해당하는 여러 번역 문장 references들이 있고 Machine Translator가 번역한 문장 Candidates 들이 있으면, n-gram word에 대한 Precision에 기반해서 번역 문장의 퀄리티를 측정할 수 있다.

1-gram precision은 Machine translator가 맞춘 토큰이 몇개인지에 대한 비율을 나타낸다. 10개 토큰으로 이루어진 문장에서 Machine Translator가 10개의 토큰을 모두 맞췄을때 bleu score 는 100점이다.

unigram precision이면 (References 중 존재하는 Candidates 단어수 / Candidates 총 단어수)가 된다. 여기서 Cand 단어수는 Ref에 존재하는 최대 카운트를 넘으면 세지 않는 count-clip을 준다.

n-gram의 n에 따라 다르게 나오는 precision을 통합해서 표현해서 bleu를 측정하는데 가중치를 부여한 log 기하 평균을 사용해서 modified n-gram precision을 통합하게 된다.

p_n : modified n-gram precision, N : maximum of n, w_n  weight

이렇게 되면 짧은 문장에서는 높은 bleu를 갖게 되는데 이를 방지하기 위해 Penalty 텀이 추가된다. 짧은 candidate에 대해서는 Penalty를 준다.(Brevity Penalty)

최종 블루 스코어는 BP * BLEU가 된다.

 

 

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)

루지 스코어는 주로 요약 모델을 평가할 때 사용된다. n-gram recall score를 의미하며 두 문서간 얼마나 n-gram이 겹치는지 평가한다.

Precision은 Candidate 중 Reference와 겹치는 단어가 얼마나 많은지 보는 것이고 Recall은 위 Rouge 수식과 같이 Reference의 단어 중 몇개가 Candidate의 단어들과 겹치는지 본다.

 

 

 

 

 

 

 

 

 

 

References

 

https://towardsdatascience.com/perplexity-intuition-and-derivation-105dd481c8f3
https://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-8/03-perpexity
https://huggingface.co/docs/transformers/perplexity

https://thegradient.pub/understanding-evaluation-metrics-for-language-models/

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.