vLLM generate output의 perplexity 계산하기

Taekyung Ahn·2024년 11월 24일

시행착오

목록 보기
3/3

vLLM(참고자료)의 generate를 사용해서 한 번에 여러개의 응답을 생성하면, 각 응답마다 cumulative_logprob 라는 값이 생성되는 것을 확인할 수 있습니다. cumulative_logprob 는 변수명 그대로 응답의 모든 토큰의 log를 씌운 probability 값들의 합입니다. List 타입의 logprobs 에는 각 token별 log probability 값도 확인할 수 있습니다.

Log 값이기 때문에 확률값이 음수로 표현됩니다. 동시에 생성된 각 응답 중에 가장 확실한 응답을 고르고 싶어서 cumulative_logprob 값을 그대로 활용해서 각 응답을 비교하면 되는지 클로드에게 물어보았습니다. 클로드는 각 응답을 비교하려면 cumulative_logprob 을 그대로 사용하지 말고 perplexity 값을 구하여 응답 간의 확률을 비교하라고 제안하였습니다. Perplexity 수식은 아래와 같습니다.

perplexity = np.exp(-cumulative_logprob / num_tokens)

Perplexity는 불확실성을 의미합니다.좀 더 자세히 이야기하면 "각 위치에서 고민하는(혼동하는) 토큰의 개수"를 의미합니다(정의 및 이미지 출처). 때문에 높은 값일수록 불확실하고, 낮은 값일수록 확실한 결과를 의미합니다. 즉 생성된 응답 중에 perplexity가 가장 낮은 값이 가장 확실한 결과값이라고 생각할 수 있습니다.

cumulative_logprob 은 로그 값의 합이기 때문에 큰 음수값이 나올 수도 있는데, perplexity를 계산하면 별도의 스케일링도 필요하지 않습니다. 처음에는 np.exp(cumulative_logprob) / num_tokens 로 확률값을 비교하려고 했는데, 이렇게 계산하면 0에 가까운 소수값이 높은 빈도로 나와서 별도의 스케일링을 해줘야 비교하기 수월했었습니다.

클로드의 응답으로만 계산 방법을 신뢰하기가 어려워 찾아보니, OpenAI cookbook 에서도 GPT의 응답 결과로 나오는 log probability 값으로 perplexity를 계산하여 응답에 대한 불확실성을 계산하라는 가이드가 나와있는 것을 확인할 수 있었습니다. 클로드가 제안한 수식과 동일합니다.

perplexity_score = np.exp(-np.mean(logprobs))

응답 결과 예시 (출처 : OpenAI cookbook)

Prompt:     In a short sentence, has artifical intelligence grown in the last decade?
Response:   Yes, artificial intelligence has grown significantly in the last decade. 

Tokens:                Yes              ,     artificial   intelligence            has          grown  significantly             in            the           last         decade              .
Logprobs:            -0.00          -0.00          -0.00          -0.00          -0.00          -0.53          -0.11          -0.00          -0.00          -0.01          -0.00          -0.00
Perplexity: 1.0564125277713383 

Prompt:     In a short sentence, what are your thoughts on the future of artificial intelligence?
Response:   The future of artificial intelligence holds great potential for transforming industries and improving efficiency, but also raises ethical and societal concerns that must be carefully addressed. 

Tokens:               The        future            of    artificial  intelligence         holds         great     potential           for  transforming    industries           and     improving    efficiency             ,           but          also        raises       ethical           and      societal      concerns          that          must            be     carefully     addressed             .
Logprobs:           -0.19         -0.03         -0.00         -0.00         -0.00         -0.30         -0.51         -0.24         -0.03         -1.45         -0.23         -0.03         -0.22         -0.83         -0.48         -0.01         -0.38         -0.07         -0.47         -0.63         -0.18         -0.26         -0.01         -0.14         -0.00         -0.59         -0.55         -0.00
Perplexity: 1.3220795252314004 

쿡북에서도 perplexity는 하나의 모델 내에서 응답 결과를 평가하거나 모델 간의 응답 결과를 비교하는 데 사용할 수 있다고 이야기하고 있습니다. 쿡북에 따르면 동시에 생성된 여러 개의 응답을 비교하는 용도가 아니더라도, 응답 자체의 불확실성 지표를 계산하는 데에도 사용할 수 있습니다.

Perplexity는 LLM 모델 간 성능을 비교하는 지표로 사용하고 있다는 사실은 알고 있었지만, 한 모델에서 동시에 생성된 여러 개의 응답을 비교하는 데에도 사용할 수 있다는 점은 처음 알았습니다.

profile
정리좋아휴먼의 기록

0개의 댓글