주요 컨텐츠로 이동

RAG 애플리케이션의 LLM 평가를 위한 모범 사례

데이터브릭스 문서 Bot 구축 사례
Quinn Leng
케이시 울렌후스
Alkis Polyzotis
이 포스트 공유하기

챗봇은 대규모 언어 모델(LLM)의 강력한 채팅 및 추론 기능을 활용하기 위해 가장 널리 채택된 사용 사례입니다. 검색 증강 생성(RAG) 아키텍처는 지식 기반(벡터 스토어를 통한)과 생성 모델(예: GPT-3.5 및 GPT-4)의 이점을 결합하여 환각을 줄이고 최신 정보를 유지하며 도메인별 지식을 활용할 수 있기 때문에 챗봇 개발의 업계 표준으로 빠르게 자리 잡고 있습니다. 그러나 챗봇 응답의 품질을 평가하는 것은 오늘날에도 여전히 해결되지 않은 문제로 남아 있습니다. 업계 표준이 정의되어 있지 않기 때문에 조직은 시간이 많이 걸리고 확장하기 어려운 인적 등급 지정(라벨링)에 의존하고 있습니다.

이론을 실무에 적용하여 LLM 자동 평가에 대한 모범 사례를 구축함으로써 RAG 애플리케이션을 프로덕션 환경에 빠르고 자신 있게 배포할 수 있도록 지원합니다. 이 블로그는 LLM 평가에 대한 학습을 제공하기 위해 데이터브릭스에서 진행 중인 리서치 시리즈 중 첫 번째 글입니다. 이 글의 모든 리서치는 데이터브릭스의 수석 소프트웨어 엔지니어이자 데이터브릭스 문서 AI 어시스턴트를 개발한 Quinn Leng이 수행했습니다.

자동 평가의 실제 어려운 점들

최근 LLM 커뮤니티에서는 자동화된 평가를 위해 "judge로서의 LLM"을 사용하는 방법을 모색하고 있으며, 많은 사람들이 GPT-4와 같은 강력한 LLM을 사용하여 LLM 결과물에 대한 평가를 수행하고 있습니다. lmsys 그룹의 연구 논문은 쓰기, 수학, 세계 지식 분야의 과제에 대한 판정자로 다양한 LLM(GPT-4, ClaudeV1, GPT-3.5)을 사용하는 것의 타당성과 장단점을 살펴봅니다.

이 모든 훌륭한 연구에도 불구하고 LLM 심사위원을 실제로 적용하는 방법에 대해서는 여전히 답이 없는 질문이 많습니다:

  • 인간 채점과의 일치: 특히 문서-Q&A 챗봇의 경우, 답변의 정확성, 가독성 및 이해도 측면에서 LLM 심사위원의 채점이 실제 사람의 선호도를 얼마나 잘 반영하였는지.
  • 예시를 통한 정확도: 채점자에게 몇 가지 채점 예시를 제공하면 어떤 효과가 있으며, 다양한 지표에서 채점자의 신뢰도와 재사용성을 얼마나 높일 수 있는지.
  • 적절한 채점 척도: 프레임워크마다 서로 다른 채점 척도를 사용하는 경우(예: AzureML은 0~100을 사용하는 반면, 랭체인은 이진 척도를 사용함) 어떤 채점 척도를 권장하는지.
  • 사용 사례 전반에서의 적용 가능성: 동일한 평가 지표(예: 정확도)의 경우, 다른 사용 사례(예: 캐주얼 채팅, 콘텐츠 요약, 검색 증강 생성)에서 평가 지표를 어느 정도까지 재사용할 수 있는지.

RAG 애플리케이션을 위한 효과적인 자동 평가 적용

