IlyaGusev commited on
Commit
dcd342e
1 Parent(s): dac7454

Update README.md

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