189 lines
12 KiB
Markdown
189 lines
12 KiB
Markdown
---
|
||
language:
|
||
- ru
|
||
datasets:
|
||
- IlyaGusev/saiga_scored
|
||
license: other
|
||
license_name: llama3
|
||
license_link: https://llama.meta.com/llama3/license/
|
||
---
|
||
|
||
|
||
# Saiga/Llama3 8B, Russian Llama-3-based chatbot
|
||
|
||
Based on [Llama-3 8B Instruct](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct).
|
||
|
||
Llama.cpp version: [link](https://huggingface.co/IlyaGusev/saiga_llama3_8b_gguf)
|
||
|
||
Colab: [link](https://colab.research.google.com/drive/1qxgIPymzW6_H6s_wwXu3lknkkYM45Db4)
|
||
|
||
## Prompt format
|
||
|
||
**ОСТОРОЖНО! WARNING! LET OP!**
|
||
|
||
I've changed the prompt format from ChatML to **the original Llama-3 format in v4**. Don't forget to switch formats!
|
||
|
||
**v4, v5, v6+**: LLama-3 prompt format:
|
||
```
|
||
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
|
||
|
||
Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.<|eot_id|><|start_header_id|>user<|end_header_id|>
|
||
|
||
Как дела?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
|
||
|
||
Отлично, а у тебя?<|eot_id|><|start_header_id|>user<|end_header_id|>
|
||
|
||
Шикарно. Как пройти в библиотеку?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
|
||
|
||
```
|
||
|
||
|
||
**v2, v3**: ChatML prompt format:
|
||
```
|
||
<|im_start|>system
|
||
Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.<|im_end|>
|
||
<|im_start|>user
|
||
Как дела?<|im_end|>
|
||
<|im_start|>assistant
|
||
Отлично, а у тебя?<|im_end|>
|
||
<|im_start|>user
|
||
Шикарно. Как пройти в библиотеку?<|im_end|>
|
||
<|im_start|>assistant
|
||
```
|
||
|
||
## Code example
|
||
```python
|
||
# Исключительно ознакомительный пример.
|
||
# НЕ НАДО ТАК ИНФЕРИТЬ МОДЕЛЬ В ПРОДЕ.
|
||
# См. https://github.com/vllm-project/vllm или https://github.com/huggingface/text-generation-inference
|
||
|
||
import torch
|
||
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
||
|
||
MODEL_NAME = "IlyaGusev/saiga_llama3_8b"
|
||
DEFAULT_SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."
|
||
|
||
model = AutoModelForCausalLM.from_pretrained(
|
||
MODEL_NAME,
|
||
load_in_8bit=True,
|
||
torch_dtype=torch.bfloat16,
|
||
device_map="auto"
|
||
)
|
||
model.eval()
|
||
|
||
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
|
||
generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
|
||
print(generation_config)
|
||
|
||
inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"]
|
||
for query in inputs:
|
||
prompt = tokenizer.apply_chat_template([{
|
||
"role": "system",
|
||
"content": DEFAULT_SYSTEM_PROMPT
|
||
}, {
|
||
"role": "user",
|
||
"content": query
|
||
}], tokenize=False, add_generation_prompt=True)
|
||
data = tokenizer(prompt, return_tensors="pt", add_special_tokens=False)
|
||
data = {k: v.to(model.device) for k, v in data.items()}
|
||
output_ids = model.generate(**data, generation_config=generation_config)[0]
|
||
output_ids = output_ids[len(data["input_ids"][0]):]
|
||
output = tokenizer.decode(output_ids, skip_special_tokens=True).strip()
|
||
print(query)
|
||
print(output)
|
||
print()
|
||
print("==============================")
|
||
print()
|
||
```
|
||
|
||
## Output examples
|
||
```
|
||
User: Почему трава зеленая?
|
||
Saiga: Трава выглядит зеленым из-за наличия в ней хлорофилла – пигмента, который помогает растениям поглощать солнечную энергию для процесса фотосинтеза.
|
||
Хлорофилл поглощает световые лучи с длиной волны 400-500 нанометров (ближе к синему) и отражает лучи с длиной волны 600-700 нанометров (ближе к красному), что делает его видимым как зеленый цвет.
|
||
Таким образом, зеленый цвет является результатом того, как хлорофилл взаимодействует со светом, обеспечивая растения необходимой энергии для роста и развития.
|
||
```
|
||
|
||
```
|
||
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
|
||
Saiga: В небольшой деревушке под открытым небом жила девочка по имени Таня. Она была очень активной и любящей играть в различные виды спорта. Однажды, когда она прогуливалась по полям, увидела на земле лежащий мяч. Это был старый, но все еще пригодный для игры мячик.
|
||
Таня сразу же решила взять его себе домой и показать своему другу Мише. Мишка тоже обожал футбол и всегда рад был бы провести время вместе со своими друзьями. Когда они вернулись домой, Таня показала ему найденный мячик и предложила сыграть в футбол.
|
||
Мишка был счастлив, что у них появился новый мяч, и они сразу же начали готовиться к матчу. Они построили две команды и начали игру. Играли они до вечера, а потом решили сделать перерыв и приготовить ужин.
|
||
После ужина они продолжили игру, теперь уже с большим энтузиазмом и страстью. В конце концов, победителем стала команда Тани, которая забила больше голов. Все закончилось веселым праздником и хорошими воспоминаниями о проведенном времени.
|
||
На следующий день Таня и Миша решили пригласить своих других друзей на игру. Они собрали всех в одном месте и провели ещё один захватывающий матч. Этот день также стал незабываемым благодаря новому мячу, который принес так много радости и улыбок.
|
||
Итак, этот маленький мяч, который Таня нашла на поле, стал не просто предметом для игр, но и символом дружбы и веселья между детьми. Он помог им создать незабываемые моменты и укрепил их отношения.
|
||
```
|
||
|
||
|
||
## Versions
|
||
v7:
|
||
- [17e1bcc9c6d3e31852a95a168f7d3778f395cd2a](https://huggingface.co/IlyaGusev/saiga_llama3_8b/commit/17e1bcc9c6d3e31852a95a168f7d3778f395cd2a)
|
||
- Other name: saiga_llama3_8b_abliterated_sft_m11_d7_kto_m7_d7
|
||
- SFT dataset config: [sft_d7.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d7.json)
|
||
- SFT model config: [saiga_llama3_8b_sft_m11.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_llama3_8b_sft_m11.json)
|
||
- KTO dataset config: [pref_d7.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d7.json)
|
||
- KTO model config: [saiga_llama3_8b_kto_m7.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_llama3_8b_kto_m7.json)
|
||
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/2ympfu9y)
|
||
- KTO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/9zn4825e)
|
||
|
||
v6:
|
||
- [b662833f247ca04f1843b356e7ff3ee4aef8086a](https://huggingface.co/IlyaGusev/saiga_llama3_8b/commit/b662833f247ca04f1843b356e7ff3ee4aef8086a)
|
||
- Other name: saiga_llama3_8b_sft_m10_d1_kto_m2_d2
|
||
- SFT dataset config: [sft_d1.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d1.json)
|
||
- SFT model config: [saiga_llama3_8b_sft_m10.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_llama3_8b_sft_m10.json)
|
||
- KTO dataset config: [pref_d2.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d2.json)
|
||
- KTO model config: [saiga_llama3_8b_kto_m2.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_llama3_8b_kto_m2.json)
|
||
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/0iepauzu)
|
||
- KTO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/s6l98eot)
|
||
|
||
v5:
|
||
- [d947b00c56683cd4b2f7ce707edef89318027be4](https://huggingface.co/IlyaGusev/saiga_llama3_8b/commit/d947b00c56683cd4b2f7ce707edef89318027be4)
|
||
- KTO-tune over v4, dataset: [lmsys_clean_ru_preferences](https://huggingface.co/datasets/IlyaGusev/lmsys_clean_ru_preferences)
|
||
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/se1mbx7n)
|
||
|
||
v4:
|
||
- [1cc945d4ca2c7901cf989e7edaac52ab24f1a7dd](https://huggingface.co/IlyaGusev/saiga_llama3_8b/commit/1cc945d4ca2c7901cf989e7edaac52ab24f1a7dd)
|
||
- dataset: [saiga_scored](https://huggingface.co/datasets/IlyaGusev/saiga_scored), scores >= 8, c66032920556c0f21bbbed05e7e04433ec954c3d
|
||
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/dcbs9ttt)
|
||
|
||
v3:
|
||
- [c588356cd60bdee54d52c2dd5a2445acca8aa5c3](https://huggingface.co/IlyaGusev/saiga_llama3_8b/commit/c588356cd60bdee54d52c2dd5a2445acca8aa5c3)
|
||
- dataset: [saiga_scored](https://huggingface.co/datasets/IlyaGusev/saiga_scored), scores >= 8, d51cf8060bdc90023da8cf1c3f113f9193d6569b
|
||
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/ltoqdsal)
|
||
|
||
v2:
|
||
- [ae61b4f9b34fac9856d361ea78c66284a00e4f0b](https://huggingface.co/IlyaGusev/saiga_llama3_8b/commit/ae61b4f9b34fac9856d361ea78c66284a00e4f0b)
|
||
- dataset code revision d0d123dd221e10bb2a3383bcb1c6e4efe1b4a28a
|
||
- wandb [link](https://wandb.ai/ilyagusev/huggingface/runs/r6u5juyk)
|
||
- 5 datasets: ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch, gpt_roleplay_realm, ru_instruct_gpt4
|
||
- Datasets merging script: [create_short_chat_set.py](https://github.com/IlyaGusev/rulm/blob/d0d123dd221e10bb2a3383bcb1c6e4efe1b4a28a/self_instruct/src/data_processing/create_short_chat_set.py)
|
||
|
||
|
||
## Evaluation
|
||
|
||
* Dataset: https://github.com/IlyaGusev/rulm/blob/master/self_instruct/data/tasks.jsonl
|
||
* Framework: https://github.com/tatsu-lab/alpaca_eval
|
||
* Evaluator: alpaca_eval_cot_gpt4_turbo_fn
|
||
|
||
Pivot: chatgpt_3_5_turbo
|
||
| model | length_controlled_winrate | win_rate | standard_error | avg_length |
|
||
|-----|-----|-----|-----|-----|
|
||
|chatgpt_4_turbo | 76.04 | 90.00 |1.46 | 1270 |
|
||
|chatgpt_3_5_turbo | 50.00 | 50.00 | 0.00 | 536 |
|
||
|saiga_llama3_8b, v6 | 49.33 | 68.31 | 2.26 | 1262 |
|
||
|sfr-iter-dpo | 49.11 | 74.94 | 2.13 | 1215 |
|
||
|suzume | 49.05 | 71.57 | 2.20 | 1325 |
|
||
|saiga_llama3_8b, v7| 48.95 | 69.40 | 2.25 | 1266 |
|
||
|saiga_llama3_8b, v5 | 47.13 | 66.18 | 2.31 | 1194 |
|
||
|saiga_llama3_8b, v4 | 43.64 | 65.90 | 2.31 | 1200 |
|
||
|saiga_llama3_8b, v3 | 36.97 | 61.08 | 2.38 | 1162 |
|
||
|saiga_llama3_8b, v2 | 33.07 | 48.19 | 2.45 | 1166 |
|
||
|saiga_mistral_7b | 23.38 | 35.99 | 2.34 | 949 |
|
||
|
||
Pivot: sfr
|
||
| model | length_controlled_winrate | win_rate | standard_error | avg_length |
|
||
|-----|-----|-----|-----|-----|
|
||
| sfr | 50.00 | 50.00 | 0.00 | 1215 |
|
||
| saiga_llama3_8b, v7 | 48.95 | 49.16 | 2.46 | 1266 |
|
||
| saiga_llama3_8b, v6 | 46.91 | 47.23 | 2.45 | 1262 |
|
||
| suzume_8b | 43.69 | 48.19 | 2.46 | 1325 | |