데이터브릭스의 자체 챗봇 애플리케이션의 맥락에서 위에 설명한 질문에 대한 가능한 옵션을 살펴봤습니다. 이러한 결과는 일반화할 수 있으며, 따라서 귀사의 팀이 더 낮은 비용과 더 빠른 속도로 RAG 기반 챗봇을 효과적으로 평가하는 데 도움이 될 수 있다고 믿습니다:

  • Judge로서의 LLM은 80% 이상의 판정에서 인간 채점과 일치했습니다. 문서 기반 챗봇 평가에 판사 역할을 하는 LLM을 사용한 결과, 80% 이상의 판정에서 정확한 점수가 일치했고 95% 이상의 판정에서 1점 차이(0~3점 척도 사용)를 보이며 인간 judge만큼 효과적이었습니다.
  • 예제와 함께 GPT-3.5를 사용하여 비용을 절감하세요. 각 채점 점수에 대한 예시를 제공하면 GPT-3.5를 LLM 채점 도구로 사용할 수 있습니다. 컨텍스트 크기 제한으로 인해 정확도가 낮은 채점 척도를 사용하는 것이 실용적입니다. 예시와 함께 GPT-3.5를 GPT-4 대신 사용하면 LLM 판정 비용을 10배 절감하고 속도를 3배 이상 향상시킬 수 있습니다.
  • 더 쉬운 해석을 위해 정밀도가 낮은 채점 척도를 사용하세요. 0, 1, 2, 3 또는 이진(0, 1)과 같은 낮은 정밀도의 채점 점수는 0~10.0 또는 0~100.0과 같은 높은 정밀도의 채점 척도에 비해 정확도를 크게 유지할 수 있으며, 채점 기준을 인간 annotator와 LLM judge 모두에게 훨씬 쉽게 제공할 수 있다는 것을 발견했습니다. 또한 낮은 정밀도 척도를 사용하면 서로 다른 LLM judge 간에 채점 척도의 일관성을 유지할 수 있습니다(예: GPT-4와 claude2 사이).
  • RAG 애플리케이션에는 자체 벤치마크가 필요합니다. 어떤 모델이 공개된 전문 벤치마크(예: 캐주얼 채팅, 수학 또는 창작 글쓰기)에서는 좋은 성능을 보일 수 있지만 다른 작업(예: 주어진 맥락에서 질문에 답하기)에서는 좋은 성능을 보장하지 않습니다. 벤치마크는 사용 사례가 일치하는 경우에만 사용해야 합니다. 즉, RAG 애플리케이션은 RAG 벤치마크로만 평가해야 합니다.

저희의 연구에 따르면, LLM judge 이용할 때는 다음과 같은 절차를 따르는 것이 좋습니다:

  1. 1~5점 척도 사용
  2. 채점 규칙을 이해하기 위해 예제 없이 GPT-4를 LLM judge로 사용하세요.
  3. 점수당 하나의 예시를 사용하여 LLM judge를 GPT-3.5로 전환하세요.

Best practice 수립을 위한 방법론

이 글의 나머지 부분에서는 이러한 모범 사례를 만들기 위해 수행한 일련의 실험에 대해 설명합니다.

실험 설정

experiment-setup

 

실험은 세 가지 단계로 구성되었습니다: 

 

  1. 평가 데이터 세트 생성: 100개의 질문과 데이터브릭스 문서의 컨텍스트로 데이터세트를 생성했습니다. 컨텍스트는 질문과 관련된 문서(청크)를 나타냅니다. 

    chunks

  2. 답안지를 생성합니다: 평가 데이터 세트를 사용하여 다양한 언어 모델에 답변을 생성하도록 유도하고 질문-문맥-답변 쌍을 '답변 시트'라는 데이터 세트에 저장했습니다. 이 조사에서는 GPT-4, GPT-3.5, Claude-v1, Llama2-70b-chat, Vicuna-33b, mpt-30b-chat을 사용했습니다.
  3. 성적을 생성합니다: 답안지가 주어지면 다양한 대규모 언어 모델(LLM)을 사용하여 성적과 성적에 대한 추론을 생성했습니다. 성적은 정답률(가중치: 60%), 이해도(가중치: 20%), 가독성(가중치: 20%)의 종합 점수입니다. 저희는 생성된 답안에서 정답률에 대한 선호도를 반영하기 위해 이 가중치 체계를 선택했습니다. 다른 애플리케이션에서는 이러한 가중치를 다르게 조정할 수 있지만, 정답률이 여전히 지배적인 요소로 남을 것으로 예상합니다.

