LLM서비스를 개발하다 보면 fine tuning만을 위한 full dataset이 아니라 다른 포맷의 데이터에서는 잘 작동하는지 외부 데이터 소스를 잘 활용하는지 retrieval은 문제가 없는지 등 여러 시나리오에서 평가용 데이터셋이 필요한 경우가 많고 AI 개발자라 그런지 이런 경우 십중팔구 LLM api를 활용해 benchmark dataset을 만들어 성능을 평가한다.
나도 이러한 상황에 몇 번 처했는데 대부분 원하는 대로 동작했지만 가끔씩 data가 내 의도랑 좀 다르다거나 format이 마음에 들지 않는 등 성가신 상황이 가끔 발생했다.
물론 정성들인 prompt engineering이 있다면 대다수의 문제를 해결할 수 있겠지만 조금 더 이 과정을 설득력 있게 해결하고 싶어 찾아본 논문이다.
이 논문을 읽어도 당연히 내 고민에 대한 silver bullet은 되지 못했지만 "data나 model을 고르는데 통상적으로 이런 식으로 접근하는구나~" 정도의 인사이트를 얻기에는 충분했다.
Abstract
논문의 abstract에서 제시하는 중심 내용은 3가지로 요약할 수 있다.
- Core challenge: 신뢰성 있는 LLM-as-a-Judge system을 만드는 것
- LLM-as-a-Judge system 시스템의 안정성을 평가하기 위한 방법 제안
- Application, challenges, future 에 대해 정리
위에 보이는 그림대로 방대한 내용을 다루는데 이 중 Section 2만 읽고 리뷰해 보겠다.
Introduction
먼저 왜 LLM-as-a-Judge가 필요한지 간단히 짚고 넘어간다. 사람이 직접 평가하는 것은 퀄리티는 좋으나 비싸고 BLEU, ROUGE 같은 classical metric 만으로 평가하는 것은 사람의 평가와 너무 동떨어져 있으니 이제는 어느 정도 비용 효율적인 수준이 된 LLM을 사용하는 것이 LLM-as-a-Judge가 사용되는 background이다.
Background and Method
LLM-as-a-Judge는 다양한 시나리오 혹은 작업에서 LLM을 사용해 평가를 진행하는 것이다. 최근 이 기법은 자주 활용되나 이 용어에 대한 확실한 정의는 확실히 내려지지 않았다.
이 논문에서는 위와 같은 equation을 LLM-as-Evaluator로 정의한다. 그림에서 보이는 기호의 의미는 아래와 같다.
- Epsilon: LLM-as-a-Judge가 최종적으로 반환해야 할 값, 점수, 선택지, 문장 등등
- P_LLM: LLM의 auto regressive function
- x: input data
- C: x를 위한 context, prompt template 혹은 이전 대화
- +: C와 x의 결합방식, 대표적으로 x가 C의 어떤 위치에 놓일지
In-Context Learning
먼저 In-Context Learning(ICL)의 정의에 대해 짚고 넘어가야 한다.은 추가적인 tuning 과정이 포함하지 않으며 LLM의 생성 결과 향상을 위해 prompt와 input을 formatting하는 과정이다.
예를 들어 prompt는 어떤 template을 선택할지, input은 pair로 넣을지 prompt의 어떤 부분에 위치할지 등을 선택하는 과정을 의미한다.
저자는 LLM-as-a-Judge를 위한 4가지 prompt template를 제시한다.
1. Generating scores
0~100, 1~5와 같은 점수를 예측하는 케이스를 위한 경우이며 Dimension에는 alignment, relevance와 같은 평가 목표가 들어간다.
2. Solving YS/NO questions
Question과 retrieval된 knowledge가 유사한 케이스에서 종종 쓰이는 template이다.
3. Conducting pairwise comparisons
4가지 중에 유일한 상대적인 평가를 위한 prompt이며 LLM과 human의 alignment를 측정하는 등의 시나리오에서 score base보다 좋은 성능을 보인다고 한다.
4. Making multiple-choices selections
한눈에 multiple-choice를 위한 prompt인 것을 알 수 있다.
Model Selection
General LLM 혹은 Fine-tuned LLM 둘 중 하나를 사용하면 된다. 단 Fine-tuned LLM을 사용할 경우 instruction fine tuning방식으로 학습시키는 걸 추천했다.
Post-processing Method
LLM은 가끔씩 우리의 니즈와 다른 결과물을 생성하는데 이러한 결과를 개선시키는 방법을 몇 나열한다.
1. Extracting specific tokens
Yes/no question에서 "Modification needed." and "No modification needed."혹은 pair wise comparison에서 "Response 1 is better" and "The better one is response 1"등 단순한 rule base 방식으로 처리할 수 없는 경우 어떤 식으로 처리해주어야 할까?
저자는 해결책으로 마지막 문장에 ’The better response is’와 같은 prompt를 붙이거나 few shot을 사용할 걸을 제안 했다.(개인적으로이 문제는 NLP에서 sparse matrix사용시 다의어 처리와 동일한 문제로 보인다. 아마도 rule based에서 semantic based로 전환해, word2vec or SBERT를 사용하는 것도 좋은 방법일 듯싶다)
2. Normalizing the output logits
Yes/no problem에서 yes/no로 분류하기 위해 모든 time step에서 “Yes”로 분류할 확률을 곱하는 방법을 사용할 수 있다고 한다.
바깥면만 살짝 훑는 정도의 서베이 논문이라 가볍게 보기 좋았으고 LLM-as-a-Judge의 구현에서 prompt 예시는 명료해서 내용을 확실히 다잡을 수 있었다. 추가적으로 모델 선정, 훈련 등에 관한 설명이 후에 더 나오므로 궁금하면 한 번 읽어보는 것도 나쁘지 않다고 생각한다.