dmitrymailk/mt_bench_ru

10

stars

11

commits

Jupyter Notebook

primary language

Jan 16, 2024

updated

README

MT_BENCH_RU

Перевод оригинального mt_bench на русский язык. Переведенный датасет можно найти здесь: dim/mt_bench_ru

MT_BENCH_RU Leaderboard

Ссылка на google sheets link

model_namemt_bench_ru_turn_1mt_bench_ru_turn_2mt_bench_ru_avgscore_date
gpt-3.5-turbo8.77.458.07531.08.2023
Open-Orca/Mistral-7B-OpenOrca6.855.956.415.12.2023
dim/mistral-open-orca-ru-4600-step7.16255.466.3112515.12.2023
IlyaGusev/saiga_mistral_7b_lora6.5679015.33755.952700515.12.2023
dim/verbalist_v10_16505.612555.3062515.12.2023
dim/verbalist_7b_v9_8006.1754.3755.27515.12.2023
IlyaGusev/saiga2_13b_lora5.964.125.0431.08.2023
IlyaGusev/saiga2_7b_lora4.763.624.1931.08.2023
GigaChat(v1.13.0) когда только вышел4.533.534.0331.08.2023
IlyaGusev/saiga_7b_lora4.233.063.64531.08.2023
gigasaiga_13b3.712.753.2331.08.2023
dim/xglm-4.5b_dolly_oasst1_chip22.282.082.1831.08.2023

Как пользоваться?

Для воспроизводимости я создал докерфайл и добавил .devcontainer.json. Это такая технология, которая позволяет разрабатывать изолировано в докер контейнере. Ну или можете просто установить все необходимые пакеры самостоятельно, как вы любите. Во время первого запуска ноутбука могут возникнуть проблемы с conda. Решение:

sudo su
conda install -n base ipykernel --update-deps -y

Если не хотите использовать докер, можно создать новое окружение conda.

conda create -n mtbench
conda activate mtbench
python3 -m pip install -r requirements.txt

