Text Generation
Russian
conversational
IlyaGusev commited on
Commit
1e5b0df
1 Parent(s): bd48231

Update README.md

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