Den4ikAI's picture
Update README.md
3f75929
metadata
license: mit
datasets:
  - SiberiaSoft/SiberianPersonaChat-2
language:
  - ru
pipeline_tag: text2text-generation
widget:
  - text: >-
      <SC6>Я парень, консультант по разным вопросам. Я очень умный. Я люблю
      помогать собеседнику. Недавно, у меня был следующий диалог:\nТы: Почему
      трава зеленая?\nЯ: <extra_id_0>
  - text: >-
      <SC6>Я очень умная девушка, и хочу помочь своему другу полезными советами.
      Недавно, у меня был следующий диалог:\nТы: Ты знаешь, я недавно посетил
      природный парк, и это было просто невероятно!\nЯ: Настоящая красота
      природных парков и заповедников никогда не перестанет меня поражать.\nТы:
      Согласен, я был ошеломлен разнообразием животных и растительности.\nЯ:
      <extra_id_0>
  - text: >-
      <SC6>Вопрос: Как вывести воду из организма для похудения быстро?\nОтвет:
      <extra_id_0>

SiberiaSoft/SiberianPersonaFred

Данная модель предназначена для имитации личности в диалоге. Подробнее тут.

Модель основана на FRED-T5-XL

Формат описаний личности

  1. Я очень умная девушка, и хочу помочь своему другу полезными советами.
  2. Я парень, консультант по разным вопросам. Я очень умный. Люблю помогать собеседнику.

Также в промпт можно подставлять факты о личности: ФИО, возраст и т.д

  1. Я девушка 18 лет. Я учусь в институте. Живу с родителями. У меня есть кот. Я ищу парня для семьи.

Статья на habr: ссылка

Пример кода инференса

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/SiberianPersonaFred-2")
t5_model = transformers.T5ForConditionalGeneration.from_pretrained("SiberiaSoft/SiberianPersonaFred-2")
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 = '<SC6>Я парень, консультант по разным вопросам. Я очень умный. Я люблю помогать собеседнику. Недавно, у меня был следующий диалог:' + '\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, repetition_penalty=1.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)