GaetanoParente commited on
Commit
8905ad0
·
verified ·
1 Parent(s): 8ed8027

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +197 -19
README.md CHANGED
@@ -1,19 +1,197 @@
1
- ---
2
- title: AutomatedSemanticDiscovery
3
- emoji: 🚀
4
- colorFrom: red
5
- colorTo: red
6
- sdk: docker
7
- app_port: 8501
8
- tags:
9
- - streamlit
10
- pinned: false
11
- short_description: 'prototipo di sistema per la scoperta semantica automatica '
12
- ---
13
-
14
- # Welcome to Streamlit!
15
-
16
- Edit `/src/streamlit_app.py` to customize this app to your heart's desire. :heart:
17
-
18
- If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
19
- forums](https://discuss.streamlit.io).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Automated Semantic Discovery – Prototype
2
+
3
+ ![Python](https://img.shields.io/badge/python-3.10%2B-blue)
4
+ ![Neo4j](https://img.shields.io/badge/graphdb-Neo4j-green)
5
+ ![Status](https://img.shields.io/badge/status-research%20prototype-orange)
6
+
7
+ Questo repository contiene un **prototipo di sistema per la scoperta semantica automatica (Automated Semantic Discovery)**, finalizzato alla generazione di **ontologie leggere** e **vocabolari semantici** a partire da **corpora documentali non strutturati**.
8
+
9
+ Il progetto nasce come **proof-of-concept di ricerca** e implementa una **pipeline neuro-simbolica** che integra:
10
+
11
+ - la potenza rappresentazionale dei **modelli vettoriali** (*Neuro*);
12
+ - regole di **estrazione ed inferenza NLP** (*Symbolic*).
13
+
14
+ ## Obiettivi del prototipo
15
+
16
+ Il prototipo ha i seguenti obiettivi principali:
17
+
18
+ - dimostrare la fattibilità di una **pipeline automatizzata di Semantic Knowledge Discovery**;
19
+ - ridurre il **knowledge acquisition bottleneck** nella costruzione di grafi di conoscenza;
20
+ - validare un **approccio modulare e scalabile** alla scoperta semantica;
21
+ - fornire una **base sperimentale per architetture GraphRAG**.
22
+
23
+ > Il sistema **non è un prodotto industriale**, ma un **laboratorio sperimentale orientato alla ricerca applicata**.
24
+
25
+ ## Workflow Architetturale
26
+
27
+ <p align="center">
28
+ <img src="docs/workflow.png" alt="Workflow Architetturale della Pipeline Neuro-Simbolica" width="90%">
29
+ </p>
30
+
31
+ ## Moduli della Pipeline
32
+
33
+ La pipeline è organizzata in **moduli indipendenti e sequenziali**.
34
+
35
+ ### 1. Ingestion & Pre-processing
36
+
37
+ - Caricamento dei documenti testuali.
38
+ - Normalizzazione e pulizia del testo.
39
+
40
+ ### 2. Semantic Chunking (Componente *Neuro*)
41
+
42
+ - Segmentazione del testo basata su **similarità semantica vettoriale**, non solo sintattica.
43
+ - Utilizzo di **modelli di embedding** per garantire la coerenza tematica dei frammenti.
44
+
45
+ ### 3. Information Extraction (Componente *Simbolica*)
46
+
47
+ - Estrazione di **entità (NER)** e **relazioni** tramite analisi delle dipendenze sintattiche.
48
+ - Produzione di **strutture intermedie** sotto forma di **triple concettuali (Soggetto–Predicato–Oggetto)**.
49
+
50
+ ### 4. Knowledge Graph Construction
51
+
52
+ - Mapping delle triple estratte nel **modello a grafo**.
53
+ - Persistenza su **database a grafo (Neo4j)**.
54
+
55
+ ## Struttura del repository
56
+
57
+ ```text
58
+ prototipo/
59
+
60
+ ├── data/
61
+ │ ├── raw/ # Documenti di input grezzi
62
+ │ ├── processed/ # Output intermedi (chunk, debug JSON)
63
+ │ └── gold_standard/ # Esempi e dati di riferimento
64
+
65
+ ├── src/
66
+ │ ├── ingestion/
67
+ │ │ └── semantic_splitter.py
68
+ │ ├── extraction/
69
+ │ │ └── extractor.py
70
+ │ └── graph/
71
+ │ └── graph_builder.py
72
+
73
+ ├── neo4j/ # Script o Docker Compose per il DB
74
+ ├── .env.example # Template per le variabili d'ambiente
75
+ ├── requirements.txt
76
+ └── README.md
77
+ ```
78
+
79
+ ## Tech Stack & Requisiti
80
+
81
+ - **Linguaggio**: Python 3.10+
82
+ - **Database**: Neo4j (Community / Enterprise)
83
+
84
+ ### Core Libraries
85
+
86
+ - **Neuro / Vectors**
87
+ `sentence-transformers`, `scikit-learn`
88
+
89
+ - **NLP / Symbolic**
90
+ `spacy`, `nltk`
91
+
92
+ - **Data & Graph**
93
+ `pandas`, `neo4j-driver`
94
+
95
+ > Le dipendenze complete sono elencate in `requirements.txt`.
96
+
97
+ ## Configurazione
98
+
99
+ Creare un file `.env` nella root del progetto:
100
+
101
+ ```env
102
+ NEO4J_URI=bolt://localhost:7687
103
+ NEO4J_USER=neo4j
104
+ NEO4J_PASSWORD=la_tua_password_locale
105
+ ```
106
+
107
+ **Nota**: assicurarsi che il file `.env` sia incluso nel `.gitignore`.
108
+
109
+ ## Installazione
110
+
111
+ ```bash
112
+ git clone https://github.com/<username>/<repository>.git
113
+ cd prototipo
114
+
115
+ python -m venv venv
116
+ source venv/bin/activate # Linux / macOS
117
+ # venv\\Scripts\activate # Windows
118
+
119
+ pip install -r requirements.txt
120
+ ```
121
+
122
+ ## Utilizzo del prototipo
123
+
124
+ ### 1. Inserimento dei documenti
125
+
126
+ Copiare i documenti in `data/raw/`.
127
+
128
+ ### 2. Segmentazione semantica
129
+
130
+ ```bash
131
+ python src/ingestion/semantic_splitter.py
132
+ ```
133
+
134
+ ### 3. Estrazione di entità e relazioni
135
+
136
+ ```bash
137
+ python src/extraction/extractor.py
138
+ ```
139
+
140
+ ### 4. Costruzione del Knowledge Graph
141
+
142
+ ```bash
143
+ python src/graph/graph_builder.py
144
+ ```
145
+
146
+ ## Output
147
+
148
+ Il sistema produce:
149
+
150
+ - file JSON intermedi per il tracciamento e il debug della pipeline;
151
+ - dati strutturati utilizzabili per validazione manuale o semi-automatica;
152
+ - un Knowledge Graph persistente su Neo4j, interrogabile tramite Cypher.
153
+
154
+ ## Risultati e Validazione Visiva
155
+
156
+ Questa sezione mostra alcuni output significativi del prototipo,
157
+ utilizzati per la validazione qualitativa della pipeline di scoperta semantica.
158
+
159
+ ### Validazione delle estrazioni
160
+
161
+ <p align="center">
162
+ <img src="docs/validation.png" alt="Validazione delle entità estratte" width="90%">
163
+ </p>
164
+
165
+ Lo screenshot mostra esempi di entità e relazioni estratte a partire dai chunk semantici,
166
+ utilizzati per verificare la correttezza e la coerenza delle triple generate.
167
+
168
+ ### Visualizzazione del Knowledge Graph
169
+
170
+ <p align="center">
171
+ <img src="docs/graph.png" alt="Grafo risultante su Neo4j" width="90%">
172
+ </p>
173
+
174
+ Il grafo risultante è persistito su Neo4j ed esplorabile tramite Neo4j Browser,
175
+ consentendo l’analisi interattiva delle entità e delle relazioni scoperte.
176
+
177
+ ## Limiti noti
178
+
179
+ - **Scalabilità**: prototipo non ottimizzato per ingestione massiva.
180
+ - **Reasoning**: regole simboliche basate su euristiche, dominio-dipendenti.
181
+ - **LLM**: uso intenzionalmente limitato per privilegiare determinismo e spiegabilità.
182
+
183
+ ## Possibili estensioni future
184
+
185
+ - Integrazione LLM / GraphRAG
186
+ - Supporto RDF / OWL / SHACL
187
+ - Dockerizzazione
188
+
189
+ ## Riferimenti
190
+
191
+ **Automated Semantic Discovery – Generazione Neuro-Simbolica di Ontologie Leggere e Vocabolari Semantici**
192
+ Gaetano Parente, Dicembre 2025
193
+
194
+ ## Autore
195
+
196
+ **Gaetano Parente**
197
+ Activa Digital – NextGenTech