IlyaGusev commited on
Commit
d7c13be
1 Parent(s): 3d3da94

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +133 -2
README.md CHANGED
@@ -9,8 +9,139 @@ language:
9
  pipeline_tag: conversational
10
  ---
11
 
12
- Undertrained version.
13
 
 
 
 
14
 
15
  Colab: [link](https://colab.research.google.com/drive/1zvF0I52NJ7ngAk_zWzEA_QOYOMCdITZN?usp=sharing)
16
- Wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/z24ded7p?workspace=user-ilyagusev)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  pipeline_tag: conversational
10
  ---
11
 
12
+ # Saiga 30B, Russian LLaMA-based chatbot
13
 
14
+ Based on [LLaMA 30B](https://huggingface.co/huggyllama/llama-30b).
15
+
16
+ * This is an adapter-only version.
17
 
18
  Colab: [link](https://colab.research.google.com/drive/1zvF0I52NJ7ngAk_zWzEA_QOYOMCdITZN?usp=sharing)
19
+
20
+ Training code: [link](https://github.com/IlyaGusev/rulm/tree/master/self_instruct)
21
+
22
+ ```python
23
+ from peft import PeftModel, PeftConfig
24
+ from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
25
+
26
+ MODEL_NAME = "IlyaGusev/saiga_30b_lora"
27
+ DEFAULT_MESSAGE_TEMPLATE = "<s>{role}\n{content}</s>\n"
28
+ DEFAULT_SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."
29
+
30
+ class Conversation:
31
+ def __init__(
32
+ self,
33
+ message_template=DEFAULT_MESSAGE_TEMPLATE,
34
+ system_prompt=DEFAULT_SYSTEM_PROMPT,
35
+ role_mapping=None,
36
+ start_token_id=1,
37
+ bot_token_id=9225
38
+ ):
39
+ self.message_template = message_template
40
+ self.role_mapping = role_mapping or {}
41
+ self.start_token_id = start_token_id
42
+ self.bot_token_id = bot_token_id
43
+ self.messages = [{
44
+ "role": "system",
45
+ "content": system_prompt
46
+ }]
47
+
48
+ def get_start_token_id(self):
49
+ return self.start_token_id
50
+
51
+ def get_bot_token_id(self):
52
+ return self.bot_token_id
53
+
54
+ def add_user_message(self, message):
55
+ self.messages.append({
56
+ "role": "user",
57
+ "content": message
58
+ })
59
+
60
+ def add_bot_message(self, message):
61
+ self.messages.append({
62
+ "role": "bot",
63
+ "content": message
64
+ })
65
+
66
+ def get_prompt(self, tokenizer):
67
+ final_text = ""
68
+ for message in self.messages:
69
+ message_text = self.message_template.format(**message)
70
+ final_text += message_text
71
+ final_text += tokenizer.decode([self.start_token_id, self.bot_token_id])
72
+ return final_text.strip()
73
+
74
+ def generate(model, tokenizer, prompt, generation_config):
75
+ data = tokenizer(prompt, return_tensors="pt")
76
+ data = {k: v.to(model.device) for k, v in data.items()}
77
+ output_ids = model.generate(
78
+ **data,
79
+ generation_config=generation_config
80
+ )[0]
81
+ output_ids = output_ids[len(data["input_ids"][0]):]
82
+ output = tokenizer.decode(output_ids, skip_special_tokens=True)
83
+ return output.strip()
84
+
85
+ config = PeftConfig.from_pretrained(MODEL_NAME)
86
+ model = AutoModelForCausalLM.from_pretrained(
87
+ config.base_model_name_or_path,
88
+ load_in_8bit=True,
89
+ device_map="auto"
90
+ )
91
+ model = PeftModel.from_pretrained(model, MODEL_NAME)
92
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
93
+ generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
94
+ print(generation_config)
95
+
96
+ inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"]
97
+ for inp in inputs:
98
+ conversation = Conversation()
99
+ conversation.add_user_message(inp)
100
+ prompt = conversation.get_prompt(tokenizer)
101
+
102
+ output = generate(model, tokenizer, prompt, generation_config)
103
+ print(inp)
104
+ print(output)
105
+ print()
106
+ print("==============================")
107
+ print()
108
+ ```
109
+
110
+ Examples:
111
+ ```
112
+ User: Почему трава зеленая?
113
+ Saiga: Трава зеленая потому, что она содержит хлорофилл - пигмент, который отвечает за зеленый цвет листьев растений. Хлорофилл используется для фотосинтеза - процесса преобразования света в энергию, необходимую для роста и развития растения. Кроме того, зеленый цвет является наиболее распространенным цветом среди всех растительных видов на Земле, поэтому большинство трав имеют зеленый цвет.
114
+ ```
115
+
116
+ ```
117
+ User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
118
+ Saiga: Однажды летом, когда все дети уже вышли из школы и начали проводить время на улице, Таня решила поиграть в футбол со своими друзьями. Она взяла свой любимый мяч и отправилась к парку, где они обычно играют.
119
+ Когда она пришла туда, ее друзья уже были готовы к игре. Они разделились на ��ве команды и начали играть. Таня была очень энергичной и активной, она бежала по полю, прыгала и ловила мяч.
120
+ Но однажды, когда она пыталась заблокировать удар соперника, мяч ударился ей прямо в лицо. Она упала на землю и не могла двигаться. Ее друзья сразу же подобрали ее и провели медицинскую помощь.
121
+ Так как Тане было больно, они решили не продолжать игру и вернуться домой. Но Таня не хотела пропустить возможность играть в футбол, поэтому она решила найти другой способ.
122
+ Она купила себе новый мяч и начала тренироваться дома. Она старалась делать упражнения каждый день, чтобы улучшить свою технику и скорость. Вскоре она стала лучшей футболисткой в своей команде.
123
+ Ее друзья были поражены ее умением играть в футбол и часто приглашали ее на матчи. Таня была очень горда своей новой профессией и никогда не переставала тренироваться.
124
+ В конце концов, благодаря своим усилиям, она стала настоящей звездой футбола и даже получила предложение от известного клуба. Она приняла его и начала играть на профессиональном уровне.
125
+ Таким образом, мяч стал для Тани не только игрушкой, но и источником ее успеха и счастья.
126
+ ```
127
+
128
+ ```
129
+ User: Реши уравнение 4x + 5 = 21
130
+ Saiga: Для решения этого уравнения нужно найти значение переменной x. Для этого нужно вычесть из левой части уравнения 5, чтобы получить 4x = 16. Далее, делим обе стороны на 4, чтобы получить x = 4. Таким образом, x равно 4.
131
+ ```
132
+
133
+ ```
134
+ User: Заполни пропуски в предложении. Дано: Я пытался ____ от маньяка, но он меня настиг
135
+ Saiga: Я пытался убежать от маньяка, но он меня настиг.
136
+ ```
137
+
138
+ v1:
139
+ - revision 3d3da94b0491cc4b72548e113c39060f228054cb
140
+ - wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/x2c19kfk)
141
+ - 4 datasets: ru_turbo_alpaca, ru_turbo_saiga, ru_sharegpt_cleaned, oasst1_ru_main_branch
142
+ - Datasets merging script: [create_chat_set.py](https://github.com/IlyaGusev/rulm/blob/ef58f3d82d6e7b3784d42167ff69188d3766ab61/self_instruct/src/data_processing/create_chat_set.py)
143
+ - Loss: 0.822
144
+ - Context length: 2000
145
+ - Conversational template: `"<s>{role}\n{content}</s>"`
146
+ - Possible roles: `["system", "user", "bot"]`
147
+ - System prompt: `"Ты — Сайга, русскоязычный автоматический ассистент. Ты разговарив