Skip to content

Latest commit

 

History

History
 
 

llm_judge

LLM Judge

| Paper | Leaderboard | MT-bench Human Annotation Dataset | Chatbot Arena Conversation Dataset |

In this package, you can use MT-bench questions and prompts to evaluate your models with LLM-as-a-judge. MT-bench is a set of challenging multi-turn open-ended questions for evaluating chat assistants. To automate the evaluation process, we prompt strong LLMs like GPT-4 to act as judges and assess the quality of the models' responses.

Contents

Install

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

Quickstart for Japanese MT-Bench

Let's say you want to evaluate stabilityai/japanese-stablelm-instruct-alpha-7b:

cd fastchat/llm_judge

# Step 1. Generate model answers to MT-bench questions
# This will generate `data/japanese_mt_bench/model_answer/japanese-stablelm-instruct-alpha-7b.jsonl`
python gen_model_answer.py --bench-name japanese_mt_bench --max-turns 1 --model-path stabilityai/japanese-stablelm-instruct-alpha-7b --model-id japanese-stablelm-instruct-alpha-7b

# Step 2. Generate GPT-4 judgments
# This will generate `data/japanese_mt_bench/model_judgment/gpt-4_single.jsonl`
OPENAI_API_KEY=<API-KEY> python gen_judgment.py --bench-name japanese_mt_bench --model-list japanese-stablelm-instruct-alpha-7b --judge-file data/judge_ja_prompts.jsonl

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

For more details, see the section Evaluate a model on MT-bench below.

Review Pre-Generated Model Answers and Judgments

We provide pre-generated model answers and judgments for some models. You can view them at this demo.

To download the pre-generated data, use

python3 download_mt_bench_pregenerated.py

After downloading the data, you can view them locally by

python3 qa_browser.py --share

You can use this QA browser to view the answers generated by you later.

MT-Bench

Evaluate a model on MT-bench

Step 1. Generate model answers to MT-bench questions

python gen_model_answer.py --bench-name japanese_mt_bench --model-path [MODEL-PATH] --model-id [MODEL-ID]

Arguments:

  • [MODEL-PATH] is the path to the weights, which can be a local folder or a Hugging Face repo ID.
  • [MODEL-ID] is a name you give to the model.

e.g.,

python gen_model_answer.py --bench-name japanese_mt_bench --model-path lmsys/vicuna-7b-v1.3 --model-id vicuna-7b-v1.3

The answers will be saved to data/japanese_mt_bench/model_answer/[MODEL-ID].jsonl.

To make sure FastChat loads the correct prompt template, see the supported models and how to add a new model here.

You can also specify --num-gpus-per-model for model parallelism (needed for large 65B models) and --num-gpus-total to parallelize answer generation with multiple GPUs.

Step 2. Generate GPT-4 judgments

There are several options to use GPT-4 as a judge, such as pairwise winrate and single-answer grading. In MT-bench, we recommond single-answer grading as the default mode. This mode asks GPT-4 to grade and give a score to model's answer directly without pairwise comparison. For each turn, GPT-4 will give a score on a scale of 10. We then compute the average score on all turns.

python gen_judgment.py --bench-name japanese_mt_bench --model-list [LIST-OF-MODEL-ID] --parallel [num-concurrent-api-call]

e.g.,

python gen_judgment.py --bench-name japanese_mt_bench --model-list vicuna-13b-v1.3 alpaca-13b llama-13b claude-v1 gpt-3.5-turbo gpt-4 --parallel 2

The judgments will be saved to data/japanese_mt_bench/model_judgment/gpt-4_single.jsonl

Step 3. Show MT-bench scores

  • Show the scores for selected models
    python show_result.py --bench-name japanese_mt_bench --model-list vicuna-13b-v1.3 alpaca-13b llama-13b claude-v1 gpt-3.5-turbo gpt-4
    
  • Show all scores
    python show_result.py --bench-name japanese_mt_bench
    

Other grading options

Besides score-based single-answer grading, we also support two additional grading options based on win rates:

  • pariwise-baseline: run pairwise comparison against a baseline model.
  • pairwise-all: run pairwise comparison between all model pairs on all questions.

Option 2: pairwise comparison against a baseline (default: gpt-3.5-turbo)

  • Generate GPT-4 judgments
python gen_judgment.py --bench-name japanese_mt_bench --mode pairwise-baseline --model-list vicuna-13b-v1.3 alpaca-13b llama-13b --parallel 2

The judgments will be saved to data/japanese_mt_bench/model_judgment/gpt-4_pair.jsonl

  • Show results
python show_result.py --mode pairwise-baseline

Option 3: Run GPT-4 judge with all pair comparisons

Another option is to run pairwise comparisons on all possible pairs. This could be more expensive when #models increases, but it gives you a more comprehensive information.

python gen_judgment.py --bench-name japanese_mt_bench --mode pairwise-all --model-list [LIST-OF-MODEL-ID] --parallel [num-concurrent-api-call]
python show_result.py --bench-name japanese_mt_bench --mode pairwise-all

How to get GPT-3.5/GPT-4/Claude's answer?

  • python gen_api_answer.py --bench-name japanese_mt_bench --model [MODEL-NAME] to generate GPT-3.5/4 and Claude's answers.

How to plot the radar figure?

You can use this colab notebook to plot the radar figure for MT-bench.

Agreement Computation

We released 3.3K human annotations for model responses generated by 6 models in response to 80 MT-bench questions. The dataset is available at lmsys/mt_bench_human_judgments.

This Colab notebook shows how to compute the agreement between humans and GPT-4 judge with the dataset. Our results show that humans and GPT-4 judge achieve over 80% agreement, the same level of agreement between humans.

Citation

Please cite the following paper if you find the code or datasets helpful.

@misc{zheng2023judging,
      title={Judging LLM-as-a-judge with MT-Bench and Chatbot Arena}, 
      author={Lianmin Zheng and Wei-Lin Chiang and Ying Sheng and Siyuan Zhuang and Zhanghao Wu and Yonghao Zhuang and Zi Lin and Zhuohan Li and Dacheng Li and Eric. P Xing and Hao Zhang and Joseph E. Gonzalez and Ion Stoica},
      year={2023},
      eprint={2306.05685},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}