Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer, GPT2Tokenizer, GPT2LMHeadModel, MT5Model, AutoModelForSeq2SeqLM
|
3 |
+
|
4 |
+
|
5 |
+
# Imposta una chiave di sessione per il testo input, così possiamo aggiornarlo
|
6 |
+
if "input_text_value" not in st.session_state:
|
7 |
+
st.session_state["input_text_value"] = "His nuntiis litterisque commotus Caesar duas legiones in citeriore Gallia novas <extra_id_0> in ulteriorem Galliam qui deduceret Q. Pedium legatum misit."
|
8 |
+
if "input_text_value_correct" not in st.session_state:
|
9 |
+
st.session_state["input_text_value_correct"] = "conscripsit et inita aestate"
|
10 |
+
|
11 |
+
# Frasi di esempio
|
12 |
+
examples = [
|
13 |
+
"Caesar in Gallia bellum gessit. <extra_id_0> instructae erant, sed subito",
|
14 |
+
"His nuntiis litterisque commotus Caesar duas legiones in citeriore Gallia novas <extra_id_0> in ulteriorem Galliam qui deduceret Q. Pedium legatum misit.",
|
15 |
+
"Illi ante inito, ut intellectum est, consilio, quod deditione facta nostros praesidia deducturos aut denique indiligentius servaturos crediderant, partim cum iis quae retinuerant et celaverant armis, partim scutis ex cortice factis aut viminibus intextis, quae subito, ut temporis exiguitas postulabat, pellibus induxerant, tertia vigilia, [MASK], omnibus copiis repente ex oppido eruptionem fecerunt.",
|
16 |
+
"Primum igitur illud est, ex quo intellegi possit debuisse Cluentium magno opere causae confidere, quod certissimis [MASK]. Hoc loco faciendum mihi, iudices, est ut vobis breviter illa quibus Albius est condemnatus crimina exponam."
|
17 |
+
]
|
18 |
+
examples_correct = [
|
19 |
+
"Omnes legiones",
|
20 |
+
"conscripsit et inita aestate",
|
21 |
+
"qua minime arduus ad nostras munitiones ascensus videbatur",
|
22 |
+
"criminibus et testibus fretus ad accusandum descenderit"
|
23 |
+
]
|
24 |
+
|
25 |
+
st.title("Completamento di frasi in testi Latino Antico")
|
26 |
+
|
27 |
+
st.write("Esempi di testo (clicca sul bottone per copiare la frase nel campo di input):")
|
28 |
+
|
29 |
+
# Per ogni frase, creiamo una riga con la frase + bottone "Usa questa frase"
|
30 |
+
for i, example in enumerate(examples, start=1):
|
31 |
+
cols = st.columns([4,1]) # la prima colonna più larga per il testo, la seconda più stretta per il bottone
|
32 |
+
with cols[0]:
|
33 |
+
st.write(f"Esempio {i}: {example}")
|
34 |
+
with cols[1]:
|
35 |
+
# Se il bottone viene premuto, aggiorna la session state
|
36 |
+
if st.button(f"Usa {i}"):
|
37 |
+
st.session_state["input_text_value"] = example
|
38 |
+
st.session_state["input_text_value_correct"] = examples_correct[i]
|
39 |
+
|
40 |
+
# Qui la text_input è associata alla chiave "input_text_value"
|
41 |
+
input_text = st.text_area(
|
42 |
+
label="Testo:",
|
43 |
+
height=150, # Altezza in pixel
|
44 |
+
key="input_text_value"
|
45 |
+
)
|
46 |
+
|
47 |
+
# Esempio: carichiamo un modello di linguaggio
|
48 |
+
# (sostituisci con i tuoi modelli)
|
49 |
+
#model = GPT2LMHeadModel.from_pretrained("Cicciokr/GPT2-Latin-GenText")
|
50 |
+
#tokenizer = GPT2Tokenizer.from_pretrained("Cicciokr/GPT2-Latin-GenText")
|
51 |
+
tokenizer = AutoTokenizer.from_pretrained("google/mt5-small", use_fast=False)
|
52 |
+
model = AutoModelForSeq2SeqLM.from_pretrained("google/mt5-small")
|
53 |
+
#tokenizer.pad_token_id = tokenizer.eos_token_id
|
54 |
+
generator = pipeline("text2text-generation", model=model, tokenizer=tokenizer)
|
55 |
+
|
56 |
+
|
57 |
+
# Se l'utente ha inserito (o selezionato) un testo
|
58 |
+
if input_text:
|
59 |
+
# Sostituiamo [MASK] con <mask> (lo tokenizer Roberta se lo aspetta così)
|
60 |
+
prompt = "Completa il seguente testo in latino: "+input_text
|
61 |
+
inputs = tokenizer(prompt, return_tensors="pt")
|
62 |
+
#output = model.generate(**inputs, max_length=512, num_return_sequences=1)
|
63 |
+
output = model.generate(**inputs, max_length=256, num_return_sequences=1, temperature=0.9, top_k=50, top_p=0.95)
|
64 |
+
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
|
65 |
+
st.subheader("Risultato:")
|
66 |
+
if 'input_text_value_correct' in st.session_state:
|
67 |
+
st.write(f" Parola corretta: {st.session_state['input_text_value_correct']}\n")
|
68 |
+
st.write(f" Frase predetta: {generated_text}\n")
|
69 |
+
#st.write(f" Frase predetta: {tokenizer.decode(output[0], skip_special_tokens=True)}\n")
|
70 |
+
print(output)
|