또한 위치 편향을 방지하고 신뢰도를 개선하기 위해 다음과 같은 기법을 사용했습니다:

  • 재현성을 보장하기 위한 낮은 tempreature 설정(temperature 0.1).
  • 쌍별 비교 대신 단답형 채점.
  • 최종 점수를 부여하기 전에 LLM이 채점 과정에 대해 추론할 수 있도록 생각의 사슬(Chain of thoughts)을 연결합니다.
  • 각 요소(정확성, 이해도, 가독성)의 각 점수 값에 대한 채점 기준에 몇 가지 예시가 제공되는 Few-shot 생성.

실험 1: 인간 채점과의 조율

인간 annotator와 LLM judge 간의 일치 수준을 확인하기 위해 gpt-3.5-turbo와 vicuna-33b의 답안지(채점 척도 0-3)를 라벨링 회사에 보내 인간 라벨을 수집한 다음 그 결과를 GPT-4의 채점 결과와 비교했습니다. 아래는 그 결과입니다:

  • 인간 judge과 GPT-4 judge는 정확성 및 가독성 점수에 대해 80% 이상 일치할 수 있습니다. 점수 차이가 1점보다 작거나 같아야 한다는 요건을 낮추면 일치도는 95% 이상에 도달할 수 있습니다.
    humanvs3.5 humanvsvicuna

포괄성 지표는 정확성이나 가독성과 같은 지표보다 '포괄적'이라는 표현이 더 주관적으로 느껴진다는 비즈니스 이해관계자들의 의견과 일치하지 않는 부분이 있습니다.

실험 2: 예제를 통한 정확성

프롬프트를 사용하여 LLM 심사 위원에게 답변의 유용성, 관련성, 정확성, 깊이, 창의성 및 세부 수준을 기준으로 평가하도록 지시합니다. 그러나 이 논문에서는 채점 기준에 대한 구체적인 내용은 공유하지 않습니다. 연구 결과, 예를 들어 최종 점수에 큰 영향을 미치는 요인은 여러 가지가 있는 것으로 나타났습니다: 

  • 다양한 요소의 중요성: 유용성, 관련성, 정확성, 깊이, 창의성
  • Helpfulness와 같은 요소의 해석이 모호함
  • 서로 다른 요소가 서로 충돌하는 경우, 답변이 도움이 되지만 정확하지 않은 경우

저희는 다음과 같은 방법으로 LLM 심사위원에게 주어진 채점 척도에 대한 지침을 제공하기 위한 기준을 개발했습니다:

  1. 원본 프롬프트: 아래는 lmsys 문서에 사용된 원본 프롬프트입니다:

Please act as an impartial judge and evaluate the quality of the response provided by an AI assistant to the user question displayed below. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of the response. Begin your evaluation by providing a short explanation. Be as objective as possible. After providing your explanation, you must rate the response on a scale of 1 to 10 by strictly following this format
 

저희는 정확성, 이해도 및 가독성에 대한 지표를 표시하고, 각 점수를 부여하기 전에 심사위원에게 한 줄의 근거를 제시하도록 유도하여 연쇄적 추론의 이점을 활용하도록 원래의 lmsys 종이 프롬프트를 수정했습니다. 아래는 예시를 제공하지 않는 제로 샷 버전의 프롬프트와 각 점수에 대해 하나의 예시를 제공하는 소수 샷 버전의 프롬프트입니다. 그런 다음 동일한 답안지를 입력으로 사용하고 두 가지 프롬프트 유형에서 채점된 결과를 비교했습니다.

  1. Zero Shot 학습: LLM 심사위원에게 정확성, 이해도, 가독성에 대한 메트릭을 제시하고 각 점수에 대해 한 줄의 근거를 제시하도록 요구합니다.

Please act as an impartial judge and evaluate the quality of the provided answer which attempts to answer the provided question based on a provided context.

 

  You'll be given a function grading_function which you'll call for each provided context, question and answer to submit your reasoning and score for the correctness, comprehensiveness and readability of the answer. 

  1. Few Shot 학습:  Zero Shot 프롬프트를 조정하여 척도의 각 점수에 대한 명시적인 예를 제공했습니다. 새로운 프롬프트:

Please act as an impartial judge and evaluate the quality of the provided answer which attempts to answer the provided question based on a provided context.

 

  You'll be given a function grading_function which you'll call for each provided context, question and answer to submit your reasoning and score for the correctness, comprehensiveness and readability of the answer. 

  

  Below is your grading rubric: 

 

- Correctness: If the answer correctly answer the question, below are the details for different scores:

  - Score 0: the answer is completely incorrect, doesn’t mention anything about the question or is completely contrary to the correct answer.

      - For example, when asked “How to terminate a databricks cluster”, the answer is empty string, or content that’s completely irrelevant, or sorry I don’t know the answer.

  - Score 1: the answer provides some relevance to the question and answers one aspect of the question correctly.

      - Example:

          - Question: How to terminate a databricks cluster

          - Answer: Databricks cluster is a cloud-based computing environment that allows users to process big data and run distributed data processing tasks efficiently.

          - Or answer:  In the Databricks workspace, navigate to the "Clusters" tab. And then this is a hard question that I need to think more about it

  - Score 2: the answer mostly answer the question but is missing or hallucinating on one critical aspect.

      - Example:

          - Question: How to terminate a databricks cluster”

          - Answer: “In the Databricks workspace, navigate to the "Clusters" tab.

          Find the cluster you want to terminate from the list of active clusters.

          And then you’ll find a button to terminate all clusters at once”

  - Score 3: the answer correctly answer the question and not missing any major aspect

      - Example:

          - Question: How to terminate a databricks cluster

          - Answer: In the Databricks workspace, navigate to the "Clusters" tab.

          Find the cluster you want to terminate from the list of active clusters.

          Click on the down-arrow next to the cluster name to open the cluster details.

          Click on the "Terminate" button. A confirmation dialog will appear. Click "Terminate" again to confirm the action.”

- Comprehensiveness: How comprehensive is the answer, does it fully answer all aspects of the question and provide comprehensive explanation and other necessary information. Below are the details for different scores:

  - Score 0: typically if the answer is completely incorrect, then the comprehensiveness is also zero score.

  - Score 1: if the answer is correct but too short to fully answer the question, then we can give score 1 for comprehensiveness.

      - Example:

          - Question: How to use databricks API to create a cluster?

          - Answer: First, you will need a Databricks access token with the appropriate permissions. You can generate this token through the Databricks UI under the 'User Settings' option. And then (the rest is missing)

  - Score 2: the answer is correct and roughly answer the main aspects of the question, but it’s missing description about details. Or is completely missing details about one minor aspect.

      - Example:

          - Question: How to use databricks API to create a cluster?

          - Answer: You will need a Databricks access token with the appropriate permissions. Then you’ll need to set up the request URL, then you can make the HTTP Request. Then you can handle the request response.

      - Example:

          - Question: How to use databricks API to create a cluster?

          - Answer: You will need a Databricks access token with the appropriate permissions. Then you’ll need to set up the request URL, then you can make the HTTP Request. Then you can handle the request response.

  - Score 3: the answer is correct, and covers all the main aspects of the question

- Readability: How readable is the answer, does it have redundant information or incomplete information that hurts the readability of the answer.

  - Score 0: the answer is completely unreadable, e.g. fully of symbols that’s hard to read; e.g. keeps repeating the words that it’s very hard to understand the meaning of the paragraph. No meaningful information can be extracted from the answer.

  - Score 1: the answer is slightly readable, there are irrelevant symbols or repeated words, but it can roughly form a meaningful sentence that cover some aspects of the answer.

      - Example:

          - Question: How to use databricks API to create a cluster?

          - Answer: You you  you  you  you  you  will need a Databricks access token with the appropriate permissions. And then then you’ll need to set up the request URL, then you can make the HTTP Request. Then Then Then Then Then Then Then Then Then

  - Score 2: the answer is correct and mostly readable, but there is one obvious piece that’s affecting the readability (mentioning of irrelevant pieces, repeated words)

      - Example:

          - Question: How to terminate a databricks cluster

          - Answer: In the Databricks workspace, navigate to the "Clusters" tab.

          Find the cluster you want to terminate from the list of active clusters.

          Click on the down-arrow next to the cluster name to open the cluster details.

          Click on the "Terminate" button…………………………………..

          A confirmation dialog will appear. Click "Terminate" again to confirm the action.

  - Score 3: the answer is correct and reader friendly, no obvious piece that affect readability.

 

