sempl-it-v3-sentence-reorganizer-awq
SEMPL-IT aims to simplify Italian administrative texts using a progressive approach based on multiple specialized models. Each model addresses a specific aspect of the text transformation process, ensuring a step-by-step refinement.
Simplification Pipeline
The complete text simplification pipeline follows eight sequential steps:
- proofreading
- lex
- connectives
- expressions
- sentence-splitter
- nominalizations
- verbs
- sentence-reorganizer (this)
- explain
Web App
To integrate this model into the full system, check out:
- Frontend: GitHub Repository
- Backend: GitHub Repository
- Inference: GitHub Repository
Usage
Install the following dependencies:
pip install transformers==4.49.0
pip install autoawq==0.2.9
pip install peft==0.15.0
Define the system prompt and the text to simplify:
PROMPT = """Sei un esperto redattore di documenti istituzionali italiani.
Riorganizza le frasi rispettando l'ordine SVO (Soggetto, Verbo, Oggetto) ed esplicitando i soggetti solo se derivabili dal contesto. Sposta le parentetiche all'inzio o alla fine del periodo. **Non alterare il contenuto e lo stile del testo originale. Non modificare i verbi. Non utilizzare verbi in forma passiva e verbi in forma indefinita. Non dividere o unire frasi.**
# Steps
1. Leggi attentamente il testo istituzionale.
2. Individua le frasi che non rispettano l'ordine SVO (Soggetto, Verbo, Oggetto).
3. Riorganizza, quando possibile, le frasi individuate rispettando l'ordine SVO.
4. Esplicita i soggetti **solo se chiaramente deducibili dal contesto**.
5. Individua le frasi incidentali (parentetiche).
6. Sposta le parentetiche individuate all'inizio o alla fine del periodo.
# Output Format
Il testo modificato con l'originale formattazione e suddivisione in sezioni e paragrafi.
# Examples
- **Input**: La commissione, in sede di gara, dovrà verificare i documenti. Dovrà utilizzare i criteri inclusi nel presente disciplinare.
**Output**: La commissione dovrà verificare i documenti in sede di gara. La commissione dovrà utilizzare i criteri inclusi nel presente disciplinare.
- **Input**: L'ente ha stipulato un accordo con la società ReteVeloce. Questa, come gia detto, sarà responsabile del trasporto pubblico regionale.
**Output**: L'ente ha stipulato un accordo con la società ReteVeloce. Come gia detto, questa società sarà responsabile del trasporto pubblico regionale.
- **Input**: Il modulo, se necessario, deve essere inviato entro la scadenza prevista. L'ufficio competente può richiederlo in qualsiasi momento durante il processo di valutazione.
**Output**: Se necessario, il modulo deve essere inviato entro la scadenza prevista. L'ufficio competente può richiedere il modulo in qualsiasi momento durante il processo di valutazione.
# Notes
- Il testo fornito può essere complesso e richiede attenzione ai dettagli.
- Esegui solamente le operazioni descritte, **non eliminare e non modificare altri contenuti**.
- Assicurati che le implicazioni giuridiche e legali del documento siano mantenute.
- Non modificare il testo tra virgolette."""
TEXT_TO_SIMPLIFY = """Il documento individua le esigenze di sviluppo necessarie per assicurare che i principi delineati dalla Legge Regionale 23 dicembre 2004, n. 29 e dai successivi atti normativi, sulla essenziale funzione della ricerca e innovazione nelle Aziende Sanitarie della Regione Emilia-Romagna, si traducano in azioni concrete nel Servizio Sanitario Regionale.
Alla luce delle evidenze della letteratura internazionale, delle indicazioni della normativa nazionale e della valutazione di quanto già attuato a livello regionale negli anni passati, vengono individuati gli obiettivi di sviluppo e le linee per il raggiungimento dei suddetti obiettivi."""
Load SEMPL-IT model and tokenizer:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("VerbACxSS/sempl-it-v3-sentence-reorganizer-awq")
model = AutoModelForCausalLM.from_pretrained("VerbACxSS/sempl-it-v3-sentence-reorganizer-awq").to("cuda")
Define and apply chat template:
chat = [
{"role": "system", "content": PROMPT},
{"role": "assistant", "content": TEXT_TO_SIMPLIFY},
]
formatted_chat = tokenizer.apply_chat_template(
chat,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([formatted_chat], return_tensors="pt").to("cuda")
Use SEMPL_IT model with following sampling parameters to generate simplified_text
:
generated_ids = model.generate(
**model_inputs,
max_new_tokens=4096,
temperature=0.1,
top_p=0.2
)
simplified_text = tokenizer.decode(generated_ids[0][len(model_inputs.input_ids[0]):], skip_special_tokens=True)
print(simplified_text)
Acknowledgements
This contribution is a result of the research conducted within the framework of the PRIN 2020 (Progetti di Rilevante Interesse Nazionale) "VerbACxSS: on analytic verbs, complexity, synthetic verbs, and simplification. For accessibility" (Prot. 2020BJKB9M), funded by the Italian Ministero dell'Università e della Ricerca.