File size: 4,354 Bytes
b31a2f6
 
 
1c98656
b31a2f6
3774ebc
b31a2f6
3774ebc
b31a2f6
a575d46
 
b31a2f6
 
 
 
a575d46
 
27bdf54
 
 
 
b31a2f6
1c98656
7a6a8cc
b31a2f6
 
 
df265bf
532af44
b31a2f6
df265bf
b31a2f6
 
 
 
 
 
 
 
431a7d1
 
b31a2f6
1c98656
7a6a8cc
b31a2f6
 
 
 
532af44
b31a2f6
df265bf
b31a2f6
 
 
 
 
 
 
 
431a7d1
b31a2f6
df265bf
1c98656
df265bf
1c98656
df265bf
1c98656
 
 
27bdf54
 
b31a2f6
 
df265bf
1c98656
 
 
 
df265bf
53ebfaf
431a7d1
 
 
1c98656
 
b31a2f6
1c98656
b31a2f6
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
import transformers
import torch
import tokenizers
import gradio as gr
import re

from PIL import Image


def get_model_gpt(model_name,tokenizer_name):
    tokenizer = transformers.GPT2Tokenizer.from_pretrained(tokenizer_name)
    model = transformers.GPT2LMHeadModel.from_pretrained(model_name)
    model.eval()
    return model, tokenizer

def get_model_t5(model_name,tokenizer_name):
    tokenizer = transformers.T5Tokenizer.from_pretrained(tokenizer_name)
    model = transformers.T5ForConditionalGeneration.from_pretrained(model_name)
    model.eval()
    return model, tokenizer


def predict_gpt(text, model, tokenizer, temperature=1.0):
    input_ids = tokenizer.encode(text, return_tensors="pt")
    with torch.no_grad():
        out = model.generate(input_ids, 
                            do_sample=True,
                            num_beams=4,
                            temperature= temperature,
                            top_p=0.75,
                            max_length=512,
                            eos_token_id = tokenizer.eos_token_id,
                            pad_token_id = tokenizer.pad_token_id,
                            repetition_penalty = 2.5,
                            num_return_sequences = 1,
                            output_attentions = True,
                            return_dict_in_generate=True,
                            )
    decode = lambda x : tokenizer.decode(x, skip_special_tokens=True)
    generated_text = list(map(decode, out['sequences']))[0].split('Описание :')[1]
    return 'Описание : '+ generated_text

def predict_t5(text, model, tokenizer, temperature=1.2):
    input_ids = tokenizer.encode(text, return_tensors="pt")
    with torch.no_grad():
        out = model.generate(input_ids, 
                        do_sample=True,
                        num_beams=4,
                        temperature=temperature,
                        top_p=0.35,
                        max_length=512,
                        length_penalty = 5.5,
                        output_attentions = True,
                        return_dict_in_generate=True,
                        repetition_penalty = 2.5,
                        num_return_sequences = 1
                        )
    decode = lambda x : tokenizer.decode(x, skip_special_tokens=True)
    generated_text = list(map(decode, out['sequences']))[0]
    return 'Описание '+generated_text

def generate(model,temp,text):
    if model == 'GPT':
                result = predict_gpt(text, gpt_model, gpt_tokenizer,temp)
    elif model == 'T5':
                result = predict_t5(text, t5_model, t5_tokenizer,temp)
    return result
         

gpt_model, gpt_tokenizer = get_model_gpt('mipatov/rugpt3_nb_descr', 'mipatov/rugpt3_nb_descr')
t5_model, t5_tokenizer = get_model_t5('mipatov/rut5_nb_descr', 'mipatov/rut5_nb_descr')


example = '  Название : Super_NB 2001 Gaming;\n Диагональ экрана : 21 " ;\n Разрешение экрана : 1337x228 ;\n Поверхность экрана : матовая ;\n Тип матрицы : nfc ;\n Процессор : CMD processor 7 ядер 16.16 ГГц (46.0 ГГц, в режиме Turbo) ;\n Оперативная память : 28 Гб DDR5 ;\n Тип видеокарты : интегрированный ;\n Видеокарта : qwerty-grafics ;\n SSD : 720 Гб ;\n USB 2.0 : 13 ;\n USB 3.0 : 22 ;\n HDMI : 11 ;\n Операционная система : CMD-shell ;\n Тип батареи : Li-Ion ;\n Количество ячеек батареи : 36 cell ;\n Энергоемкость батареи : 176 Wh ;\n Цвет : черный ;\n Размеры : 1.23 х  456 х  78.9 мм ;\n Вес : 19 кг ;\n Гарантия : 322 мес. ;\n Материал корпуса : пластик ;\n Время работы от батареи : 82ч ;\n Кард-ридер : есть WA SD ;'
demo = gr.Interface(
    fn=generate,
    inputs=[
        gr.components.Dropdown(label="Модель", choices=('GPT', 'T5')),
        gr.components.Slider(label="Температура",minimum = 0.9,maximum = 3.0,step = 0.1)
        gr.components.Textbox(label="Характеристики",value = example),
    ],
    outputs=[
        gr.components.Textbox(label="Описание",interactive = False),
    ],
)

demo.launch()