IlyaGusev commited on
Commit
93aed03
·
2 Parent(s): 11d6dd8 60b9593

Merge branch 'main' of https://huggingface.co/IlyaGusev/gigasaiga_lora

Browse files
Files changed (2) hide show
  1. README.md +143 -0
  2. tokenizer_config.json +2 -1
README.md ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ datasets:
3
+ - IlyaGusev/ru_turbo_alpaca
4
+ - IlyaGusev/ru_turbo_saiga
5
+ - IlyaGusev/ru_sharegpt_cleaned
6
+ - IlyaGusev/oasst1_ru_main_branch
7
+ - IlyaGusev/ru_turbo_alpaca_evol_instruct
8
+ - lksy/ru_instruct_gpt4
9
+ language:
10
+ - ru
11
+ pipeline_tag: conversational
12
+ license: cc-by-4.0
13
+ ---
14
+
15
+ # GigaSaiga, Russian LLaMA-based chatbot
16
+
17
+ Based on [ruGPT-3.5-13B](https://huggingface.co/ai-forever/ruGPT-3.5-13B).
18
+
19
+ This is an adapter-only version.
20
+
21
+ Colab: [link](https://colab.research.google.com/drive/1s_ymKs_g5-Hq-xeWYNW-19QC0VzozMtf?usp=sharing)
22
+
23
+ Training code: [link](https://github.com/IlyaGusev/rulm/tree/master/self_instruct)
24
+
25
+ ```python
26
+ import torch
27
+ from peft import PeftModel, PeftConfig
28
+ from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
29
+
30
+ MODEL_NAME = "IlyaGusev/gigasaiga_lora"
31
+ DEFAULT_MESSAGE_TEMPLATE = "<s> {role}\n{content}</s>\n"
32
+ DEFAULT_SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."
33
+
34
+ class Conversation:
35
+ def __init__(
36
+ self,
37
+ message_template=DEFAULT_MESSAGE_TEMPLATE,
38
+ system_prompt=DEFAULT_SYSTEM_PROMPT,
39
+ start_token_id=2,
40
+ bot_token_id=46787
41
+ ):
42
+ self.message_template = message_template
43
+ self.start_token_id = start_token_id
44
+ self.bot_token_id = bot_token_id
45
+ self.messages = [{
46
+ "role": "system",
47
+ "content": system_prompt
48
+ }]
49
+
50
+ def get_start_token_id(self):
51
+ return self.start_token_id
52
+
53
+ def get_bot_token_id(self):
54
+ return self.bot_token_id
55
+
56
+ def add_user_message(self, message):
57
+ self.messages.append({
58
+ "role": "user",
59
+ "content": message
60
+ })
61
+
62
+ def add_bot_message(self, message):
63
+ self.messages.append({
64
+ "role": "bot",
65
+ "content": message
66
+ })
67
+
68
+ def get_prompt(self, tokenizer):
69
+ final_text = ""
70
+ for message in self.messages:
71
+ message_text = self.message_template.format(**message)
72
+ final_text += message_text
73
+ final_text += tokenizer.decode([self.start_token_id, self.bot_token_id])
74
+ return final_text.strip()
75
+
76
+
77
+ def generate(model, tokenizer, prompt, generation_config):
78
+ data = tokenizer(prompt, return_tensors="pt")
79
+ data = {k: v.to(model.device) for k, v in data.items()}
80
+ output_ids = model.generate(
81
+ **data,
82
+ generation_config=generation_config
83
+ )[0]
84
+ output_ids = output_ids[len(data["input_ids"][0]):]
85
+ output = tokenizer.decode(output_ids, skip_special_tokens=True)
86
+ return output.strip()
87
+
88
+ config = PeftConfig.from_pretrained(MODEL_NAME)
89
+ model = AutoModelForCausalLM.from_pretrained(
90
+ config.base_model_name_or_path,
91
+ load_in_8bit=True,
92
+ torch_dtype=torch.float16,
93
+ device_map="auto"
94
+ )
95
+ model = PeftModel.from_pretrained(
96
+ model,
97
+ MODEL_NAME,
98
+ torch_dtype=torch.float16
99
+ )
100
+ model.eval()
101
+
102
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, use_fast=False)
103
+ generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
104
+ print(generation_config)
105
+
106
+ inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"]
107
+ for inp in inputs:
108
+ conversation = Conversation()
109
+ conversation.add_user_message(inp)
110
+ prompt = conversation.get_prompt(tokenizer)
111
+
112
+ output = generate(model, tokenizer, prompt, generation_config)
113
+ print(inp)
114
+ print(output)
115
+ print()
116
+ print("==============================")
117
+ print()
118
+ ```
119
+
120
+ Examples:
121
+ ```
122
+ User: Почему трава зеленая?
123
+ Saiga: Трава имеет зеленый цвет благодаря хлорофиллу - пигменту растений, который поглощает световую энергию и преобразует ее в химическую энергию для роста растения. Хлорофилл также придает траве зеленоватый оттенок при солнечном свете.
124
+ ```
125
+
126
+ ```
127
+ User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч
128
+ Saiga: Таня сидела на скамейке в парке и играла со своим любимым мячиком. Она была увлечена игрой настолько, что не замечала ничего вокруг себя. Вдруг она услышала звук приближающихся шагов. Обернувшись, она увидела молодого человека, который шел к ней по дорожке парка. Он был одет в джинсы и футболку, а его волосы были собраны в хвост.
129
+ - Привет! - сказал он Тане.
130
+ Она улыбнулась ему и кивнула головой. Молодой человек подошел ближе и сел рядом с Таней на скамейку. Они начали разговаривать о разных вещах, таких как погода, игры и фильмы. В какой-то момент молодой человек спросил у Тани, играет ли она еще в игру под названием "мяч".
131
+ - Конечно, я играю каждый день, - ответила Таня.
132
+ Молодой человек улыбнулся ей и достал из кармана свой любимый красный мяч. Он протянул его Тане и попросил ее поиграть вместе с ним. Таня взяла мяч и начала играть с молодым человеком. Это было так весело, что они забыли обо всем на свете. Мячик летал между ними, ударяясь об землю и отскакивая обратно. Они смеялись и радовались игре.
133
+ Когда игра закончилась, Таня поблагодарила своего нового друга за то, что он показал ей такую интересную игру. Молодой человек ответил, что это было для него удовольствием провести время с такой милой девушкой. Затем они попрощались и разошлись в разные стороны.
134
+ С тех пор Таня часто вспоминала эту встречу и думала о том, насколько же приятно проводить время с новыми друзьями.
135
+
136
+ ```
137
+
138
+ v1:
139
+ - dataset code revision 7712a061d993f61c49b1e2d992e893c48acb3a87
140
+ - wandb [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/lwgw4a1w)
141
+ - 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
142
+ - Datasets merging script: [create_chat_set.py](https://github.com/IlyaGusev/rulm/blob/e4238fd9a196405b566a2d5838ab44b7a0f4dc31/self_instruct/src/data_processing/create_chat_set.py)
143
+ - saiga13b_v2 vs gigasaiga: 112-11-53
tokenizer_config.json CHANGED
@@ -37,5 +37,6 @@
37
  "normalized": true,
38
  "rstrip": false,
39
  "single_word": false
40
- }
 
41
  }
 
37
  "normalized": true,
38
  "rstrip": false,
39
  "single_word": false
40
+ },
41
+ "padding_side": "left"
42
  }