File size: 11,413 Bytes
7bb8205 77e9e49 18acdf2 dd9beed cc63c92 7bb8205 b4b3876 68a898f 755e7be dcd342e ea33332 dcd342e 1ad1cb3 ea33332 e31ce5f dcd342e bbf1d5f dcd342e 42fa2e9 793ea81 42fa2e9 3d6684a 8a4f384 861ef39 dcd342e 99646ba dcd342e 99646ba dcd342e c34010b 9686134 c34010b b755217 fcd6c6c bbf1d5f fcd6c6c ad08461 fcd6c6c ad08461 68a898f d0b3244 68a898f 7f7ca3e b4b3876 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
---
datasets:
- IlyaGusev/ru_turbo_alpaca
- IlyaGusev/ru_turbo_saiga
- IlyaGusev/ru_sharegpt_cleaned
- IlyaGusev/oasst1_ru_main_branch
- IlyaGusev/ru_turbo_alpaca_evol_instruct
- lksy/ru_instruct_gpt4
language:
- ru
pipeline_tag: conversational
license: cc-by-4.0
---
# Saiga 7B, Russian LLaMA-based chatbot
Based on [LLaMA 7B](https://huggingface.co/huggyllama/llama-7b).
This is an adapter-only version.
Colab: [link](https://colab.research.google.com/drive/1IBh4FMJPOGZAkX7DYWnIKdav_ZcKatlP)
llama.cpp version: [link](https://huggingface.co/IlyaGusev/saiga_7b_ggml)
Training code: [link](https://github.com/IlyaGusev/rulm/tree/master/self_instruct)
```python
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
MODEL_NAME = "IlyaGusev/saiga_7b_lora"
DEFAULT_MESSAGE_TEMPLATE = "<s>{role}\n{content}</s>\n"
DEFAULT_SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."
class Conversation:
def __init__(
self,
message_template=DEFAULT_MESSAGE_TEMPLATE,
system_prompt=DEFAULT_SYSTEM_PROMPT,
start_token_id=1,
bot_token_id=9225
):
self.message_template = message_template
self.start_token_id = start_token_id
self.bot_token_id = bot_token_id
self.messages = [{
"role": "system",
"content": system_prompt
}]
def get_start_token_id(self):
return self.start_token_id
def get_bot_token_id(self):
return self.bot_token_id
def add_user_message(self, message):
self.messages.append({
"role": "user",
"content": message
})
def add_bot_message(self, message):
self.messages.append({
"role": "bot",
"content": message
})
def get_prompt(self, tokenizer):
final_text = ""
for message in self.messages:
message_text = self.message_template.format(**message)
final_text += message_text
final_text += tokenizer.decode([self.start_token_id, self.bot_token_id])
return final_text.strip()
def generate(model, tokenizer, prompt, generation_config):
data = tokenizer(prompt, return_tensors="pt")
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)
return output.strip()
config = PeftConfig.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
config.base_model_name_or_path,
load_in_8bit=True,
torch_dtype=torch.float16,
device_map="auto"
)
model = PeftModel.from_pretrained(
model,
MODEL_NAME,
torch_dtype=torch.float16
)
model.eval()
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, use_fast=False)
generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
print(generation_config)
inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"]
for inp in inputs:
conversation = Conversation()
conversation.add_user_message(inp)
prompt = conversation.get_prompt(tokenizer)
output = generate(model, tokenizer, prompt, generation_config)
print(inp)
print(output)
print()
print("==============================")
print()
```
Examples:
```
User: Почему трава зеленая?
Saiga: Зелень в цветении растений является результатом фотосинтеза, процесса, при котором растительные клетки превращают углекислый газ в кислород и энергию. Когда растение производит больше энергии, чем она потребляет, оно выделяет ее в виде красного или желтого цвета листьев. Однако, когда растение не получает достаточно света и воды, оно может изменить свой цвет на зеленый, чтобы сохранить свои запасы энергии для будущих потребностей. Зелень также может быть связана с защитой от ультрафиолетовых лучей, которые могут повредить растения.
```
```
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
Saiga: Таня любила футбол с детства. Она играла на улице со своими друзьями и мечтала стать профессиональным футболистом. Когда ей исполнилось 12 лет, она начала тренироваться в футбольной школе. Она была очень талантливой и упорной, и вскоре ей удалось попасть в молодежную команду.
Однажды в лесу жил маленький медвежонок по имени Таня. Она была очень игривой и любила играть со своими друзьями - медведями. Однажды она решила провести время на свежем воздухе и отправилась в лес, чтобы играть с мячом.
Мяч был ее лучшим другом, который всегда находился рядом. Он был невероятно упрямым и не давал себя взять за руку. Но Таня никогда не сдавалась и продолжала пытаться его вытянуть из-под коры.
В лесу Таня встретила своего старого знакомого - медведя по имени Макс. Он был очень сильным и мощным, но он также любил играть с мячом. Их игра была так же веселой и приключенческой, как и у других медведей.
Но однажды, когда они играли, Таня заметила что-то необычное. В лесу началось грозить шторм, и она стала беспокоиться за своих друзей. Она решила вернуться домой, чтобы защитить их от грозового облака.
Когда Таня вернулась домой, она увидела, что все медведи были уже дома. Они говорили о том, что шторм прошел мимо, и они все остались живы. Таня была очень рада, что ее друзья остались в безопасности, и она поняла, что без мяча она была бы не такая веселая.
Так что Таня решила, что она должна найти свой самый лучший друг и вернуться к своим друзьям. Она начала искать его во всех местах, где он мог быть. Наконец, она нашла его под корнем дерева, где он был спрятан.
Таня была очень рада, что её лучший друг находится здесь, и она взяла его в руки. Она понимала, что без него она была бы совсем другой. Так что она поцеловала мяч и сказала ему, что она никогда не забудет его.
Так что теперь Таня и ее друзья играют вместе, и они всегда будут держать мяч в руках, чтобы сохранить свою дружбу и веселую атмосферу в лесу.
```
v5:
- revision 7712a061d993f61c49b1e2d992e893c48acb3a87
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/r9iti9hi?workspace=user-ilyagusev)
- 7 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch, gpt_roleplay_realm, ru_turbo_alpaca_evol_instruct (iteration 1/2), ru_instruct_gpt4
- Datasets merging script: [create_chat_set.py](https://github.com/IlyaGusev/rulm/blob/e4238fd9a196405b566a2d5838ab44b7a0f4dc31/self_instruct/src/data_processing/create_chat_set.py)
- saiga7b_v5 vs saiga7b_v2: 94-9-73
v4:
- revision fecf442c3d39d962df565fb40f2b84b4432af9d3
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/mtq64ran?workspace=user-ilyagusev)
- 6 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch, gpt_roleplay_realm, ru_turbo_alpaca_evol_instruct (iteration 1)
- Datasets merging script: [create_chat_set.py](https://github.com/IlyaGusev/rulm/blob/6fd88f926586905145002cda54f1318e2146edde/self_instruct/src/data_processing/create_chat_set.py)
v3:
- revision 30a126e9632dd5e18876d089706c71df670adf09
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/721lj1gp/overview)
- 5 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch, gpt_roleplay_realm
- Datasets merging script: [create_chat_set.py](https://github.com/IlyaGusev/rulm/blob/300132c55d669e44b94935b5bb52cdf91b552a7e/self_instruct/src/data_processing/create_chat_set.py)
- System prompt: custom system prompt is supported now, a default one: `"Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."`
v2:
- revision e31ce5f2b15d8e0c275336f4af44ff5bd367b864
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/8p3nfjqv/overview)
- 4 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch
- Datasets merging script: [create_chat_set.py](https://github.com/IlyaGusev/rulm/blob/ef58f3d82d6e7b3784d42167ff69188d3766ab61/self_instruct/src/data_processing/create_chat_set.py)
- Loss: 0.942
- Context length: 2000
- Conversational template: `"<s>{role}\n{content}</s>"`
- Possible roles: `["system", "user", "bot"]`
- System prompt: `"Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."`
v1:
- revision 1ad1cb364e3e245a7a376884111e107cfc013911
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/kx2uytey/overview)
- 3 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned
- Loss: 0.883
- Context length: 2000
- Conversational template: `"<start>{role}\n{content} <end>\n"`
- Possible roles: `["system", "user", "bot"]`.
- System prompt: `"Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."` |