본문 바로가기
AI/LLM

[한국어 LLM 벤치마크] Korean MT-bench score 계산하기 (1)

by didi0di 2024. 4. 8.
728x90

 

한국어 LLM 리더보드인 호랑이에 대해 리뷰를 진행해보고,

외부 오픈소스 모델 및 내부 사내 자체 개발 모델에 대해 평가를 진행해보기로 결정! 

 

호랑이 한국어 LLM 리더보드에 대한 소개는 아래 글 참고.

[이전글] 호랑이(Horangi) - 한국어 LLM 리더보드 리뷰

 

호랑이(Horangi) - 한국어 LLM 리더보드 리뷰

업스테이지가 운영중인 허깅페이스 Open Ko LLM 리더보드에 이어, 새로운 한국어 LLM 리더보드가 등장했다. 이름은 호랑이 (Horangi), 아래 링크에 리더보드에 대한 자세한 설명이 나와있으니 참고. Hor

didi-universe.tistory.com

 

 

Korean MT-Bench score 구현

 

우선 2가지 데이터셋 중에서 그전부터 봐두던 MT-bench를 먼저 돌려보고 싶었다. 

Korean MT-bech score 계산은 여기 github을 참고하면 되는데, 자신의 모델에 따라 몇가지 코드 수정이 필요하다.

 

 

FastChat/fastchat/llm_judge at korean · wandb/FastChat

An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena. - wandb/FastChat

github.com

 

오리지날 MT-bench github은 여기 

 

FastChat/fastchat/llm_judge at main · lm-sys/FastChat

An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena. - lm-sys/FastChat

github.com

 

참고로 패키지 설치는 오리지날에 적힌 내용이 좀 더 정확하다. 

 

 

먼저 필요한 라이브러리를 설치해준다.

git clone -b korean https://github.com/wandb/FastChat
cd FastChat
pip install -e ".[model_worker,llm_judge]"

 

 korean MT-bench 깃헙에는 이렇게 나와있지만, 실제로 돌려보면 에러가 날 것 이다. ㅎ

 

그럴땐 아래처럼 하면 에러없이 설치가 진행된다. (FastChat 공식 깃헙을 뒤져 찾아냈다)

git clone -b korean https://github.com/wandb/FastChat
cd FastChat
pip3 install --upgrade pip  # enable PEP 660 support
pip3 install -e ".[model_worker,llm_judge]"

 

 

자 다음..

본격적으로 MT-Bench score를 계산하기 위해서는 다음 3가지 step을 거쳐야 한다.

1. 성능 평가 대상 LLM으로 벤치마크 데이터셋의 question에 대해 answer를 생성한다.
2. GPT-4를 이용해 LLM이 생성한 answer를 평가한다. 
3. 각 생성문에 대한 score를 종합하여 최종 MT-bench score를 계산한다.  

 

 

이를 cmd에서 실행하는 순서는 다음과 같다.

cd fastchat/llm_judge

# Step 1. Generate model answers to MT-bench questions
# This will generate `data/korean_mt_bench/model_answer/eeve-korean-instruct-10.8B-v1.0.jsonl`
python gen_model_answer.py --bench-name korean_mt_bench --max-turns 1 --model-path stabilityai/eeve-korean-instruct-10.8b-v1.0.jsonl --model-id eeve-korean-instruct-10.8b-v1.0.jsonl

# Step 2. Generate GPT-4 judgments
# This will generate `data/korean_mt_bench/model_judgment/gpt-4_single.jsonl`
OPENAI_API_KEY=<API-KEY> python gen_judgment.py --bench-name korean_mt_bench --model-list eeve-korean-instruct-10.8b-v1.0.jsonl --judge-file data/judge_ja_prompts.jsonl
#### --judge-file에 예시에 나온 data/judge_ja_prompts.json가 아닌 data/judge_ko_prompts.json를 넣어줘야 함.

# Step 3. Show MT-bench scores
python show_result.py --bench-name korean_mt_bench

 

 영어/일어로 되어있는 MT-bench 데이터셋을 한국어로 번역했으며, 

평가 prompt도 마찬가지로 한국어로 번역되어 있다. korean prompt jsonl 파일은 여기 있으니 참고.

 

참고로 이거 나중에 평가할때 인자로 넣어줘야 한다. 이거 찾느라 여기저기 뒤졌다.
-> 왜냐... 위의 github 예시에 보면, step2에 벤치마크도 korean, 모델도 한국어 LLM인 EEVE로 되어있으나,
prompt를 일어 버전인 data/judge_ja_prompts.json 으로 넣어주고 있다.... 오류인듯
  

 

따라서 --judge-file에 예시에 나온 data/judge_ja_prompts.json가 아닌 data/judge_ko_prompts.json를 넣어줘야 한다.

 

 

한국어 평가 프롬프트는 다음 4가지 task로 구분되어 있다.