1. Создать 2 файла в корне проекта.

  • gpt_token - переменная среды OPENAI_API_KEY
  • openai_base_url - переменная среды OPENAI_BASE_URL (необходима для обхода блокировки по IP, default https://api.openai.com/v1)

2. Сгенерировать ответы модели. Пример генерации можно найти в скрипте mt_bench_generation.py. Тестовую генерацию можно запустить при помощи команд:

python mt_bench_generation.py

3. Запустить оценку файла который лежит в llm_judge/data/mt_bench/model_answer с именем EXAMPLE_MODEL.json в режиме когда оценивается только одна модель. Необходимо поменять на ваш файл.

python -m llm_judge.gen_judgment --model-list EXAMPLE_MODEL --mode single --judge-file llm_judge/data/judge_prompts_ru.jsonl --question-file question_ru

или

bash run_gen_judgment.sh 
Stats:
{
    "bench_name": "mt_bench",
    "mode": "single",
    "judge": "gpt-4",
    "baseline": null,
    "model_list": [
        "EXAMPLE_MODEL"
    ],
    "total_num_questions": 80,
    "total_num_matches": 160,
    "output_path": "llm_judge/data/mt_bench/model_judgment/gpt-4_single.jsonl"
}
Press Enter to confirm...

4. Показываем результат оценок в консоли для каждого turn

python -m llm_judge.show_result

или

bash show_results.sh 
Mode: single
Input file: llm_judge/data/mt_bench/model_judgment/gpt-4_single.jsonl

########## First turn ##########
                                                score
model                                  turn          
mt_bench_ru_chatgpt                    1     8.700000
mistral-open-orca-ru-4600-step         1     7.162500
Mistral-7B-OpenOrca                    1     6.850000
saiga_mistral_7b_lora                  1     6.567901
verbalist_7b_v9_800                    1     6.175000
mt_bench_ru_saiga2_13b                 1     5.962500
verbalist_v10_1650                     1     5.612500
mt_bench_ru_saiga2_7b                  1     4.762500
mt_bench_ru_gigachat                   1     4.537500
saiga_7b_v1_ru                         1     4.237500
mt_bench_ru_gigasaiga_13b              1     3.712500
mt_bench_ru_xglm_4.5B_lora_our_dataset 1     2.287500

########## Second turn ##########
                                              score
model                                  turn        
mt_bench_ru_chatgpt                    2     7.4500
Mistral-7B-OpenOrca                    2     5.9500
mistral-open-orca-ru-4600-step         2     5.4625
saiga_mistral_7b_lora                  2     5.3375
verbalist_v10_1650                     2     5.0000
verbalist_7b_v9_800                    2     4.3750
mt_bench_ru_saiga2_13b                 2     4.1250
mt_bench_ru_saiga2_7b                  2     3.6250
mt_bench_ru_gigachat                   2     3.5375
saiga_7b_v1_ru                         2     3.0625
mt_bench_ru_gigasaiga_13b              2     2.7500
mt_bench_ru_xglm_4.5B_lora_our_dataset 2     2.0875

########## Average ##########
                                           score
model                                           
mt_bench_ru_chatgpt                     8.075000
Mistral-7B-OpenOrca                     6.400000
mistral-open-orca-ru-4600-step          6.312500
saiga_mistral_7b_lora                   5.956522
verbalist_v10_1650                      5.306250
verbalist_7b_v9_800                     5.275000
mt_bench_ru_saiga2_13b                  5.043750
mt_bench_ru_saiga2_7b                   4.193750
mt_bench_ru_gigachat                    4.037500
saiga_7b_v1_ru                          3.650000
mt_bench_ru_gigasaiga_13b               3.231250
mt_bench_ru_xglm_4.5B_lora_our_dataset  2.187500

5. Открываем просмотр в браузере отдельных ответов. Есть 2 режима. Single и side by side.

python -m llm_judge.qa_browser  --share --question-file question_ru

или

bash run_gradio.sh 

Single

Side by side

6. Визуализация результата. Если хочется красивых картинок, для этого можно воспользоваться llm_judge/noteboooks/mt_bench_radar.ipynb. В нем можно получить подобные интерактивные картинки.

7. Если хочется удалить некоторые модели из оценки, для этого есть следующий файл llm_judge/clean_judgment.py.

FAQ

1. Где находятся оценочные промпты?

Оценочные промпты промпты можно найти вот тут llm_judge/data/judge_prompts_ru.jsonl

Пример такого промпта выглядит следующим образом: Для первого turn.

[Инструкция]
Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа, предоставленного помощником ИИ на вопрос пользователя, показанный ниже. Ваша оценка должна учитывать такие факторы, как полезность, актуальность, точность, глубина, креативность и уровень детализации ответа. Начните оценку с краткого объяснения. Будьте максимально объективны. После объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: «[[оценка]]», например: «Оценка: [[5]]».

[Вопрос]
{question}

[Начало ответа помощника]
{answer}
[Конец ответа помощника]

Для второго turn.

Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа, предоставленного помощником ИИ на вопрос пользователя, отображаемый ниже. Ваша оценка должна учитывать такие факторы, как полезность, актуальность, точность, глубина, креативность и уровень детализации ответа. Ваша оценка должна быть сосредоточена на ответе помощника на второй вопрос пользователя. Начните оценку с краткого объяснения. Будьте максимально объективны. После предоставления объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: «[[оценка]]», например: Оценка: [[5]]».

<|Начало разговора помощника А с пользователем|>

### Пользователь:
{question_1}

### Помощник А:
{answer_1}

### Пользователь:
{question_2}

### Помощник А:
{answer_2}

<|Конец разговора помощника А с пользователем|>

Для оценки математики промпт немного отличается:

[Инструкция]
Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа, предоставленного помощником ИИ на вопрос пользователя, показанный ниже. Ваша оценка должна учитывать правильность и полезность. Вам будет дан справочный ответ и ответ ассистента. Начните оценку, сравнив ответ ассистента с эталонным ответом. Найдите и исправьте все ошибки. Будьте максимально объективны. После предоставления объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: "[[оценка]]", например: "Оценка: [[5]]".

[Вопрос]
{question}

[Начало справочного ответа]
{ref_answer_1}
[Конец справочного ответа]

[Начало ответа ассистента]
{answer}
[Конец ответа ассистента]
Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа помощника ИИ на вопрос пользователя. Ваша оценка должна учитывать правильность и полезность. Вам будет дан справочный ответ и ответ ассистента. Ваша оценка должна быть сосредоточена на ответе ассистента на второй вопрос. Начните свою оценку, сравнив ответ ассистента с эталонным ответом. Найдите и исправьте все ошибки. Будьте максимально объективны. После предоставления объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: «[[оценка]]», например: «Оценка: [[5]]».


<|Начало справочного ответа|>

### Пользователь:
{question_1}

### Справочный ответ:
{ref_answer_1}

### Пользователь:
{question_2}

### Справочный ответ:
{ref_answer_2}

<|Конец справочного ответа|>


<|Начало разговора помощника А с пользователем|>

### Пользователь:
{question_1}

### Ассистент А:
{answer_1}

### Пользователь:
{question_2}

### Ассистент А:
{answer_2}

<|Конец разговора Ассистента А с пользователем|>

Contributors

dmitrymailk

11 commits

dmitrymailk/mt_bench_ru

10

stars

11

commits

Jupyter Notebook

primary language

Jan 16, 2024

updated

README

MT_BENCH_RU

Перевод оригинального mt_bench на русский язык. Переведенный датасет можно найти здесь: dim/mt_bench_ru

MT_BENCH_RU Leaderboard

Ссылка на google sheets link

model_namemt_bench_ru_turn_1mt_bench_ru_turn_2mt_bench_ru_avgscore_date
gpt-3.5-turbo8.77.458.07531.08.2023
Open-Orca/Mistral-7B-OpenOrca6.855.956.415.12.2023
dim/mistral-open-orca-ru-4600-step7.16255.466.3112515.12.2023
IlyaGusev/saiga_mistral_7b_lora6.5679015.33755.952700515.12.2023
dim/verbalist_v10_16505.612555.3062515.12.2023
dim/verbalist_7b_v9_8006.1754.3755.27515.12.2023
IlyaGusev/saiga2_13b_lora5.964.125.0431.08.2023
IlyaGusev/saiga2_7b_lora4.763.624.1931.08.2023
GigaChat(v1.13.0) когда только вышел4.533.534.0331.08.2023
IlyaGusev/saiga_7b_lora4.233.063.64531.08.2023
gigasaiga_13b3.712.753.2331.08.2023
dim/xglm-4.5b_dolly_oasst1_chip22.282.082.1831.08.2023

Как пользоваться?

Для воспроизводимости я создал докерфайл и добавил .devcontainer.json. Это такая технология, которая позволяет разрабатывать изолировано в докер контейнере. Ну или можете просто установить все необходимые пакеры самостоятельно, как вы любите. Во время первого запуска ноутбука могут возникнуть проблемы с conda. Решение:

sudo su
conda install -n base ipykernel --update-deps -y

Если не хотите использовать докер, можно создать новое окружение conda.

conda create -n mtbench
conda activate mtbench
python3 -m pip install -r requirements.txt

1. Создать 2 файла в корне проекта.

  • gpt_token - переменная среды OPENAI_API_KEY
  • openai_base_url - переменная среды OPENAI_BASE_URL (необходима для обхода блокировки по IP, default https://api.openai.com/v1)

2. Сгенерировать ответы модели. Пример генерации можно найти в скрипте mt_bench_generation.py. Тестовую генерацию можно запустить при помощи команд:

python mt_bench_generation.py

3. Запустить оценку файла который лежит в llm_judge/data/mt_bench/model_answer с именем EXAMPLE_MODEL.json в режиме когда оценивается только одна модель. Необходимо поменять на ваш файл.

python -m llm_judge.gen_judgment --model-list EXAMPLE_MODEL --mode single --judge-file llm_judge/data/judge_prompts_ru.jsonl --question-file question_ru

или

bash run_gen_judgment.sh 
Stats:
{
    "bench_name": "mt_bench",
    "mode": "single",
    "judge": "gpt-4",
    "baseline": null,
    "model_list": [
        "EXAMPLE_MODEL"
    ],
    "total_num_questions": 80,
    "total_num_matches": 160,
    "output_path": "llm_judge/data/mt_bench/model_judgment/gpt-4_single.jsonl"
}
Press Enter to confirm...

4. Показываем результат оценок в консоли для каждого turn

python -m llm_judge.show_result

или

bash show_results.sh 
Mode: single
Input file: llm_judge/data/mt_bench/model_judgment/gpt-4_single.jsonl

########## First turn ##########
                                                score
model                                  turn          
mt_bench_ru_chatgpt                    1     8.700000
mistral-open-orca-ru-4600-step         1     7.162500
Mistral-7B-OpenOrca                    1     6.850000
saiga_mistral_7b_lora                  1     6.567901
verbalist_7b_v9_800                    1     6.175000
mt_bench_ru_saiga2_13b                 1     5.962500
verbalist_v10_1650                     1     5.612500
mt_bench_ru_saiga2_7b                  1     4.762500
mt_bench_ru_gigachat                   1     4.537500
saiga_7b_v1_ru                         1     4.237500
mt_bench_ru_gigasaiga_13b              1     3.712500
mt_bench_ru_xglm_4.5B_lora_our_dataset 1     2.287500

########## Second turn ##########
                                              score
model                                  turn        
mt_bench_ru_chatgpt                    2     7.4500
Mistral-7B-OpenOrca                    2     5.9500
mistral-open-orca-ru-4600-step         2     5.4625
saiga_mistral_7b_lora                  2     5.3375
verbalist_v10_1650                     2     5.0000
verbalist_7b_v9_800                    2     4.3750
mt_bench_ru_saiga2_13b                 2     4.1250
mt_bench_ru_saiga2_7b                  2     3.6250
mt_bench_ru_gigachat                   2     3.5375
saiga_7b_v1_ru                         2     3.0625
mt_bench_ru_gigasaiga_13b              2     2.7500
mt_bench_ru_xglm_4.5B_lora_our_dataset 2     2.0875

########## Average ##########
                                           score
model                                           
mt_bench_ru_chatgpt                     8.075000
Mistral-7B-OpenOrca                     6.400000
mistral-open-orca-ru-4600-step          6.312500
saiga_mistral_7b_lora                   5.956522
verbalist_v10_1650                      5.306250
verbalist_7b_v9_800                     5.275000
mt_bench_ru_saiga2_13b                  5.043750
mt_bench_ru_saiga2_7b                   4.193750
mt_bench_ru_gigachat                    4.037500
saiga_7b_v1_ru                          3.650000
mt_bench_ru_gigasaiga_13b               3.231250
mt_bench_ru_xglm_4.5B_lora_our_dataset  2.187500

5. Открываем просмотр в браузере отдельных ответов. Есть 2 режима. Single и side by side.

python -m llm_judge.qa_browser  --share --question-file question_ru

или

bash run_gradio.sh 

Single

Side by side

6. Визуализация результата. Если хочется красивых картинок, для этого можно воспользоваться llm_judge/noteboooks/mt_bench_radar.ipynb. В нем можно получить подобные интерактивные картинки.

7. Если хочется удалить некоторые модели из оценки, для этого есть следующий файл llm_judge/clean_judgment.py.

FAQ

1. Где находятся оценочные промпты?

Оценочные промпты промпты можно найти вот тут llm_judge/data/judge_prompts_ru.jsonl

Пример такого промпта выглядит следующим образом: Для первого turn.

[Инструкция]
Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа, предоставленного помощником ИИ на вопрос пользователя, показанный ниже. Ваша оценка должна учитывать такие факторы, как полезность, актуальность, точность, глубина, креативность и уровень детализации ответа. Начните оценку с краткого объяснения. Будьте максимально объективны. После объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: «[[оценка]]», например: «Оценка: [[5]]».

[Вопрос]
{question}

[Начало ответа помощника]
{answer}
[Конец ответа помощника]

Для второго turn.

Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа, предоставленного помощником ИИ на вопрос пользователя, отображаемый ниже. Ваша оценка должна учитывать такие факторы, как полезность, актуальность, точность, глубина, креативность и уровень детализации ответа. Ваша оценка должна быть сосредоточена на ответе помощника на второй вопрос пользователя. Начните оценку с краткого объяснения. Будьте максимально объективны. После предоставления объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: «[[оценка]]», например: Оценка: [[5]]».

<|Начало разговора помощника А с пользователем|>

### Пользователь:
{question_1}

### Помощник А:
{answer_1}

### Пользователь:
{question_2}

### Помощник А:
{answer_2}

<|Конец разговора помощника А с пользователем|>

Для оценки математики промпт немного отличается:

[Инструкция]
Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа, предоставленного помощником ИИ на вопрос пользователя, показанный ниже. Ваша оценка должна учитывать правильность и полезность. Вам будет дан справочный ответ и ответ ассистента. Начните оценку, сравнив ответ ассистента с эталонным ответом. Найдите и исправьте все ошибки. Будьте максимально объективны. После предоставления объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: "[[оценка]]", например: "Оценка: [[5]]".

[Вопрос]
{question}

[Начало справочного ответа]
{ref_answer_1}
[Конец справочного ответа]

[Начало ответа ассистента]
{answer}
[Конец ответа ассистента]
Пожалуйста, действуйте как беспристрастный судья и оцените качество ответа помощника ИИ на вопрос пользователя. Ваша оценка должна учитывать правильность и полезность. Вам будет дан справочный ответ и ответ ассистента. Ваша оценка должна быть сосредоточена на ответе ассистента на второй вопрос. Начните свою оценку, сравнив ответ ассистента с эталонным ответом. Найдите и исправьте все ошибки. Будьте максимально объективны. После предоставления объяснения вы должны оценить ответ по шкале от 1 до 10, строго следуя следующему формату: «[[оценка]]», например: «Оценка: [[5]]».


<|Начало справочного ответа|>

### Пользователь:
{question_1}

### Справочный ответ:
{ref_answer_1}

### Пользователь:
{question_2}

### Справочный ответ:
{ref_answer_2}

<|Конец справочного ответа|>


<|Начало разговора помощника А с пользователем|>

### Пользователь:
{question_1}

### Ассистент А:
{answer_1}

### Пользователь:
{question_2}

### Ассистент А:
{answer_2}

<|Конец разговора Ассистента А с пользователем|>

Contributors

dmitrymailk

11 commits

Languages

Jupyter Notebook

60.9%

Python

38.3%