Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from gradio.components import Label | |
import subprocess | |
import sys | |
def install(package): | |
subprocess.check_call([sys.executable, "-m", "pip", "install", package]) | |
install("numpy") | |
install("transformers") | |
install("torch") | |
import torch | |
from transformers import AutoTokenizer | |
from transformers import AutoModel | |
import numpy as np | |
import re | |
auth_token = os.environ.get("AUTH-TOKEN") | |
header = '''-------------------------------------------------------------------------------------------------- | |
<style> | |
.vertical-text { | |
writing-mode: vertical-lr; | |
text-orientation: upright; | |
background-color:red; | |
} | |
</style> | |
<center> | |
<body> | |
<span class="vertical-text" style="background-color:lightgreen;border-radius: 3px;padding: 3px;"> </span> | |
<span class="vertical-text" style="background-color:orange;border-radius: 3px;padding: 3px;"> D</span> | |
<span class="vertical-text" style="background-color:lightblue;border-radius: 3px;padding: 3px;"> E</span> | |
<span class="vertical-text" style="background-color:tomato;border-radius: 3px;padding: 3px;"> M</span> | |
<span class="vertical-text" style="background-color:lightgrey;border-radius: 3px;padding: 3px;"> O</span> | |
<span class="vertical-text" style="background-color:#CF9FFF;border-radius: 3px;padding: 3px;"> </span> | |
</body> | |
</center> | |
<br> | |
--------------------------------------------------------------------------------------------------''' | |
tokenizer_cl = tokenizer = AutoTokenizer.from_pretrained("osiria/distiluse-base-italian") | |
model_cl = AutoModel.from_pretrained("osiria/distiluse-base-italian") | |
def classify(text, classes, prompt = "L'argomento di cui parliamo è quindi: "): | |
text = text[:10000] | |
classes = {el.split(":")[0].strip(): el.split(":")[1].strip() for el in classes.split("\n")} | |
t_vec = model_cl(tokenizer_cl.encode(text, return_tensors = "pt", truncation = True, max_length = 512)).last_hidden_state[0,0,:].cpu().detach().numpy() | |
t_vec = t_vec/np.linalg.norm(t_vec) | |
t_vec = t_vec.reshape(-1, 1) | |
classes_mod = [prompt + re.sub("\s+", " ", classes[cl].lower().replace(",", " ")).strip() for cl in classes] | |
cl_vecs = np.array([model_cl(tokenizer_cl.encode(cl, return_tensors = "pt", truncation = True, max_length = 512)).last_hidden_state[0,0,:].cpu().detach().numpy() for cl in classes_mod]) | |
cl_vecs = cl_vecs/np.sqrt(np.sum(cl_vecs**2, axis = 1).reshape(-1,1)) | |
scores = np.dot(cl_vecs, t_vec).reshape(1,-1)[0] | |
scores = scores*(scores > 0) | |
scores = (scores/np.sum(scores)) | |
scores = scores*(scores > 0.05) | |
scores = (scores/np.sum(scores)) | |
scores = scores.tolist() | |
classes = list(classes.keys()) | |
output = list(zip(classes, scores)) | |
output = sorted(output, key = lambda tpl: tpl[1], reverse = True) | |
output = {tpl[0].capitalize(): tpl[1] for tpl in output} | |
return output | |
init_text = '''L'Agenzia Spaziale Italiana (ASI) è un ente governativo italiano, istituito nel 1988, che ha il compito di predisporre e attuare la politica aerospaziale italiana. Dipende e utilizza i fondi ricevuti dal Governo italiano per finanziare il progetto, lo sviluppo e la gestione operativa di missioni spaziali, con obiettivi scientifici e applicativi. | |
Gestisce missioni spaziali in proprio e in collaborazione con i maggiori organismi spaziali internazionali, prima tra tutte l'Agenzia spaziale europea (dove l'Italia è il terzo maggior contribuente dopo Francia e Germania, e a cui l'ASI corrisponde una parte del proprio budget), quindi la NASA e le altre agenzie spaziali nazionali. Per la realizzazione di satelliti e strumenti scientifici, l'ASI stipula contratti con le imprese, italiane e non, operanti nel settore aerospaziale. | |
Ha la sede principale a Roma e centri operativi a Matera (sede del Centro di geodesia spaziale Giuseppe Colombo) e Malindi, Kenya (sede del Centro spaziale Luigi Broglio). Il centro di Trapani-Milo, usato per i lanci di palloni stratosferici dal 1975, non è più operativo dal 2010. | |
Ha un organico di circa 393 dipendenti (al 2023), e un budget annuale al 2019 di circa 1,075 miliardi di euro. Le attività di ricerca vengono svolte in cooperazione con le Università, il CNR, gli osservatori astronomici, ecc. I campi di studio sono in genere le "scienze dell'universo, le scienze della Terra, le scienze della vita" e la tecnologia aerospaziale. | |
Con DM 08/06/2023 il Professore Teodoro Valente è stato nominato Presidente dell'Agenzia Spaziale Italiana.''' | |
init_classes = '''alimentazione: alimentazione, cibo, agricoltura, allevamento, nutrizione | |
arte: arte, pittura, scultura, moda | |
animali: animali, zoologia, botanica, piante | |
ambiente: ambiente, clima, sostenibilità, ecologia, inquinamento | |
economia: aziende, banche, economia, finanza, borsa | |
filosofia: etica, filosofia, religione, teologia | |
geografia: città, regioni, nazioni, geografia, geologia | |
giustizia: giustizia, magistratura, reati, criminalità | |
musica: musica, cantanti, gruppi musicali, generi musicali | |
cinema: cinema, film, televisione, spettacolo | |
intrattenimento: intrattenimento, tempo libero, svago, videogiochi | |
letteratura: letteratura, romanzi, narrativa, poesia | |
medicina: medicina, salute, farmaci, malattie, patologie | |
governo: governo, legge, politica, partiti, settore pubblico | |
scienza: scienza, ingegneria, tecnologia | |
sport: competizioni, sport | |
guerra: guerra, conflitti, battaglie, tematiche militari | |
storia: eventi, storia | |
società: tematiche sociali, tematiche internazionali | |
trasporti: automobili, treni, aerei, trasporti, veicoli | |
informatica: computer, smartphone, applicazioni, internet, social networks''' | |
init_output = classify(init_text, init_classes) | |
with gr.Blocks(css="footer {visibility: hidden}", theme=gr.themes.Default(text_size="lg", spacing_size="lg")) as interface: | |
with gr.Row(): | |
gr.Markdown(header) | |
with gr.Row(): | |
text = gr.Text(label="Write or paste a text", lines = 5, value = init_text) | |
with gr.Row(): | |
gr.Examples([["Alessandro Manzoni, nome completo Alessandro Francesco Tommaso Antonio Manzoni (Milano, 7 marzo 1785 – Milano, 22 maggio 1873), è stato uno scrittore, poeta e drammaturgo italiano. Considerato uno dei maggiori romanzieri italiani di tutti i tempi per il suo celebre romanzo I promessi sposi, caposaldo della letteratura italiana, Manzoni ebbe il merito principale di aver gettato le basi per il romanzo moderno e di aver così patrocinato l'unità linguistica italiana, sulla scia di quella letteratura moralmente e civilmente impegnata propria dell'Illuminismo italiano."], | |
["Oggi sto male perchè ho la febbre"], | |
["Mi sono registrato su Facebook"], | |
["Stasera guardo qualcosa su Netflix"], | |
["La battaglia delle Termòpili, o delle Termòpile, fu una battaglia combattuta da un'alleanza di poleis greche, guidata dal re di Sparta Leonida I, contro l'Impero persiano governato da Serse I. Si svolse in tre giorni, durante la seconda invasione persiana della Grecia, nell'agosto o nel settembre del 480 a.C. presso lo stretto passaggio delle Termopili (o, più correttamente, Termopile, 'Le porte calde'), contemporaneamente alla battaglia navale di Capo Artemisio."], | |
["Ieri ho comprato l'Xbox One"], | |
["Domani per pranzo preparo la pasta alle vongole"], | |
["Ho appena ascoltato l'ultimo album dei Green Day"], | |
["Sono chiamati gas serra quei gas presenti nell'atmosfera che riescono a trattenere, in maniera consistente, una parte considerevole della componente nell'infrarosso della radiazione solare che colpisce la Terra ed è emessa dalla superficie terrestre, dall'atmosfera e dalle nuvole. Tale proprietà causa il fenomeno noto come 'effetto serra' ed è verificabile da un'analisi spettroscopica in laboratorio."]], | |
inputs=[text]) | |
with gr.Row(): | |
classes = gr.Text(label="Classes (write a few classes in the form 'class_name: word1, word2, word3...' using 1 to 5 descriptive words for each class)", lines = 1, value = '''alimentazione: alimentazione, cibo, agricoltura, allevamento, nutrizione | |
arte: arte, pittura, scultura, moda | |
animali: animali, zoologia, botanica, piante | |
ambiente: ambiente, clima, sostenibilità, ecologia, inquinamento | |
economia: aziende, banche, economia, finanza, borsa | |
filosofia: etica, filosofia, religione, teologia | |
geografia: città, regioni, nazioni, geografia, geologia | |
giustizia: giustizia, magistratura, reati, criminalità | |
musica: musica, cantanti, gruppi musicali, generi musicali | |
cinema: cinema, film, televisione, spettacolo | |
intrattenimento: intrattenimento, tempo libero, svago, videogiochi | |
letteratura: letteratura, romanzi, narrativa, poesia | |
medicina: medicina, salute, farmaci, malattie, patologie | |
governo: governo, legge, politica, partiti, settore pubblico | |
scienza: matematica, scienza, ingegneria, tecnologia, spazio | |
sport: competizioni, sport | |
guerra: guerra, conflitti, battaglie, tematiche militari | |
storia: eventi, storia | |
società: tematiche sociali, tematiche internazionali | |
trasporti: automobili, treni, aerei, trasporti, veicoli | |
informatica: computer, smartphone, applicazioni, internet, social networks''') | |
with gr.Row(): | |
button = gr.Button("Classify").style(full_width=False) | |
with gr.Row(): | |
with gr.Column(): | |
output = Label(label="Result") | |
with gr.Row(): | |
with gr.Column(): | |
footer = gr.Markdown("<center>A few examples in this demo are extracted from Wikipedia</center>") | |
button.click(classify, inputs=[text, classes], outputs = [output]) | |
interface.launch() |