작년에 GEval을 RAG정성평가 자동화에 활용했다. 테스트셋 자동화추출도 GPT로 진행했고, 검색/답변생성하는 부분에도 Gpt를 사용했다.
사용하면서 느낀건, 질문과 답변 자동화추출시 정답의 일관성도 보장되지 않을수 있어, 같은 질문에 정답답변도 3회이상 돌려서 응집도가 높은 정답답변 1개만 뽑는 과정이 필요하다는 것이다.
목표
- 정성평가를 자동화한다.
- 정성평가 항목
- 문장이 자연스러운가 = 0,1
- 후보군을 참고하여 만든 답변이 사실을 얼마나 참고했나
- gpt4가 만든 답변을 기준으로 두고 비교한다.
참고 논문
G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment
개인적인 평가지표 메트릭
- 정확성 (Accuracy)
- 대화 자연스러움 (Conversation Naturalness)
- 대화 유창성 (Fluency)
- 대화 흐름의 정의 (Conversation Flow Definition)
- 반응 시간 (Response Time)
유창성
### 프롬프트: 다음은 사용자와 챗봇 간의 대화입니다. 챗봇의 각 응답이 문법적으로 정확하고 자연스럽게 표현되는지 평가해 주세요. 각 응답에 대해 1점에서 5점까지 점수를 매겨 주십시오. - 1점: 응답이 매우 부자연스럽고 문법 오류가 많음. 문법적 오류가 대화 이해에 큰 방해가 됨. - 2점: 응답이 다소 부자연스럽고 문법 오류가 있음. 문법적 오류가 있지만 대화 이해는 가능함. - 3점: 응답이 보통 수준으로 자연스럽고 문법 오류가 적음. 약간의 문법적 오류가 있으나 대부분 자연스러움. - 4점: 응답이 대부분 자연스럽고 문법 오류가 거의 없음. 매우 자연스러우나 약간의 작은 오류가 있음. - 5점: 응답이 매우 자연스럽고 문법 오류가 전혀 없음. 완벽하게 자연스러움. ### 대화: 사용자: 오늘 날씨는 어때요? 챗봇: 오늘 날씨는 맑고 화창합니다. 기온은 25도입니다. 사용자: 내일 비가 올까요? 챗봇: 내일 비는 오지 않습니다. 하지만 구름이 많이 낄 예정입니다. ### 평가: - 첫 번째 응답: 5점 - 이유: 문법적으로 정확하고 매우 자연스러운 표현. - 두 번째 응답: 5점 - 이유: 문법적으로 정확하고 매우 자연스러운 표현. |
정확성
### 프롬프트: 다음은 사용자와 챗봇 간의 대화입니다. 챗봇의 각 응답이 사용자 질문에 대해 얼마나 정확하고 적절한 정보를 제공하는지 평가해 주세요. 각 응답에 대해 정답셋(ground truth)과 비교하여 1점에서 5점까지 점수를 매겨 주십시오. - 1점: 응답이 매우 부정확함. 제공된 정보가 완전히 틀리거나 질문과 전혀 관련이 없음. - 2점: 응답이 부정확함. 제공된 정보가 부분적으로 맞으나 중요한 부분이 틀리거나 누락됨. - 3점: 응답이 보통 수준으로 정확함. 제공된 정보가 대체로 맞으나 일부 작은 오류나 부족한 정보가 있음. - 4점: 응답이 대부분 정확함. 제공된 정보가 거의 완벽하며, 사소한 오류나 부족한 정보만 있음. - 5점: 응답이 매우 정확함. 제공된 정보가 완벽하고, 틀리거나 부족한 정보가 전혀 없음. ### 대화: 사용자: [사용자의 질문 또는 발언] 챗봇: [챗봇의 응답] 정답셋: [ground truth] ### 평가: - 첫 번째 응답: [점수] - 이유: [정확도 평가 이유] - 두 번째 응답: [점수] - 이유: [정확도 평가 이유] |
대화관련성
### 프롬프트: 다음은 사용자와 챗봇 간의 대화입니다. 챗봇의 각 응답이 사용자의 질문이나 발언과 얼마나 관련성이 있는지 평가해 주세요. 각 응답에 대해 1점에서 5점까지 점수를 매겨 주십시오. - 1점: 응답이 거의 관련이 없음. 응답이 질문과 전혀 맞지 않음. - 2점: 응답이 부분적으로 관련이 있음. 응답이 질문과 약간 연관되어 있으나 주요 요점을 놓침. - 3점: 응답이 보통 수준으로 관련이 있음. 응답이 질문에 대체로 맞지만 일부 중요한 정보가 빠져 있음. - 4점: 응답이 대부분 관련이 있음. 응답이 질문에 거의 완벽히 맞음, 하지만 약간의 부정확함이 있음. - 5점: 응답이 매우 관련이 있음. 응답이 질문에 정확히 맞으며 모든 중요한 정보를 포함함. ### 대화: 사용자: [사용자의 질문 또는 발언] 챗봇: [챗봇의 응답] 사용자: [다음 사용자 발언] 챗봇: [다음 챗봇 응답] ... ### 평가: - 첫 번째 응답: [점수] - 두 번째 응답: [점수] |
일관성
### 프롬프트: 다음은 사용자와 챗봇 간의 대화입니다. 챗봇의 각 응답이 논리적이고 일관성이 있는지 평가해 주세요. 각 응답에 대해 1점에서 5점까지 점수를 매겨 주십시오. - 1점: 응답이 매우 비논리적이고 일관성이 없음. 논리적 연결이 전혀 없음. - 2점: 응답이 부분적으로 논리적임. 논리적 연결이 있지만 많은 부분에서 일관성이 없음. - 3점: 응답이 보통 수준으로 일관성 있음. 논리적 연결이 대부분 맞지만 일부 비논리적인 부분이 있음. - 4점: 응답이 대부분 일관성 있음. 논리적 연결이 거의 완벽함, 하지만 약간의 비일관성 존재. - 5점: 응답이 매우 일관성 있음. 논리적 연결이 완벽하며, 일관성에 있어 결함이 없음. ### 대화: 사용자: [사용자의 질문 또는 발언] 챗봇: [챗봇의 응답] 사용자: [다음 사용자 발언] 챗봇: [다음 챗봇 응답] ... ### 평가: - 첫 번째 응답: [점수] - 두 번째 응답: [점수] |
대화플로우
### 프롬프트: 다음은 사용자와 챗봇 간의 대화입니다. 챗봇의 대화 흐름이 얼마나 잘 정의되어 있는지를 평가해 주세요. 각 대화 흐름에 대해 1점에서 5점까지 점수를 매겨 주십시오. - 1점: 대화 흐름이 거의 정의되지 않음. 챗봇의 응답이 일관성이 없고 사용자 의도를 잘못 이해함. - 2점: 대화 흐름이 부분적으로 정의됨. 챗봇의 응답이 간혹 일관성이 없으며, 일부 사용자 의도를 잘못 이해함. - 3점: 대화 흐름이 보통 수준으로 정의됨. 챗봇의 응답이 대체로 일관성이 있지만 가끔 오해가 발생함. - 4점: 대화 흐름이 잘 정의됨. 챗봇의 응답이 대부분 일관성 있고 사용자 의도를 잘 이해함. - 5점: 대화 흐름이 매우 잘 정의됨. 챗봇의 응답이 항상 일관성 있으며 사용자 의도를 완벽하게 이해함. ### 대화: 사용자: [사용자의 질문 또는 발언] 챗봇: [챗봇의 응답] 사용자: [다음 사용자 발언] 챗봇: [다음 챗봇 응답] ... ### 평가: - 첫 번째 대화 흐름: [점수] - 이유: [평가 이유] - 두 번째 대화 흐름: [점수] - 이유: [평가 이유] |
프롬프트와 GPT응답
아래 프롬프트는 직접 기술한 프롬프트입니다.
코드 참고 https://github.daumkakao.com/Bot/faq-proto/blob/main/service/openaigpt.py#L28
- 점수만 응답하는 프롬프트와 응답
-
[{'role': 'system', 'content': '당신은 주관식 문제에 정답을 채점합니다. [본문]을 참고하여 [질문]에 대답을 한 [학생답변]을 채점합니다. 채점항목을 기준으로 점수를 매기고, 총 합을 알려주는 AI선생님 입니다.\n-[본문]:김순신은 서울시 강남구 대치동에서 태어났습니다. 순신은 여성이며, 어린아이입니다. 2023년 9월16일 생입니다. 현재는 경기도 성남시 판교에서 살고 있습니다.\n-[질문]:김순신은 어디에서 태어났어?\n-[학생답변]:김순신은 서울시 강남구 대치동에서 태어났습니다.'}, {'role': 'user', 'content': "[본문]을 기반으로 [정답]을 작성하되 답을 찾을 수 없는 경우 '정보 없음'라고 대답해. 다음 [질문]을 읽고 [정답]을 구합니다.\n[본문]:김순신은 서울시 강남구 대치동에서 태어났습니다. 순신은 여성이며, 어린아이입니다. 2023년 9월16일 생입니다. 현재는 경기도 성남시 판교에서 살고 있습니다.\n[질문]:김순신은 어디에서 태어났어?"}, {'role': 'user', 'content': '[채점항목]\n[학생답변]을 아래 기준대로 점수를 매기고, 합계를 내어 최종 점수를 구합니다. 채점 총합은 최대 8점이고, 최소 0점 입니다.\n-당신이 푼 [정답]과 매우 유사하면: 4점, 유사하면: 1점, 그렇지 못하면: 0점\n-문장이 자연스러우면: 1점, 그렇지 못하면: 0점\n-[학생답변]이 본문 내용에 핵심부분이 포함되어 있으면: 3점, 핵심은 아니지만 주요한 내용이 포함되어 있으면: 2점, 일부만 포함되어 있으면: 1점, 전혀 다른 내용이면 이면: 0점'}, {'role': 'user', 'content': '[학생답변]은 총 몇점인가요? 총합은 숫자만 출력해주세요.'}]
- gpt4가 만든 답변과, 채점한 과정을 출력하는 프롬프트와 응답
-
[{'role': 'system', 'content': '당신은 주관식 문제에 정답을 채점합니다. [본문]을 참고하여 [질문]에 대답을 한 [학생답변]을 채점합니다. 채점항목을 기준으로 점수를 매기고, 총 합을 알려주는 AI선생님 입니다.\n-[본문]:김순신은 서울시 강남구 대치동에서 태어났습니다. 순신은 여성이며, 어린아이입니다. 2023년 9월16일 생입니다. 현재는 경기도 성남시 판교에서 살고 있습니다.\n-[질문]:김순신은 어디에서 태어났어?\n-[학생답변]:김순신은 서울시 강남구 대치동에서 태어났습니다.'}, {'role': 'user', 'content': "[본문]을 기반으로 [정답]을 작성하되 답을 찾을 수 없는 경우 '정보 없음'라고 대답해. 다음 [질문]을 읽고 [정답]을 구합니다.\n[본문]:김순신은 서울시 강남구 대치동에서 태어났습니다. 순신은 여성이며, 어린아이입니다. 2023년 9월16일 생입니다. 현재는 경기도 성남시 판교에서 살고 있습니다.\n[질문]:김순신은 어디에서 태어났어?"}, {'role': 'user', 'content': '[채점항목]\n[학생답변]을 아래 기준대로 점수를 매기고, 합계를 내어 최종 점수를 구합니다. 채점 총합은 최대 8점이고, 최소 0점 입니다.\n-당신이 푼 [정답]과 매우 유사하면: 4점, 유사하면: 1점, 그렇지 못하면: 0점\n-문장이 자연스러우면: 1점, 그렇지 못하면: 0점\n-[학생답변]이 본문 내용에 핵심부분이 포함되어 있으면: 3점, 핵심은 아니지만 주요한 내용이 포함되어 있으면: 2점, 일부만 포함되어 있으면: 1점, 전혀 다른 내용이면 이면: 0점'}, {'role': 'user', 'content': '[학생답변]은 총 몇점인가요? [정답]도 출력하고, 총합을 평가한 이유를 간략하게 설명하고, 총합은 숫자만 출력해주세요.'}]
[정답]: 김순신은 서울시 강남구 대치동에서 태어났습니다.
[학생답변]: 김순신은 서울시 강남구 대치동에서 태어났습니다.- [정답]과 매우 유사하므로: 4점
- 문장이 자연스러움: 1점
- 본문 내용에 핵심부분이 포함되어 있음: 3점따라서 학생의 답변은 총 8점입니다.
-
'ML&AI' 카테고리의 다른 글
사용자 행동데이터 RAG - 1 (0) | 2024.06.30 |
---|---|
Autoregressive Model Beats Diffusion: Llama forScalable Image Generation (0) | 2024.06.23 |
AI 사용 환경에서 데이터를 보호하는 법을 주제로, Copilot for Microsoft 365를 위한 Microsoft Purview제품 소개 (0) | 2024.03.27 |
The Claude 3 Model Family: Opus, Sonnet, Haiku (0) | 2024.03.25 |
효과적으로 문장을 분리하는 방법론 (0) | 2024.03.23 |