LLM 품질, 제대로 평가하는 4가지 핵심 지표와 튜닝 방법

궁금하면 500원·2025년 9월 2일
0

AI 미생지능

목록 보기
66/68

LLM, 잘 만들었는지 어떻게 알까? 품질 평가와 튜닝

우리가 만든 LLM 기반 서비스가 제대로 작동하는지 확인하는 일은 매우 중요합니다.
하지만 단순히 "좋다", "나쁘다"로 판단하기는 어렵습니다.
특히 챗봇과 같이 챗 컴플리션(Chat Completion) 기능을 다루는 경우, 여러 지표를 통해 복합적으로 평가해야 합니다.

이번 포스팅에서는 LLM의 품질을 어떻게 평가하고, 어떤 방식으로 개선할 수 있는지 자세히 알아보겠습니다.

1. LLM 품질 평가의 핵심 지표

LLM의 성능을 평가할 때 가장 기본이 되는 4가지 핵심 지표가 있습니다.

  • 정확성 (Accuracy): LLM이 제공하는 정보가 올바르고 사실에 부합하는가?
    예를 들어, "대한민국의 수도는 어디야?"라는 질문에 "서울"이라고 답하는 것이 정확성입니다. 하지만 "독도는 누구네 땅이지?"와 같은 논쟁적인 질문에는 정확한 답을 내놓기가 매우 어렵습니다.
    이처럼 정확성 평가는 생각보다 단순하지 않고, 공정 데이터셋을 통해 국제 표준을 만들려는 노력이 계속되고 있습니다.

  • 관련성 (Relevance): 사용자의 의도에 맞는 답변을 하는가? "오늘 점심 뭐 먹지?"라는 질문에 "쌀의 구조"에 대해 설명한다면 관련성이 떨어지는 답변입니다.
    사용자가 묻고자 하는 핵심을 정확히 파악하여 답변하는 것이 중요합니다.

  • 이행성 (Adherence): 사용자가 요청한 지시사항을 잘 따르는가? 챗봇에게 "500자 이내로 요약해 줘"라고 했을 때, 500자를 넘기지 않고 요약해 주는 것이 이행성입니다.
    단, 이행성이 너무 높으면 시키는 대로만 하고 창의적인 답변을 하지 못할 수 있다는 단점도 있습니다.

  • 안정성 (Safety): 유해하거나 위험한 정보를 제공하지 않는가? 기밀 유출, 보안 정책 위배, 인명 살상과 관련된 민감한 정보를 필터링하고 안전한 답변을 제공하는 것은 LLM 서비스의 신뢰성을 위해 필수적입니다.

2. 보조 지표와 평가의 어려움

위 네 가지 핵심 지표 외에도 LLM의 성격을 규정하는 다양한 보조 지표들이 있습니다.

  • 컨텍스트 일관성 (Context Consistency): 대화의 흐름을 얼마나 잘 유지하는가? "어제는 날씨가 어땠어?"라고 물은 후, "오늘은?"이라고 이어서 물었을 때 어제의 날씨가 아닌 오늘의 날씨를 제대로 파악하고 답해야 합니다.
    이행성이 좋은 모델은 보통 컨텍스트 일관성도 높습니다.

  • 논리적 일관성 (Logical Consistency): 답변이 자기모순적이지 않은가? LLM은 확률 기반으로 답변을 생성하기 때문에 "아까는 A라고 했는데, 왜 지금은 B라고 해?"와 같은 자기모순에 빠지기 쉽습니다. 논리적 일관성을 유지하기 위해 별도의 장치가 필요합니다.

  • 창의성 (Creativity): 뻔한 답변이 아닌 독창적인 답변을 생성하는가? 창의적인 글쓰기나 그림 그리기와 같은 작업에는 창의성이 높은 모델이 필요하지만, 동시에 논리적 일관성이 떨어질 수 있습니다.

3. LLM 품질 평가 방법 (RAG 시스템을 중심으로)

LLM의 답변 품질은 사람이 일일이 평가하기 어렵기 때문에 자동화된 평가 방법을 주로 사용합니다.
특히 RAG(Retrieval-Augmented Generation) 시스템에서는 다음과 같은 방식으로 평가를 진행합니다.

RAG 시스템은 외부 데이터베이스에서 관련 정보를 검색(Retrieval)하여 LLM의 답변을 보강(Augmentation)하는 방식입니다.

1) 평가용 테스트셋 만들기

가장 이상적인 평가 방법은 질문-정답 쌍으로 이루어진 테스트셋을 만드는 것입니다.
"이런 질문이 오면, 이런 답변이 와야 해"라는 정답지를 미리 만들어 두고 LLM이 얼마나 정답과 비슷하게 답변하는지 비교하는 거죠.

