|
import streamlit as st |
|
import torch |
|
import numpy as np |
|
import transformers |
|
import random |
|
import textwrap |
|
|
|
@st.cache_data |
|
def load_model(): |
|
model_finetuned = transformers.AutoModelWithLMHead.from_pretrained( |
|
'tinkoff-ai/ruDialoGPT-small', |
|
output_attentions = False, |
|
output_hidden_states = False |
|
) |
|
model_finetuned.load_state_dict(torch.load('GPT_sonnik_only.pt', map_location=torch.device('cpu'))) |
|
tokenizer = transformers.AutoTokenizer.from_pretrained('tinkoff-ai/ruDialoGPT-small') |
|
return model_finetuned, tokenizer |
|
|
|
def preprocess_text(text_input, tokenizer): |
|
prompt = tokenizer.encode(text_input, return_tensors='pt') |
|
return prompt |
|
|
|
def predict_sentiment(model, prompt, temp, num_generate): |
|
print('1') |
|
with torch.inference_mode(): |
|
print('2') |
|
result = model.generate( |
|
input_ids=prompt, |
|
max_length=100, |
|
num_beams=5, |
|
do_sample=True, |
|
temperature=float(temp), |
|
top_k=50, |
|
top_p=0.6, |
|
no_repeat_ngram_size=3, |
|
num_return_sequences=num_generate, |
|
).cpu().numpy() |
|
print(result) |
|
return result |
|
|
|
st.title('Text generation with dreambook') |
|
|
|
model, tokenizer = load_model() |
|
|
|
text_input = st.text_input("Enter some text about movie") |
|
max_len = st.slider('Length of sequence', 0, 100, 50) |
|
temp = st.slider('Temperature', 1, 30, 1) |
|
num_generate = st.text_input("Enter number of sequences") |
|
|
|
if st.button('Generate'): |
|
print('uirhf') |
|
prompt = preprocess_text(text_input, tokenizer) |
|
print('uirhf') |
|
result = predict_sentiment(model, prompt, temp, int(num_generate)) |
|
print('uirhf') |
|
for i in result: |
|
st.write(textwrap.fill(tokenizer.decode(i), max_len)) |