- Then final rating:

    - Ratio: 60% correctness + 20% comprehensiveness + 20% readability

 

이 실험을 통해 몇 가지를 배웠습니다:

  • GPT-4에 Few Shot 프롬프트를 사용해도 결과의 일관성에는 뚜렷한 차이가 없었습니다. 예시와 함께 상세한 채점 기준을 포함했을 때 다른 LLM 모델에서 GPT-4의 채점 결과가 눈에 띄게 개선되는 것을 볼 수 없었습니다. 흥미롭게도 점수 범위에는 약간의 차이가 있었습니다.

gpt4zeroshot

gpt4fewshot

  • GPT-3.5-turbo-16k에 몇 가지 예제를 포함하면 점수의 일관성이 크게 향상되고 결과를 유용하게 사용할 수 있습니다. 상세한 채점 기준/예시를 포함하면 GPT-3.5(오른쪽 차트)의 채점 결과가 매우 뚜렷하게 개선됨 실제 평균 점수 값은 GPT-4와 GPT-3.5(3.0점 대 2.6점)가 약간 다르지만 순위와 정확도는 상당히 일관되게 유지됩니다.
  • 반대로 (왼쪽 스크린샷) 채점 루브릭 없이 GPT-3.5를 사용하면 결과가 매우 일관되지 않고 완전히 사용할 수 없었습니다.
  • 프롬프트가 4k 토큰보다 클 수 있으므로 GPT-3.5 터보 대신 우리는 GPT-3.5 터보-16k를 사용했습니다.

gpt35zero

gpt35fewshot

실험 3: 적절한 성적 척도

LLM-as-judge 논문에서는 채점 척도에 정수가 아닌 0~10 척도(즉, 부동 소수점)를 사용합니다. 즉, 최종 점수에 고정밀 기준을 사용합니다. 이러한 고정밀 척도는 다음과 같은 다운스트림 문제를 유발하는 것으로 나타났습니다:

  • 일관성: 평가자(인간과 LLM 모두)는 높은 정밀도로 채점할 때 동일한 점수에 대해 동일한 기준을 적용하기 위해 노력했습니다. 그 결과, 낮은 정밀도 척도에서 높은 정밀도 척도로 이동할 경우 평가자 간에 채점 점수의 일관성이 떨어지는 것으로 나타났습니다.
  • 설명력: 또한 LLM이 판단한 결과를 사람이 판단한 결과와 교차 검증하려면 답안을 채점하는 방법에 대한 지침을 제공해야 합니다. 고정밀 채점 척도에서 각 '점수'에 대한 정확한 지침을 제공하는 것은 매우 어렵습니다. 예를 들어, 5.1점인 답안과 5.6점인 답안의 좋은 예는 무엇인가요?

우리는 사용하기에 '가장 좋은' 채점 척도에 대한 지침을 제공하기 위해 다양한 저정확도 채점 척도를 실험했으며, 최종적으로 0-3 또는 0-4(리커트 척도를 고수하려는 경우)의 정수 척도를 권장합니다. 우리는 0-10, 1-5, 0-3, 0-1을 시도해 보았습니다:

  • 이진 등급은 '사용성' 또는 '좋음/나쁨'과 같은 간단한 지표에 사용할 수 있습니다.
  • 0~10점과 같은 척도는 모든 점수를 구분하는 기준을 제시하기 어렵습니다.

gpt4grading

gpt35grading

위의 plot에서 볼 수 있듯이 GPT-4와 GPT-3.5는 서로 다른 저정확도 채점 척도를 사용하여 일관된 결과 순위를 유지할 수 있으므로 0~3 또는 1~5와 같이 낮은 채점 척도를 사용하면 정밀도와 설명 가능성의 균형을 맞출 수 있습니다).

따라서 0-3 또는 1-5를 채점 척도로 권장하여 사람의 라벨과 쉽게 일치시키고, 채점 기준에 대해 추론하고, 범위 내 각 점수에 대한 예시를 제공합니다.

