File size: 8,900 Bytes
fc8f1e8 341a490 fc8f1e8 63c0e44 3f862b5 fc8f1e8 b212070 fc8f1e8 a759d2b fc8f1e8 319770c 453bb1d fc8f1e8 b3268e5 fc8f1e8 b3268e5 fc8f1e8 5a4e538 |
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 |
---
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
---
# Saiga2 7B, Russian LLaMA2-based chatbot
Based on [LLaMA-2 7B HF](https://huggingface.co/meta-llama/Llama-2-7b-hf).
This is an adapter-only version.
Llama.cpp version: [link](https://huggingface.co/IlyaGusev/saiga2_7b_ggml).
Colab: [link](https://colab.research.google.com/drive/1Iw2TROpW0EjagyckyP-I-OWhLnLr7v2k).
Training code: [link](https://github.com/IlyaGusev/rulm/tree/master/self_instruct).
**WARNING 1**: Run with the development version of `transformers` and `peft`!
**WARNING 2**: Avoid using V100 (in Colab, for example). Outputs are much worse in this case.
**WARNING 3**: You can use the [Llama-2-7B-fp16](https://huggingface.co/TheBloke/Llama-2-7B-fp16) base model instead.
```python
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
MODEL_NAME = "IlyaGusev/saiga2_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: Жила-была девочка по имени Таня. Она была очень активной и любила играть в футбол со своими друзьями. Однажды она купила новый мяч, который был еще более красивым и качественным, чем все остальные. Он был настолько же красочен, что казалось, будто он сам играет!
Однако, когда Танечка начала играть с ним, то заметила, что мяч не так уж и легкий, как она думала. Вместо того чтобы лететь высоко вверх, он падал на землю, и Таня чувствовала себя очень грустной. Но она решила, что это просто ее плохая игровая форма, и продолжила играть.
Но уже через несколько минут после того, как Таня бросала мяч в воздух, он завис над головой и начал медленно кружить вокруг. Таня стала беспокойна и испуганна - что случилось? Как ее мяч стал таким тяжелым?
В этот момент, Таня услышала шум из ближайшего парка. Она поспешно отправилась туда, чтобы узнать, что происходит. Когда она подошла к парку, она увидела маленького мальчика, который сидел на дереве и плевал на свой мяч.
"Что ты делаешь?" - спросила Таня. Мальчик повернулся к ней и показал ей свой мяч. "Этот мяч мне нравится больше всего", - говорил он. "Я хочу, чтобы он был такой же, как твой".
Таня поняла, что её мяч перестал быть для нее только игровым предметом, но и символом дружбы и общения. Она решила вернуться домой и взять его с собой.
Когда они пришли домой, Таня дала своему другу мяч и объяснила ему, что теперь их два мяча будут лучше вместе, чем один. Именно так, благодаря дружбе и сотрудничеству, Таня и ее новый друг стали лучшими командами. Их мячи стали играть вместе, и каждый из них становился еще лучше и быстрее благодаря друг другу.
Итак, Таня научилась, что настоящая дружба - это не только общительность и веселость, но и помощь и поддержка друг друга в трудных ситуациях. Благодаря своей новому другу, Таня научилась ценить своих товарищей и находить радость в том, что можно учиться у других людей.
```
v1:
- dataset code revision 7712a061d993f61c49b1e2d992e893c48acb3a87
- wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/innzu7g8)
- 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 saiga2_7b: 78-8-90
|