Spaces:
Runtime error
Runtime error
File size: 3,935 Bytes
1b83f09 1fe4f8f 1b83f09 1fe4f8f f81d65c 1b83f09 f81d65c 1b83f09 1fe4f8f 1b83f09 1fe4f8f 1b83f09 f81d65c 1b83f09 f81d65c |
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 |
import numpy
import streamlit as st
import torch
st.title('Генерация текста GPT-моделью')
st.subheader('Это приложение показывает разницу в генерации текста моделью rugpt3small, обученной на документах общей тематики и этой же моделью, дообученной на анекдотах')
device = 'cuda' if torch.cuda.is_available() else 'cpu'
# Загружаем токенайзер модели
from transformers import GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('sberbank-ai/rugpt3small_based_on_gpt2')
from transformers import GPT2LMHeadModel
# Эту модель просто подгружаем
model_init = GPT2LMHeadModel.from_pretrained(
'sberbank-ai/rugpt3small_based_on_gpt2',
output_attentions = False,
output_hidden_states = False,
)
model_init.to(device);
# Это обученная модель, в нее загружаем веса
model = GPT2LMHeadModel.from_pretrained(
'sberbank-ai/rugpt3small_based_on_gpt2',
output_attentions = False,
output_hidden_states = False,
)
# Подгружаем сохраненные веса модели и загружаем их в модель
m = torch.load('model.pt')
model.load_state_dict(m)
model.to(device);
str = st.text_input('Введите 1-4 слова начала текста, и подождите минутку', 'Мужик спрашивает у официанта')
# модель без дообучения
# prompt – строка, которую примет на вход и продолжит модель
# токенизируем строку
prompt = tokenizer.encode(str, return_tensors='pt').to(device)
# out будет содержать результаты генерации в виде списка
out1 = model_init.generate(
# входная строка
input_ids=prompt,
# максимальная длина генерируемой последовательности
max_length=150,
# num_beams
num_beams=5,
# применяем сэмплирование
do_sample=True,
# применяем температуру
temperature=1.,
# топ слов по вероятности
top_k=50,
# топ слов по суммарной вероятности
top_p=0.6,
# сколько (постараться) не повторять n_gram подряд
no_repeat_ngram_size=3,
# сколько вернуть генераций
num_return_sequences=3,
).cpu().numpy() #).numpy()
st.write('\n------------------\n')
st.subheader('Тексты на модели, обученной документами всех тематик:')
# out содержит результаты
# декодируем и печатаем
n = 0
for out_ in out1:
n += 1
st.write(tokenizer.decode(out_).rpartition('.')[0],'.')
st.write('\n------------------\n')
# print(tokenizer.decode(out_))
# дообученная модель
with torch.inference_mode():
# prompt = 'Мужик спрашивает официанта'
# prompt = tokenizer.encode(str, return_tensors='pt')
out2 = model.generate(
input_ids=prompt,
max_length=150,
num_beams=1,
do_sample=True,
temperature=1.,
top_k=5,
top_p=0.6,
no_repeat_ngram_size=2,
num_return_sequences=3,
).cpu().numpy() #).cpu().numpy()
st.subheader('Тексты на модели, обученной документами всех тематик и дообученной анекдотами:')
n = 0
for out_ in out2:
n += 1
st.write(tokenizer.decode(out_).rpartition('.')[0],'.')
# print(textwrap.fill(tokenizer.decode(out_), 100), end='\n------------------\n')
st.write('\n------------------\n')
|