실험 4: 사용 사례 전반의 적용 가능성

LLM-as-judge 논문은 LLM과 인간의 판단 모두 Vicuna-13B 모델을 GPT-3.5의 근접한 경쟁자로 평가하고 있음을 보여줍니다:

chatbotarena

(이 그림은 LLM-as-judge 논문의 그림 4에서 가져온 것입니다: https://arxiv.org/pdf/2306.05685.pdf )

 

그러나 문서 Q&A 사용 사례에 대한 모델 세트를 벤치마킹한 결과, 훨씬 더 큰 규모의 Vicuna-33B 모델조차도 문맥에 따라 질문에 답변할 때 GPT-3.5보다 성능이 눈에 띄게 떨어지는 것으로 나타났습니다. 이러한 결과는 실험 1에서 언급한 바와 같이 GPT-4, GPT-3.5 및 인간 심사자들에 의해서도 확인되었으며, 이들은 모두 Vicuna-33B가 GPT-3.5보다 성능이 더 나쁘다는 데 동의했습니다.

gpt4grading

논문에서 제안한 벤치마크 데이터 세트를 자세히 살펴본 결과, 3가지 작업 범주(쓰기, 수학, 지식)는 문맥에 따라 답변을 합성하는 모델의 능력을 직접적으로 반영하거나 기여하지 않는다는 사실을 발견했습니다. 대신, 직관적으로 문서 Q&A 사용 사례에는 독해력 및 후속 교육에 대한 벤치마크가 필요합니다. 따라서 평가 결과는 사용 사례 간에 이전할 수 없으며, 모델이 고객의 요구를 얼마나 잘 충족시킬 수 있는지 제대로 평가하려면 사용 사례별 벤치마크를 구축해야 합니다.

MLflow를 사용하여 best practice로의 활용

위의 실험을 통해 다양한 요소가 챗봇의 평가에 얼마나 큰 영향을 미칠 수 있는지 살펴보고, 문서 Q&A 사용 사례에 대한 사람의 선호도를 크게 반영할 수 있는 판단자로서의 LLM을 확인했습니다. 데이터브릭스에서는 이러한 결과를 바탕으로 팀이 LLM 애플리케이션을 효과적으로 평가할 수 있도록 MLflow 평가 API를 발전시키고 있습니다. MLflow 2.4에서는 다양한 모델의 텍스트 출력을 나란히 비교할 수 있는 LLM용 평가 API를 도입했고, MLflow 2.6에서는 독성 및 난해성과 같은 평가를 위한 LLM 기반 메트릭을 도입했으며, 조만간 판사로서의 LLM을 지원하기 위해 노력 중입니다!

그 동안 조사에 참고한 리소스 목록을 아래에 정리해 두었습니다:

  • Doc_qa repository
    • 실험에 사용한 코드와 데이터
  • LLM-as-Judge Research paper from lmsys group 
    • 이 논문은 캐주얼 채팅 사용 사례의 판독기로 LLM을 사용하는 최초의 연구로, 쓰기, 수학, 세계 지식 분야의 과제에 대한 판독기로 LLM(GPT-4, ClaudeV1, GPT-3.5)을 사용하는 것에 대한 타당성과 장단점을 광범위하게 탐색했습니다.
Databricks 무료로 시작하기

관련 포스트

MLflow AI Gateway 및 Llama2를 사용하여 생성형 AI 앱 빌드하기

고객 지원 봇, 내부 지식 그래프 또는 Q&A 시스템을 구축하기 위해 고객은 종종 사전 학습된 모델과 독점 데이터를 함께 활용하는 검색 증강 생성(RAG)...

Announcing the MLflow AI Gateway

If you're an existing Databricks user, fill out the signup form and contact your Databricks representative to enroll in the AI Gateway Private...

The Simplification of AI Data

데이터 과학자 팀에게 고품질의 AI 모델을 구축하는 데 있어 가장 큰 어려움이 무엇인지 물으면 거의 만장일치로 데이터에 액세스하고 관리하는 것이라고 말할 것입니다. 수년...
모든 엔지니어링 블로그 포스트 보기