하지만 방대한 양의 테스트셋을 사람이 만드는 것은 불가능에 가깝습니다.
그래서 평가용 LLM을 활용해 테스트셋을 자동 생성하는 방법을 많이 사용합니다.

아래는 평가용 테스트셋을 만드는 예제 코드입니다.

from langchain_community.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
import json

def create_test_dataset_with_llm(data_path, llm_model):
    """
    외부 데이터를 기반으로 LLM이 테스트셋(질문-정답 쌍)을 생성합니다.
    """
    with open(data_path, 'r', encoding='utf-8') as f:
        knowledge_base = f.read()

    template = """
    아래 정보를 기반으로 챗봇 테스트를 위한 질문-정답 쌍을 5개 만들어 주세요.
    질문은 한 문장으로, 정답은 상세하게 작성해 주세요.
    
    ## 정보
    {knowledge_base}

    ## 예시 JSON 형식
    [
      {{
        "question": "첫 번째 질문입니다.",
        "answer": "첫 번째 답변입니다."
      }},
      {{
        "question": "두 번째 질문입니다.",
        "answer": "두 번째 답변입니다."
      }}
    ]
    """
    
    prompt = PromptTemplate(template=template, input_variables=["knowledge_base"])
    llm_chain = LLMChain(prompt=prompt, llm=llm_model)
    
    response = llm_chain.run(knowledge_base=knowledge_base)
    
    try:
        test_dataset = json.loads(response)
        return test_dataset
    except json.JSONDecodeError:
        print("LLM이 유효한 JSON 형식을 반환하지 못했습니다.")
        return None

# 예제: 'company_info.txt' 파일에 회사 정보가 있다고 가정
# from langchain_community.llms import OpenAI
# llm = OpenAI(api_key="YOUR_API_KEY") 
# test_set = create_test_dataset_with_llm('company_info.txt', llm)
# if test_set:
#     print(json.dumps(test_set, indent=2, ensure_ascii=False))

2) 임베딩 유사도 및 검색 품질 평가

RAG 시스템의 핵심은 정확한 정보를 검색하는 것입니다.
따라서 벡터 DB에서 얼마나 관련성 높은 문서를 잘 가져오는지 평가해야 합니다.

  • 검색 결과 평가: 특정 질문에 대해 벡터 DB가 반환해야 할 정확한 문서(ground truth)를 미리 정의해 둡니다.
    그 후 실제로 벡터 DB가 검색해 온 문서 목록과 비교하여 얼마나 일치하는지 평가합니다.
  • 리랭커(Re-ranker) 활용: 검색된 문서들이 정말 질문과 관련성이 높은지, 리랭커 모델을 통해 다시 점수를 매겨 순서를 재정렬할 수 있습니다.

4. LLM 품질 개선 (튜닝) 방법

평가 결과를 통해 문제점을 파악했다면, 이제 품질을 개선해야 합니다.
하지만 LLM 시스템은 하나의 요소를 튜닝하면 다른 요소의 균형이 깨질 수 있어 신중하게 접근해야 합니다.

  • RAG 체인 변경: RAG 시스템을 구성하는 전체 워크플로우를 바꾸는 방법입니다.
    가장 큰 효과를 기대할 수 있지만, 동시에 가장 큰 부담을 주는 튜닝 방법입니다.
  • 임베딩 모델 변경: 데이터의 임베딩(Embedding)을 담당하는 모델을 바꾸는 방법입니다.
    모델을 바꾸면 모든 데이터를 다시 임베딩해야 하기 때문에 비용이 많이 듭니다.
  • 비임베딩 요소 강화: RAG 체인이나 임베딩 모델을 건드리지 않고 품질을 개선하는 방법입니다.
    • BM25 키워드 검색 병행: 임베딩 검색 외에 키워드 검색을 함께 사용하여 정확도를 높입니다.
    • 메타데이터 활용: 문서에 태그나 카테고리와 같은 메타데이터를 추가하여 검색 시 활용합니다.
  • 부분 요소 교체: 체인의 특정 컴포넌트(예: 리랭커)만 교체하는 방법입니다.
    전체 시스템에 큰 영향을 주지 않으면서 개선 효과를 확인할 수 있습니다.

5. 결론: 평가 없는 개발은 없다

RAG 시스템이든, 직접 파인튜닝한 모델이든, LLM을 활용한 모든 시스템은 평가 방법을 반드시 강구해야 합니다.
평가가 없으면 지금 내가 한 일이 시스템을 개선한 것인지, 오히려 망친 것인지 알 수 없습니다.

소프트웨어 개발에서 테스트 코드가 안전한 개발을 보장하듯이, LLM 개발에서는 복잡한 평가 지표와 자동화된 평가 시스템이 필수적입니다.
수많은 테스트 케이스를 사람이 만들기 어렵기 때문에, LLM 자체를 활용해 평가셋을 구축하고 성능을 측정하는 것이 현명한 접근법입니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글