File size: 7,383 Bytes
095f268 8dfcef0 095f268 60b9593 095f268 b72f1c3 095f268 b72f1c3 095f268 b72f1c3 095f268 |
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 |
---
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
---
# GigaSaiga, Russian ruGPT-3.5-13B-based chatbot
Based on [ruGPT-3.5-13B](https://huggingface.co/ai-forever/ruGPT-3.5-13B).
This is an adapter-only version.
Colab: [link](https://colab.research.google.com/drive/1s_ymKs_g5-Hq-xeWYNW-19QC0VzozMtf?usp=sharing)
Training code: [link](https://github.com/IlyaGusev/rulm/tree/master/self_instruct)
```python
import torch
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
MODEL_NAME = "IlyaGusev/gigasaiga_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=2,
bot_token_id=46787
):
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/lwgw4a1w)
- 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)
- saiga13b_v2 vs gigasaiga: 112-11-53
|