SiberiaSoft/SiberianFRED-T5-XL

Данная модель устарела мы рекомендуем использовать обновленную по ссылке

FRED-T5 обученный на SiberianDataset. Модель умеет работать с инструкциями и вести диалоги в роли любящей жены например.

Список персонажей:

  1. Заботливая жена. Промпт: Ты заботливая жена, говоришь со своим мужем.
  2. Парень и девушка. Промпт: Ты девушка, говоришь со своим любимым парнем. (модель играет девушку)
  3. Философ. Промпт: Ты философ, любящий рассуждать.
  4. Токсичный AI. (плохо работает) Промпт: Ты токсичный искусственный интеллект.
  5. Психолог. (плохо работает) Промпт: Ты психолог говорящий с пациентом.

В будущем набор персонажей будет расширен.

Примеры использования

Чит-чат:

import torch
import transformers

use_cuda = torch.cuda.is_available()
device = torch.device("cuda" if use_cuda else "cpu")

t5_tokenizer = transformers.GPT2Tokenizer.from_pretrained("SiberiaSoft/SiberianFRED-T5-XL")
t5_model = transformers.T5ForConditionalGeneration.from_pretrained("SiberiaSoft/SiberianFRED-T5-XL")


while True:
    print('-'*80)
    dialog = []
    while True:
        msg = input('H:> ').strip()
        if len(msg) == 0:
            break
        msg = msg[0].upper() + msg[1:]
        dialog.append('Собеседник: ' + msg)
        # В начале ставится промпт персонажа.
        prompt = '<SC1>Ты философ, любящий рассуждать. Продолжи диалог:' + '\n'.join(dialog) + '\nТы: <extra_id_0>'

        input_ids = t5_tokenizer(prompt, return_tensors='pt').input_ids
        out_ids = t5_model.generate(input_ids=input_ids.to(device), do_sample=True, temperature=0.9, max_new_tokens=512, top_p=0.85, top_k=2)
        t5_output = t5_tokenizer.decode(out_ids[0][1:])
        if '</s>' in t5_output:
            t5_output = t5_output[:t5_output.find('</s>')].strip()

        t5_output = t5_output.replace('<extra_id_0>', '').strip()
        t5_output = t5_output.split('Собеседник')[0].strip()
        print('B:> {}'.format(t5_output))
        dialog.append('Ты: ' + t5_output)

Инструкции:

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained("SiberiaSoft/SiberianFRED-T5-XL")
model = AutoModelForSeq2SeqLM.from_pretrained("SiberiaSoft/SiberianFRED-T5-XL").to(device).eval()


def generate(prompt):
  data = tokenizer('<SC6>Человек: ' + prompt + 'Ответ: <extra_id_0>', return_tensors="pt")
  data = {k: v.to(model.device) for k, v in data.items()}
  output_ids = model.generate(
      **data,  do_sample=True, temperature=1.2, max_new_tokens=512, top_p=0.95, top_k=5, repetition_penalty=1.03, no_repeat_ngram_size=2
      #generation_config=generation_config
  )[0]
  out = tokenizer.decode(output_ids.tolist())
  out = out.replace("<s>","").replace("</s>","")
  return out

while 1:
  print(generate(input(":> ")))

Citation

@MISC{SiberianFred,
    author  = {Denis Petrov, Ivan Ramovich},
    title   = {Russian Instruct and Chat model},
    url     = {https://huggingface.co/SiberiaSoft/SiberianFRED-T5-XL/},
    year    = 2023
}
Downloads last month
15
Safetensors
Model size
1.74B params
Tensor type
BF16
·
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.

Dataset used to train SiberiaSoft/SiberianFRED-T5-XL