우리는 ChatGPT, Claude 등과 같은 대형 LLM을 통해 여러 답변을 만들어냅니다.
여러 데이터들을 분류하기도 하고,
질문에 대한 대답을 생성하거나 텍스트를 번역하기도 하지요.
하지만 LLM의 답변이 항상 옳은 것이 아니기 때문에 이를 평가하는 과정은 필수적입니다. 😎
LLM의 응답 퀄리티를 평가하는 기존 방법에는 여러 가지가 있습니다.
이 방법은 n-그램, 의미적 유사성, 또는 정답 참조에 의존하고 있기 때문에 복잡한 질문에 대한 응답을 평가하는 데 한계가 있습니다.
또한, LLM을 평가하는 대표적인 방법으로 Human Evaluation이 있습니다.
이는 사람이 직접 응답을 보고 판단하는 방식입니다.
인간의 평가가 더 정확할 수 있지만, 시간과 비용이 많이 드는 단점이 있습니다.
특히 데이터가 클수록, Human Evaluation은 피해야 하는 평가 방식입니다. ⚠️
이러한 이유로 LLM을 통해 LLM을 평가하는 LLM-evaluator의 필요성이 증가하고 있습니다.
그렇다면 LLM-evaluator의 정확한 정의에 대해 알아볼까요?
LLM-evaluator는 다른 LLM의 응답을 평가하는 대형 언어 모델입니다.
이 모델은 기존 평가 방식으로는 판단하기 어려운 긴 요약, 번역, 다중 턴 대화와 같은 복잡한 작업을 효과적으로 평가할 수 있습니다.
또한 LLM-evaluator는 자동화된 평가를 통해 인적 자원을 크게 절감할 수 있습니다.
이러한 이유로 LLM-evaluator는 기존 평가 방식을 넘어서는 유망한 대안으로 자리 잡고 있습니다.
LLM-evaluator가 다른 LLM의 응답을 평가하는 방법에는 다음과 같은 세 가지가 있습니다.
(1) 직접 점수 부여
(2) 쌍 비교
(3) 참조 기반 평가
각 방법에는 장단점이 있으며, 평가는 목적에 따라 알맞은 방법을 선택해야 합니다.
정의:
직접 점수 부여는 LLM-evaluator가 단일 응답을 평가하여 특정 기준에 따라 점수를 매기는 방식입니다. 이 방법은 비교 대안 없이 독립적으로 이루어집니다.
장점:
단점:
정의:
쌍 비교는 두 개의 응답을 비교하여 더 나은 응답을 선택하거나 동점을 선언하는 방식입니다. 이 방법은 보통 주관적인 평가에 사용됩니다.
장점:
단점:
정의:
참조 기반 평가는 생성된 응답을 정답 참조(gold reference)와 비교하여 얼마나 잘 일치하는지를 평가하는 방법입니다. 정답 참조는 포함되어야 할 정보가 담긴 기준 응답입니다.
장점:
단점:
저는 실제로 LLM을 통해 의류 제품 이름과 상세 설명을 번역하고,
이를 3가지 항목(제품 특징, 사이즈, 소재 및 세탁방법)으로 분류하는 프로젝트를 맡았었습니다.
평균적으로 월 15,000개의 제품이 번역되기 때문에
제가 직접 LLM 결과를 리뷰하기에는 무리가 있었습니다.
그래서 LLM-evaluator를 만들어
확인하기로 하였습니다.
제가 사용한 평가 방식은 참조 기반 평가입니다.
실제 제품 카테고리를 사용하여 LLM을 통해 번역&정제된 제품 이름이 옳은지 평가했습니다.
다음은 제가 사용한 프롬프트입니다.
category_check_prompt = """You are a fashion expert.
Please verify if the product name matches its assigned category.
Return "True" if the product type mentioned in the product name matches the category, and "False" if they don't match.
Examples:
1. Product Name: "Floral Mini Dress", Category: "DRESS" -> True
2. Product Name: "Cashmere Knit Sweater", Category: "PANTS" -> False
Response Format:
Return only True or False.
Product Information:
Product Name: {product_name}
Category: {category}
Note:
- Only evaluate if the product type in the name matches the category
- Do not include any additional explanations or comments"""
해당 과정을 통해
1월에 번역한 27,227 제품 중
331개 에러 케이스를 발견할 수 있었고,
Human Evaluation을 통해 2차 확인을 거쳐
331개 중 45개 에러 케이스만 디버깅이 필요한 응답 결과로 분류했습니다.
항목 | 내용 |
---|---|
인원 | 1인 프로젝트 |
개발 기간 | 24.09 - 24.10 (2개월) |
배포 및 유지보수 | 24.11 - 현재 |
개발 스펙 | LLM, AWS |
언어 | Python |
LLM을 통한 작업은 hallucination이 많기 때문에 LLM 응답 평가가 반드시 필요하다
전통적인 평가 방식으로는 평가하기 어려운 작업이 점차 많아지고 있고, 이에 대한 방안으로 LLM-evaluator (LLM-as-Judge)가 등장했다
직접 개발해본 결과 LLM-evaluator를 통해 에러 케이스를 뽑아내고, Human Evaluation을 통해 더블 체킹하는 것이 효율적이고 평가 정확도도 높일 수 있는 Best⭐️ 방법인 것 같다.