File size: 3,248 Bytes
7deb508
 
 
 
56e2e37
 
66a3123
56e2e37
 
 
 
 
 
 
 
 
db1702e
16814ca
56e2e37
 
 
 
 
d114b79
 
 
 
 
 
 
24c8264
 
db1702e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56e2e37
 
 
 
 
 
 
db1702e
56e2e37
db1702e
769b214
56e2e37
 
5a6a071
 
 
b2f3c47
56e2e37
 
db1702e
56e2e37
 
db1702e
 
 
769b214
db1702e
 
 
 
 
 
56e2e37
 
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
101
# import gradio as gr
# print('hello')
# import torch
# print('sdfsdf')
# def greet(sentiment):
#     return "Hello " + sentiment + "!!"

# iface = gr.Interface(fn=greet, inputs="text", outputs="text")
# iface.launch()

import gradio as gr
from NeuralTextGenerator import BertTextGenerator
# from transformers import pipeline

# generator = pipeline("sentiment-analysis")

# print('dfg')
model_name = "cardiffnlp/twitter-xlm-roberta-base" #"dbmdz/bert-base-italian-uncased"
en_model = BertTextGenerator(model_name)
tokenizer = en_model.tokenizer
model = en_model.model
device = model.device

en_model.tokenizer.add_special_tokens({'additional_special_tokens': [
    '[POSITIVE-0]', 
    '[POSITIVE-1]', 
    '[POSITIVE-2]',
    '[NEGATIVE-0]', 
    '[NEGATIVE-1]', 
    '[NEGATIVE-2]']})
en_model.model.resize_token_embeddings(len(en_model.tokenizer))

# def classify(sentiment):
#     parameters = {'n_sentences': 1,  
#               'batch_size': 2,
#               'avg_len':30,
#               'max_len':50,
#               # 'std_len' : 3,
#               'generation_method':'parallel',
#               'sample': True,
#               'burnin': 450,
#               'max_iter': 100,
#               'top_k': 100,
#               'seed_text': f"[{sentiment}-0] [{sentiment}-1] [{sentiment}-2] Ronaldo",
#             #   'verbose': True
#               }
#     sents = en_model.generate(**parameters)
#     gen_text = ''

#     for i, s in enumerate(sents):
#         gen_text += f'- GENERATED TWEET #{i}: {s}\n'

#     return gen_text

# demo = gr.Blocks()

# with demo:
#     gr.Markdown()
#     inputs = gr.Radio(["POSITIVE", "NEGATIVE"], label="Sentiment to generate") # gr.Dropdown(["POSITIVE", "NEGATIVE"], label="Sentiment to generate")
#     output = gr.Textbox(label="Generated tweet")
#     b1 = gr.Button("Generate")
#     b1.click(classify, inputs=inputs, outputs=output)



def sentence_builder(n_sentences, max_iter, sentiment, seed_text):
    parameters = {'n_sentences': n_sentences,  
              'batch_size': 2,
              'avg_len':30,
              'max_len':50,
              # 'std_len' : 3,
              'generation_method':'parallel',
              'sample': True,
              'burnin': 450,
              'max_iter': max_iter,
              'top_k': 100,
              'seed_text': f"[{sentiment}-0] [{sentiment}-1] [{sentiment}-2] {seed_text}",
              'verbose': True
              }
    sents = en_model.generate(**parameters)
    gen_text = ''

    for i, s in enumerate(sents):
        gen_text += f'- GENERATED TWEET #{i}: {s}\n'

    return gen_text
    # return f"""The {quantity} {animal}s from {" and ".join(countries)} went to the {place} where they {" and ".join(activity_list)} until the {"morning" if morning else "night"}"""


demo = gr.Interface(
    sentence_builder,
    [
        gr.Slider(1, 15, value=2, label="Num. Tweets", step=1, info="Number of tweets to be generated."),
        gr.Slider(50, 500, value=100, label="Max. iter", info="Maximum number of iterations for the generation."),
        gr.Radio(["POSITIVE", "NEGATIVE"], label="Sentiment to generate"),
        gr.Textbox('', label="Seed text", info="Seed text for the generation.")
    ],
    "text",
)

demo.launch()