File size: 3,812 Bytes
80129c2
a022c55
80129c2
 
 
915fb36
90c2a10
 
68c1bf8
80129c2
 
 
90c2a10
 
ed8f158
80129c2
 
fbce5cc
 
 
 
 
 
80129c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2b8f9f3
5ceccd9
8a4bbe5
 
58f0b57
10e698d
25d41aa
6634984
80129c2
 
 
 
 
a022c55
e8a157f
 
58f0b57
 
9e50c36
319a73a
7e0aa86
e157d16
 
 
 
 
e8a157f
feadd9a
58f0b57
e8a157f
 
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
import streamlit as st
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer, GPT2Tokenizer, GPT2LMHeadModel, MT5Model, AutoModelForSeq2SeqLM, BartForConditionalGeneration, BartTokenizer

# Frasi di esempio
examples = [
    "Caesar in Gallia bellum gessit. <mask> instructae erant, sed subito",
    "Est autem et aliud genus testudinis, quod <mask>, quemadmodum quae supra scripta sunt",
    "Quemadmodum vero minores rotae duriores et <mask>, sic phalangae et iuga, in quibus partibus habent minora a centro ad capita intervalla",
    "illud additur, ne, qui certum ordinem ex <mask>, ulli vos alteri hominum generi haerere vereamini nec timeatis vos"
]
examples_correct = [
    "Omnes legiones",
    "reliqua omnia habet",
    "difficiliores habent motus",
    "nostra definitione retinetis"
]

# Imposta una chiave di sessione per il testo input, così possiamo aggiornarlo
if "input_text_value" not in st.session_state:
    st.session_state["input_text_value"] = examples[0]
if "input_text_value_correct" not in st.session_state:    
    st.session_state["input_text_value_correct"] = examples_correct[0]

st.title("Completamento di frasi in testi Latino Antico")

st.write("Esempi di testo (clicca sul bottone per copiare la frase nel campo di input):")

# Per ogni frase, creiamo una riga con la frase + bottone "Usa questa frase"
for i, example in enumerate(examples, start=1):
    cols = st.columns([4,1])  # la prima colonna più larga per il testo, la seconda più stretta per il bottone
    with cols[0]:
        st.write(f"Esempio {i}: {example}")
    with cols[1]:
        # Se il bottone viene premuto, aggiorna la session state
        if st.button(f"Usa {i}"):
            st.session_state["input_text_value"] = example
            st.session_state["input_text_value_correct"] = examples_correct[i]

# Qui la text_input è associata alla chiave "input_text_value"
input_text = st.text_area(
    label="Testo:",
    height=150,  # Altezza in pixel
    key="input_text_value"
)

# Esempio: carichiamo un modello di linguaggio
# (sostituisci con i tuoi modelli)
#model = GPT2LMHeadModel.from_pretrained("Cicciokr/GPT2-Latin-GenText")
#tokenizer = GPT2Tokenizer.from_pretrained("Cicciokr/GPT2-Latin-GenText")
#model_name = "morenolq/bart-it"
model_name_mio = "Cicciokr/BART-la-s"
model_mio = AutoModelForSeq2SeqLM.from_pretrained(model_name_mio)
tokenizer_mio = AutoTokenizer.from_pretrained(model_name_mio)
#tokenizer_mio.pad_token_id = tokenizer_mio.eos_token_id

#generator = pipeline("text2text-generation", model=model, tokenizer=tokenizer)
generator_mio = pipeline("text2text-generation", model=model_mio, tokenizer=tokenizer_mio)

# Se l'utente ha inserito (o selezionato) un testo
if input_text:
    if 'input_text_value_correct' in st.session_state:
        st.write(f" Parola corretta: {st.session_state['input_text_value_correct']}\n")
        st.write(f" -----------------------------------------------------------\n")

    inputs_mio = tokenizer_mio(input_text, return_tensors="pt")
    output_mio = model_mio.generate(
        **inputs_mio,
        forced_bos_token_id=tokenizer_mio.bos_token_id,
        max_length=50, do_sample=True, top_p=0.96, num_return_sequences=5
        #num_return_sequences=1,
        #top_k=50,  # 🔹 Maggiore varietà nelle scelte
        #top_p=0.95,  # 🔹 Nucleus sampling per migliorare il realismo
        #temperature=0.8,  # 🔹 Bilancia la casualità
        #repetition_penalty=1.2,  # 🔹 Evita ripetizioni e loop
        #max_length=50  # 🔹 Previene ripetizioni infinite
    )
    generated_text_mio = tokenizer_mio.decode(output_mio[0], skip_special_tokens=True)
    #generated_text_mio = output_mio[0]["generated_text"]
    st.subheader("Risultato BART CC100:")
    st.write(f" Frase predetta: {generated_text_mio}\n")