From b3313ca1c7619cfadeb3f7346137dc157d357bb7 Mon Sep 17 00:00:00 2001 From: sudoantonio Date: Fri, 7 Aug 2026 07:51:38 +0200 Subject: [PATCH] Document DS4 experiment and partial results --- .env.example | 3 +- NOTICE | 3 + README.md | 125 +++++++++++++++++++++--------- docs/ARCHITECTURE.md | 8 +- docs/EXPERIMENTAL_RESULTS.md | 124 +++++++++++++++++++++++++++++ docs/METHODOLOGY.md | 13 +++- docs/ROADMAP.md | 4 +- docs/assets/welfaregraph-g1.jpeg | Bin 0 -> 59385 bytes lean_prompt_thesis/ai.py | 3 +- tools/scraper/classifica_bandi.py | 3 + 10 files changed, 242 insertions(+), 44 deletions(-) create mode 100644 docs/EXPERIMENTAL_RESULTS.md create mode 100644 docs/assets/welfaregraph-g1.jpeg diff --git a/.env.example b/.env.example index 3af6fbf..1b453d5 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,9 @@ +# DS4 / DwarfStar local OpenAI-compatible server LEAN_AI_BASE_URL=http://127.0.0.1:8000/v1 LEAN_AI_API_KEY=local-development +# Model used in the thesis experiment LEAN_AI_MODEL=deepseek-v4-flash LEAN_AI_TIMEOUT=7200 LEAN_AI_RETRIES=3 LEAN_AI_BACKOFF=5 LEAN_MAX_BANDO_CHARS=40000 - diff --git a/NOTICE b/NOTICE index 5a9ec85..fee0cc3 100644 --- a/NOTICE +++ b/NOTICE @@ -4,3 +4,6 @@ Copyright 2026 Antonio De Luca This distribution includes a research corpus derived from third-party public-sector documents. Apache-2.0 applies to original project code and does not replace the terms or attribution requirements of those source documents. + +The graph image in docs/assets/welfaregraph-g1.jpeg is an experimental project +output supplied by the thesis author. diff --git a/README.md b/README.md index f5294fb..46567d5 100644 --- a/README.md +++ b/README.md @@ -2,38 +2,89 @@ **Formalizzazione e prototipo eseguibile per la classificazione semantica dei bandi e l'associazione guidata tra bandi e soggetti giuridici.** +![Grafo operativo G1 prodotto nella sperimentazione](docs/assets/welfaregraph-g1.jpeg) + +*Grafo operativo G1 ottenuto nella sperimentazione parziale sul dominio dei bandi. La versione navigabile e gli artefatti strutturati sono disponibili in [`examples/results`](examples/results/).* + WelfareGraph raccoglie il codice, i questionari e gli artefatti sperimentali sviluppati per la tesi magistrale sul welfare data-driven. Il progetto traduce in Python i concetti formalizzati in Lean in [mathprompt](https://github.com/francescoantoniodeluca/mathprompt): domini semantici, grafi operativi di differenziazione, firme domanda-risposta, regole trans-dominio e inferenza guidata dal dominio target. -Questa repository contiene l'implementazione reale utilizzata nella sperimentazione, non un prodotto commerciale né un sistema automatico di decisione. +Questa repository contiene l'implementazione reale utilizzata nella sperimentazione. È un prototipo di ricerca, non un prodotto commerciale né un sistema automatico di decisione. + +## Stato della sperimentazione + +La sperimentazione è **parziale** e riguarda principalmente il dominio `D1_bandi`: + +- raccolta e filtro dei documenti; +- costruzione del questionario base D1; +- classificazione e attraversamento del grafo operativo G1; +- produzione e confronto delle firme operative dei bandi. + +La seconda fase non è stata completata empiricamente. Manca la progettazione, la stabilizzazione e l'uso su profili reali del **secondo questionario D2 dedicato agli enti**. Questo questionario dovrà semplificare il questionario base selezionando un insieme ridotto di domande sulle caratteristiche dell'organizzazione, sufficiente a indurre soltanto i requisiti D1 pertinenti. Di conseguenza, matching ente-bando, ranking finale e valutazione human-in-the-loop restano sviluppi successivi. + +Il file [`questionario_D2_estrazione_requisiti_normalizzato.json`](questionnaires/questionario_D2_estrazione_requisiti_normalizzato.json) conserva una bozza separata di schema per l'estrazione dei requisiti dei bandi. Le sue 45 domande **non costituiscono** il questionario D2 per i soggetti giuridici già validato e utilizzato nella sperimentazione. + +## Modello utilizzato: DeepSeek V4 Flash tramite DS4 + +Tutte le fasi sperimentali che richiedevano inferenza linguistica sono state eseguite con **DeepSeek V4 Flash**, servito localmente tramite **[DS4 / DwarfStar](https://github.com/antirez/ds4)**, il motore di inferenza open source sviluppato da **Salvatore Sanfilippo (antirez)**. + +In termini tecnici, DeepSeek V4 Flash è il modello linguistico e DS4 è il runtime che lo esegue ed espone attraverso un endpoint OpenAI-compatible. Nella sperimentazione questa configurazione è stata usata per: -## Cosa implementa +- classificare i documenti come `BANDO` o `ALTRO` e disambiguare più candidati; +- rispondere alle domande del questionario D1 durante l'attraversamento del grafo; +- proporre domande discriminanti quando più bandi mantenevano la stessa firma; +- generare, a livello prototipale, domande e regole trans-dominio. + +Le richieste sono state eseguite a temperatura zero, con output JSON vincolato quando previsto. I test automatici utilizzano invece un client simulato e non misurano le prestazioni reali di DS4 o del modello. + +## Cosa implementa il codice La pipeline è articolata in quattro algoritmi: -1. **`build_g1`** costruisce il dominio `D1_bandi` e il grafo operativo `G1`, partendo dal questionario oppure generando domande con un modello linguistico. +1. **`build_g1`** costruisce il dominio `D1_bandi` e il grafo operativo `G1`, partendo dal questionario oppure generando domande con il modello. 2. **`infer_g1`** attraversa `G1` per un singolo bando e ne calcola la firma operativa, cioè l'insieme delle coppie domanda-risposta raggiunte. -3. **`build_induction_objects`** costruisce il dominio `D2_soggetti_giuridici`, le regole trans-dominio e gli insiemi minimi di premesse che inducono risposte in `G1`. -4. **`associate_legal_subject`** acquisisce il profilo del soggetto, induce progressivamente una traccia in `G1` e restituisce i bandi compatibili con quella traccia. +3. **`build_induction_objects`** predispone domande D2, regole trans-dominio e insiemi di premesse che possono indurre risposte in `G1`. +4. **`associate_legal_subject`** contiene il prototipo di inferenza da un profilo del soggetto verso i bandi compatibili. + +Gli algoritmi 3 e 4 sono presenti e coperti da test deterministici, ma non equivalgono a una sperimentazione D2 completata: il questionario semplificato degli enti non è stato ancora stabilizzato né applicato a un campione reale. -Il questionario sperimentale D1 contiene 74 domande; il questionario normalizzato di estrazione D2 ne contiene 45. Il corpus incluso contiene 219 testi di bandi e avvisi raccolti da fonti pubbliche. La suite automatica comprende 89 test. +Il questionario base D1 contiene 74 domande, 209 risposte e 192 archi dichiarati. Il corpus versionato contiene 219 testi di bandi e avvisi raccolti da fonti pubbliche. La suite automatica comprende 89 test. ## Architettura del flusso ```mermaid flowchart LR - A["Portali pubblici"] --> B["Scraping e download"] - B --> C["Filtro documentale ed estrazione testo"] - C --> D["Corpus D1"] - Q["Questionario D1"] --> G["build_g1"] - D --> G - G --> S["infer_g1: firme operative"] - G --> I["build_induction_objects"] - I --> P["Domande e regole D2"] - P --> M["associate_legal_subject"] - S --> M - M --> R["Bandi compatibili"] + subgraph E["Fase sperimentata: dominio D1"] + A["Portali pubblici"] --> B["Scraping e download"] + B --> C["Filtro ed estrazione testo"] + C --> D["Corpus D1"] + Q["Questionario base D1"] --> G["build_g1"] + D --> G + G --> S["infer_g1: firme operative"] + S --> V["Validazione e confronto dei vettori"] + end + G -. "fase 2 non realizzata" .-> I["Questionario semplificato D2 enti"] + I -.-> M["Matching e ranking human-in-the-loop"] ``` +## Grafo e risultati della run inclusa + +L'artefatto [`g1_graph.json`](examples/results/g1_graph.json) descrive un grafo radicato e aciclico con: + +- 171 istanze di nodo e 170 archi; +- una radice, `q_n0`, dalla quale sono raggiungibili tutti i nodi; +- 68 nodi terminali; +- 31 identificatori di domanda distinti e 140 nodi `__sep`, introdotti per riusare domande in rami diversi senza creare cicli. + +Il report delle 219 firme operative mostra: + +- 219 firme strutturalmente valide; +- 143 firme distinte; +- 99 bandi con firma univoca; +- 120 bandi raccolti in 44 gruppi di firme duplicate, con un gruppo massimo di 7 bandi; +- 79 classificazioni terminali `FIN`, 50 `APP`, 40 `ACC`, 36 `MAN` e 14 `MIX`. + +Questi risultati dimostrano l'esecuzione della classificazione D1, ma mostrano anche che la differenziazione non è completa. Non costituiscono una validazione del matching con gli enti né un ranking empirico. Metriche, metodo di calcolo e limiti sono documentati in [`docs/EXPERIMENTAL_RESULTS.md`](docs/EXPERIMENTAL_RESULTS.md). + ## Avvio rapido Richiede Python 3.11 o successivo. @@ -47,7 +98,7 @@ pytest I test usano un client AI simulato e non richiedono rete né credenziali. -Per eseguire la pipeline reale su quattro campioni: +Per eseguire la pipeline su quattro campioni con un server DS4 locale: ```bash export LEAN_AI_BASE_URL=http://127.0.0.1:8000/v1 @@ -60,57 +111,57 @@ welfaregraph \ --output-prefix results/ ``` -L'endpoint deve essere compatibile con l'API OpenAI `/chat/completions` e supportare output JSON vincolato. La temperatura usata dal client è zero. +L'endpoint deve essere compatibile con `/v1/chat/completions` e supportare output JSON vincolato. ## Struttura ```text lean_prompt_thesis/ Package Python e test dei quattro algoritmi formal/ Specifica Lean sperimentale -questionnaires/ Questionari D1 e D2, inclusi i casi ridotti +questionnaires/ Questionario D1, bozze e casi ridotti data/corpus/ Corpus testuale di 219 documenti data/mini/ Quattro campioni piccoli per prove rapide scripts/ Pipeline, esempio e analisi dei vettori tools/scraper/ Raccolta, selezione ed estrazione dei documenti -examples/results/ Artefatti rappresentativi prodotti dalla ricerca -docs/ Architettura, metodo, limiti e roadmap +examples/results/ Grafo, firme e report della sperimentazione D1 +docs/ Architettura, metodo, risultati, limiti e roadmap ``` ## Artefatti principali -- `questionnaires/questionario_D1_bandi_strutturato_VALID.json`: tassonomia operativa e grafo iniziale D1. -- `questionnaires/questionario_D2_estrazione_requisiti_normalizzato.json`: schema per finalità, beneficiari, requisiti, territorio, attività, partenariati, dati finanziari, spese, premialità, scadenze, documenti e obblighi. -- `examples/results/g1_graph.json`: grafo sperimentale generato. -- `examples/results/report_vettori.csv`: confronto delle firme operative dei 219 documenti. -- `examples/results/grafo_percorso.mmd`: visualizzazione Mermaid delle firme e dei percorsi. +- [`questionario_D1_bandi_strutturato_VALID.json`](questionnaires/questionario_D1_bandi_strutturato_VALID.json): questionario base e grafo iniziale D1. +- [`questionario_D2_estrazione_requisiti_normalizzato.json`](questionnaires/questionario_D2_estrazione_requisiti_normalizzato.json): bozza di schema di estrazione, non questionario degli enti validato. +- [`g1_graph.json`](examples/results/g1_graph.json): grafo operativo prodotto nella run inclusa. +- [`report_vettori.csv`](examples/results/report_vettori.csv): confronto delle firme operative dei 219 documenti. +- [`grafo_percorso.mmd`](examples/results/grafo_percorso.mmd): rappresentazione Mermaid dei percorsi. ## Configurazione del client AI | Variabile | Default | Funzione | |---|---|---| -| `LEAN_AI_BASE_URL` | `http://127.0.0.1:8000/v1` | Endpoint OpenAI-compatible | +| `LEAN_AI_BASE_URL` | `http://127.0.0.1:8000/v1` | Endpoint DS4 OpenAI-compatible | | `LEAN_AI_API_KEY` | `local-development` | Credenziale dell'endpoint locale | -| `LEAN_AI_MODEL` | `deepseek-v4-flash` | Modello usato | +| `LEAN_AI_MODEL` | `deepseek-v4-flash` | Modello usato nella sperimentazione | | `LEAN_AI_TIMEOUT` | `7200` | Timeout per richiesta, in secondi | | `LEAN_AI_RETRIES` | `3` | Tentativi su errori transitori | | `LEAN_AI_BACKOFF` | `5` | Backoff lineare, in secondi | | `LEAN_MAX_BANDO_CHARS` | `40000` | Limite del testo inviato per domanda | -## Stato scientifico e limiti +## Limiti scientifici -- Il prototipo implementa classificazione, costruzione del grafo, firme operative e associazione `D2 -> G1`. -- Il matching esplicito con indicatori territoriali e il ranking spiegabile sono sviluppi successivi, non funzionalità già validate in questo codice. -- Le risposte del modello possono ricadere su fallback deterministici: i log e gli artefatti devono essere controllati. -- La specifica Lean inclusa è un artefatto sperimentale di corrispondenza dei tipi; la specifica teorica estesa resta nel progetto `mathprompt`. -- I risultati inclusi documentano una sperimentazione e non costituiscono una valutazione giuridica dell'ammissibilità a un bando. +- La run inclusa consolida D1, non l'intera metodologia D1-D2. +- Il questionario semplificato D2 per gli enti, il matching su profili reali e il ranking spiegabile non sono risultati già validati. +- Le firme duplicate indicano che il grafo non ha ancora raggiunto la differenziazione completa del corpus. +- Le risposte del modello possono ricadere su fallback deterministici: log e artefatti devono essere controllati. +- La specifica Lean inclusa è un artefatto sperimentale; la specifica teorica estesa resta nel progetto `mathprompt`. +- I risultati non costituiscono una valutazione giuridica dell'ammissibilità a un bando. ## Dati e responsabilità I documenti del corpus derivano da fonti pubbliche e sono inclusi per riproducibilità della ricerca. La licenza Apache-2.0 si applica al codice originale della repository; non modifica eventuali diritti, termini o obblighi di attribuzione dei documenti di terzi. Prima di riutilizzare o ridistribuire il corpus, verificare la fonte ufficiale e la versione vigente. -Il sistema deve restare human-in-the-loop: l'associazione prodotta orienta l'analisi, ma la verifica dei requisiti e la decisione finale competono a persone responsabili. +Il sistema deve restare human-in-the-loop: l'associazione prodotta può orientare l'analisi, ma la verifica dei requisiti e la decisione finale competono a persone responsabili. ## Licenza Codice rilasciato con licenza Apache-2.0. Vedi [LICENSE](LICENSE). - diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 46ab87f..3214cb7 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -13,6 +13,10 @@ Lo scraper mantiene stato incrementale per fonte, limita i PDF a 50 MB, controlla il tipo di contenuto e separa download, selezione del documento ed estrazione testuale. +### Modello e runtime DS4 + +Il prototipo usa DeepSeek V4 Flash servito localmente tramite [DS4 / DwarfStar](https://github.com/antirez/ds4), sviluppato da Salvatore Sanfilippo. Il confine applicativo è un endpoint OpenAI-compatible configurabile tramite variabili d'ambiente. DS4 è il runtime di inferenza; DeepSeek V4 Flash è il modello utilizzato. + ### Dominio D1 e grafo G1 Il questionario D1 definisce domande, risposte, metadata e grafo iniziale. Il loader valida unicità degli identificatori, coerenza domanda-risposta, radici e archi. `build_g1` estende il grafo quando due campioni non sono ancora distinguibili, preservando aciclicità e assenza di domande ripetute sul percorso. @@ -23,7 +27,7 @@ Il questionario D1 definisce domande, risposte, metadata e grafo iniziale. Il lo ### Induzione trans-dominio -`build_induction_objects` costruisce domande D2 e insiemi minimi di premesse che supportano risposte operative in G1. `associate_legal_subject` acquisisce soltanto le informazioni D2 rilevanti per i target raggiungibili, riusa le risposte già note e associa i campioni D1 compatibili con la traccia indotta. +`build_induction_objects` e `associate_legal_subject` predispongono a livello prototipale domande D2, insiemi minimi di premesse e inferenza guidata verso G1. La sperimentazione non ha però completato il questionario semplificato degli enti né validato queste componenti su profili organizzativi reali. ### Persistenza @@ -50,5 +54,5 @@ Il questionario D1 definisce domande, risposte, metadata e grafo iniziale. Il lo - L'output LLM viene validato strutturalmente e ritentato, ma resta fallibile. - Alcuni errori del modello attivano fallback deterministici; i log devono renderli visibili. - Il risultato è compatibilità semantica rispetto alla configurazione, non ammissibilità giuridica. +- Gli artefatti empirici disponibili riguardano D1; D2 e ranking restano una fase successiva. - Il prototipo non tratta dati individuali dei beneficiari. - diff --git a/docs/EXPERIMENTAL_RESULTS.md b/docs/EXPERIMENTAL_RESULTS.md new file mode 100644 index 0000000..85fb472 --- /dev/null +++ b/docs/EXPERIMENTAL_RESULTS.md @@ -0,0 +1,124 @@ +# Risultati sperimentali parziali + +## Perimetro + +Gli artefatti versionati documentano la prima fase della sperimentazione: costruzione e uso del dominio `D1_bandi`, classificazione dei documenti, generazione del grafo operativo G1 e confronto delle firme domanda-risposta. + +Non documentano una sperimentazione completa della metodologia. Il questionario semplificato `D2_soggetti_giuridici` non è stato ancora stabilizzato né somministrato a profili reali di enti; non sono quindi disponibili risultati empirici di matching ente-bando, ranking o revisione umana. + +## Modello e ambiente di inferenza + +Tutte le operazioni sperimentali che richiedevano un modello linguistico hanno utilizzato: + +- **modello:** DeepSeek V4 Flash; +- **runtime:** [DS4 / DwarfStar](https://github.com/antirez/ds4), sviluppato da Salvatore Sanfilippo; +- **interfaccia:** endpoint locale OpenAI-compatible; +- **temperatura:** `0`; +- **formato:** JSON strutturato nelle operazioni che lo richiedono. + +DS4 è il motore di inferenza locale, mentre DeepSeek V4 Flash è il modello eseguito. Questa configurazione è stata impiegata nel filtro `BANDO`/`ALTRO`, nella disambiguazione documentale, nell'attraversamento del questionario D1 e nella proposta di domande discriminanti. Le componenti D2 sono state esercitate soltanto a livello prototipale e nei test con client simulato. + +## Questionario base D1 + +Il file [`questionario_D1_bandi_strutturato_VALID.json`](../questionnaires/questionario_D1_bandi_strutturato_VALID.json) contiene: + +| Elemento | Quantità | +|---|---:| +| Domande | 74 | +| Risposte discrete | 209 | +| Radici dichiarate | 1 (`q_n0`) | +| Archi nell'`initial_graph` | 192 | + +La domanda radice distingue cinque famiglie procedurali: finanziamenti (`FIN`), appalti e affidamenti (`APP`), accreditamenti ed elenchi (`ACC`), manifestazioni e co-progettazione (`MAN`), procedure miste o ambigue (`MIX`). + +## Grafo operativo prodotto + +![Grafo operativo G1](assets/welfaregraph-g1.jpeg) + +Le misure seguenti derivano direttamente da [`examples/results/g1_graph.json`](../examples/results/g1_graph.json): + +| Misura | Valore | +|---|---:| +| Istanze di nodo | 171 | +| Archi diretti | 170 | +| Radici | 1 (`q_n0`) | +| Nodi raggiungibili dalla radice | 171 | +| Nodi terminali | 68 | +| Identificatori di domanda distinti | 31 | +| Nodi di separazione `__sep` | 140 | +| Grado uscente massimo | 5 | + +Il grafo è aciclico e tutti i nodi sono raggiungibili dalla radice. I nodi `__sep` rappresentano istanze di separazione introdotte durante la differenziazione: consentono di riutilizzare una domanda in rami diversi senza generare cicli o ritorni sullo stesso percorso. + +Il grafo fotografato è quindi un risultato operativo della crescita incrementale di G1. La forte espansione orizzontale rende visibili i molti percorsi di classificazione; l'immagine va letta insieme al JSON e alla versione Mermaid, che conservano identificatori e archi in forma ispezionabile. + +## Firme operative dei bandi + +Le statistiche sono calcolate sui 219 record di [`report_vettori.json`](../examples/results/report_vettori.json). + +| Misura | Risultato | +|---|---:| +| Firme analizzate | 219 | +| Firme strutturalmente valide | 219 | +| Firme distinte | 143 | +| Bandi con firma univoca | 99 | +| Bandi appartenenti a gruppi duplicati | 120 | +| Gruppi di firme duplicate | 44 | +| Dimensione massima di un gruppo duplicato | 7 | +| Domande mancanti segnalate | 0 | +| Risposte non valide segnalate | 0 | + +### Lunghezza dei percorsi + +| Coppie nodo-risposta nella firma | Numero di bandi | +|---:|---:| +| 5 | 103 | +| 6 | 101 | +| 20 | 15 | + +### Famiglie terminali + +| Famiglia | Numero di bandi | +|---|---:| +| `FIN` | 79 | +| `APP` | 50 | +| `ACC` | 40 | +| `MAN` | 36 | +| `MIX` | 14 | +| **Totale** | **219** | + +Nel report compaiono 67 codici terminali distinti. La classe più frequente è `FIN-02A`, con 19 bandi, seguita da `FIN-02C`, con 11. + +Ogni firma contiene una coppia terminale senza arco uscente; il campo `non_edge_pairs` del report registra questa condizione di terminazione e non un errore di validazione. + +## Interpretazione + +I risultati mostrano che il sistema ha prodotto percorsi validi e classificazioni terminali per tutti i 219 documenti versionati. Le 143 firme distinte confermano una capacità di separazione semantica significativa, ma i 44 gruppi duplicati mostrano che il requisito teorico di differenziazione completa non è stato ancora raggiunto sull'intero corpus. + +Questa evidenza deve essere interpretata come risultato intermedio: + +- valida l'esecuzione del questionario e del grafo D1; +- individua i punti in cui servono ulteriori domande discriminanti; +- non misura accuratezza giuridica o qualità del ranking; +- non dimostra ancora l'associazione tra bandi e soggetti giuridici. + +## Fase mancante: questionario D2 degli enti + +La seconda fase dovrà creare un questionario dedicato ai soggetti giuridici che riduca il carico informativo del questionario base. Il sistema dovrà selezionare soltanto le domande organizzative necessarie a indurre i requisiti D1 pertinenti, ad esempio: + +- natura e forma giuridica; +- territorio di operatività; +- settori ed esperienza; +- capacità amministrativa e finanziaria; +- cofinanziamento disponibile; +- iscrizioni, accreditamenti e certificazioni; +- personale, competenze e partenariati. + +Solo dopo la validazione e l'uso di questo secondo questionario sarà possibile valutare empiricamente compatibilità, ranking spiegabile e supervisione umana su profili reali di enti. + +## Riproducibilità e cautele + +- Le misure descrivono gli artefatti attualmente versionati, non tutte le esecuzioni svolte durante lo sviluppo. +- I test automatici verificano strutture e algoritmi con risposte simulate; non costituiscono benchmark del modello. +- Il corpus non è censuario e le fonti ufficiali restano autoritative. +- Le firme duplicate, i fallback e le risposte del modello richiedono controllo umano. diff --git a/docs/METHODOLOGY.md b/docs/METHODOLOGY.md index 5e4c39d..b3304e5 100644 --- a/docs/METHODOLOGY.md +++ b/docs/METHODOLOGY.md @@ -6,6 +6,12 @@ La raccolta parte da portali pubblici eterogenei e combina richieste HTTP, parsi La repository include 219 testi nel dominio D1. I PDF originali non sono versionati: dimensione, duplicazione e aggiornamenti li rendono inadatti al repository. Il testo conserva il contenuto sperimentale usato dagli algoritmi; la fonte ufficiale resta autoritativa. +## Modello linguistico + +Tutte le fasi che richiedono inferenza AI sono state eseguite con DeepSeek V4 Flash attraverso [DS4 / DwarfStar](https://github.com/antirez/ds4), il motore di inferenza locale sviluppato da Salvatore Sanfilippo. Il server espone un'API OpenAI-compatible; la sperimentazione usa temperatura zero e richiede JSON strutturato dove previsto. + +La stessa configurazione è stata usata nel filtro documentale, nella disambiguazione, nelle risposte al questionario D1 e nella proposta di domande discriminanti. I test automatici usano invece un client simulato e non rappresentano una valutazione del modello. + ## Questionario D1 Il questionario classifica prima la funzione amministrativa del documento: @@ -18,9 +24,11 @@ Il questionario classifica prima la funzione amministrativa del documento: I rami successivi raffinano la tipologia e acquisiscono dimensioni semantiche. Ogni risposta può attivare un arco verso una nuova domanda o contribuire direttamente alla firma del documento. -## Questionario D2 di estrazione +## Seconda fase e questionario D2 + +La sperimentazione empirica si ferma al consolidamento di D1. Il secondo questionario `D2_soggetti_giuridici`, destinato a semplificare il questionario base attraverso un insieme ridotto di domande sugli enti, non è stato ancora stabilizzato né applicato a profili reali. -Lo schema D2 normalizza 45 campi organizzati per categoria: finalità, beneficiari, requisiti, territorio, attività, partenariati, dotazione e contributo, spese, premialità, tempistiche, documentazione, vincoli e sanzioni. È incluso come artefatto metodologico; l'integrazione completa con la pipeline di associazione richiede ulteriore consolidamento. +La repository include anche una bozza di 45 domande denominata `D2_bandi_estrazione_requisiti`. Questo artefatto organizza finalità, beneficiari, requisiti, territorio, attività, partenariati, finanza, spese, premialità, tempistiche, documenti e obblighi, ma non deve essere confuso con un questionario D2 degli enti già validato. ## Verifica @@ -36,3 +44,4 @@ I test automatici coprono: La suite usa un client simulato per rendere i test deterministici. Le prestazioni del modello reale e la correttezza amministrativa richiedono invece valutazione su un gold set annotato da esperti. +I risultati quantitativi della run versionata sono riportati in [`EXPERIMENTAL_RESULTS.md`](EXPERIMENTAL_RESULTS.md). diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index c97aa61..fb3afbd 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -11,7 +11,9 @@ ## Estensione applicativa - [ ] Versionare il profilo dell'ente e la sua validazione umana. -- [ ] Integrare il questionario D2 normalizzato nella pipeline principale. +- [ ] Progettare e validare il questionario semplificato `D2_soggetti_giuridici`. +- [ ] Selezionare dinamicamente il sottoinsieme di domande D2 necessario a indurre i requisiti D1 pertinenti. +- [ ] Applicare D2 a un campione reale di enti e valutare il matching con i bandi classificati. - [ ] Aggiungere il dominio territoriale con indicatori pubblici, fonte e data. - [ ] Distinguere requisiti bloccanti, compatibilità semantica e criteri premiali. - [ ] Implementare ranking spiegabile con contributi, criticità e incertezza. diff --git a/docs/assets/welfaregraph-g1.jpeg b/docs/assets/welfaregraph-g1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..02690f28c3989feb7e4abfdf6643b9122bfd1e6c GIT binary patch literal 59385 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
3=la0E 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 z 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