{"name": "single-v1", "type": "single", "category": "general", "output_format": "[[평가]]", "description": "Korean prompt for general korean questions", "system_prompt": "당신은 유익한 조수입니다.", "prompt_template": "[지시]\n공평한 판단자로 행동하고 아래에 표시되는 사용자의 질문에 대한 AI 어시스턴트 응답의 품질을 평가합니다. 귀하의 평가는 응답의 유용성, 관련성, 정확성, 깊이, 창의성, 상세도 등의 요소를 고려해야 합니다. AI 어시스턴트의 응답 언어는 사용자가 사용하는 언어와 일치해야 하며, 그렇지 않으면 감점되어야 합니다. 평가는 짧은 설명으로 시작하십시오. 가능한 한 객관적인 것. 설명을 제공한 후 \"[[평가]]\" 형식에 엄격히 따라 1에서 10까지의 스케일로 응답을 평가해야 합니다. (예시: \"평가: [[5]]\"). \n\n[질문]\n{question}\n\n[도움말 답변 시작]\n{answer}\n[도움말 답변 종료]"}
{"name": "single-math-v1", "type": "single", "category": "math", "output_format": "[[평가]]", "description": "Korean prompt for math related korean questions", "system_prompt": "당신은 유익한 조수입니다.", "prompt_template": "[지시]\n공평한 판단자로 행동하고 아래에 표시되는 사용자의 질문에 대한 AI 어시스턴트 응답의 품질을 평가합니다. 귀하의 평가는 정확성과 유용성을 고려해야 합니다. AI 어시스턴트의 응답 언어는 사용자가 사용하는 언어와 일치해야 하며, 그렇지 않으면 감점되어야 합니다. 참조 대답과 어시스턴트 대답이 주어집니다. 귀하의 평가는 어시스턴트의 대답과 참조 대답을 비교하여 시작하십시오. 실수를 확인하고 정정하십시오. 가능한 한 객관적인 것. 설명을 제공한 후 설명을 제공한 후 \"[[평가]]\" 형식에 엄격히 따라 1에서 10까지의 스케일로 응답을 평가해야 합니다. (예시: \"평가: [[5]]\"). \n\n[질문]\n{question}\n\n[참고 답변 시작]\n{ref_answer_1}\n[참고 답변 종료]\n\n[도움말 답변 시작]\n{answer}\n[도움말 답변 종료]"}
{"name": "single-v1-multi-turn", "type": "single", "category": "general", "output_format": "[[평가]]", "description": "Korean Prompt for general korean questions", "system_prompt": "공정한 판단자로서 아래 표시된 사용자 질문에 대해 AI 보조자가 제공하는 응답의 품질을 평가하십시오. 평가에서는 응답의 유용성, 관련성, 정확성, 깊이, 창의성, 세부 수준과 같은 요소를 고려해야 합니다. 평가는 두 번째 사용자 질문에 대한 보조자의 답변에 초점을 맞춰야 합니다. 간단한 설명을 제공하여 평가를 시작하세요. 최대한 객관적이세요. 설명을 제공한 후 \"[[평가]]\" 형식을 엄격히 준수하여 1~10점으로 응답을 평가해야 합니다. (예시: \"평가: [[5]]\").\n\n", "prompt_template": "<|보조자 A와 사용자의 대화 시작|>\n\n### 사용자:\n{question_1}\n\n### 보조자 A:\n{answer_1}\n\n### 사용자:\n {question_2}\n\n### 보조자 A:\n{answer_2}\n\n<|어시스턴트 A와 사용자의 대화 끝|>"}
{"name": "single-math-v1-multi-turn", "type": "single", "category": "math", "output_format": "[[평가]]", "description": "Korean Prompt for general korean questions", "system_prompt": "공정한 판단자로 행동하여 AI 보조자가 사용자 질문에 제공하는 응답의 품질을 평가하십시오. 귀하의 평가는 정확성과 유용성을 고려해야 합니다. 참고 답변과 보조자의 답변이 제공됩니다. 평가는 두 번째 질문에 대한 보조자의 답변에 초점을 맞춰야 합니다. 보조자의 답변과 참조 답변을 비교하여 평가를 시작하세요. 실수를 확인하고 수정하세요. 최대한 객관적이세요. 설명을 제공한 후 \"[[평가]]\" 형식을 엄격히 준수하여 1~10점으로 응답을 평가해야 합니다. (예시: \"평가: [[5]]\").\n\n", "prompt_template": "<|참조 답변 시작|>\n\n### 사용자:\n{question_1}\n\n### 참조 답변:\n{ref_answer_1}\n\n### 사용자:\n{question_2} \n\n### 참조 답변:\n{ref_answer_2}\n\n<|참조 답변의 끝|>\n\n\n<|어시스턴트 A와 사용자의 대화 시작|>\n\n ### 사용자:\n{question_1}\n\n### 보조자 A:\n{answer_1}\n\n### 사용자:\n{question_2}\n\n### 보조자 A:\n{answer_2}\n\n<|어시스턴트 A와 사용자의 대화 끝|>"}

 

 

 자 이제 실제로 코드를 수정한 내용과 돌려본 결과는 다음 편에 이어서 작성하도록 하겠다. 

 

[다음글] : [한국어 LLM 벤치마크] Korean MT-bench score 계산하기 (2)

 

[한국어 LLM 벤치마크] Korean MT-bench score 계산하기 (2)

[이전글] : [한국어 LLM 벤치마크] Korean MT-bench score 계산하기 (1) [한국어 LLM 벤치마크] Korean MT-bench score 계산하기 (1) 한국어 LLM 리더보드인 호랑이에 대해 리뷰를 진행해보고, 외부 오픈소스 모델

didi-universe.tistory.com

 

728x90

댓글