File size: 7,241 Bytes
d01272f a551bb6 d01272f 8905ad0 cc3f780 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 a551bb6 fe271ee 8905ad0 cc3f780 fe271ee 8905ad0 cc3f780 8905ad0 fe271ee cc3f780 fe271ee cc3f780 8905ad0 cc3f780 fe271ee cc3f780 fe271ee 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 fe271ee 8905ad0 cc3f780 8905ad0 fe271ee cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 fe271ee 8905ad0 fe271ee 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 8905ad0 cc3f780 2fe50b2 8905ad0 | 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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | ---
license: apache-2.0
title: Automated Semantic Discovery
sdk: docker
colorFrom: blue
colorTo: red
pinned: false
emoji: π§
short_description: Neurosymbolic prototype for automatic semantic discovery
---
# Automated Semantic Discovery β Prototype






Questo repository contiene un **prototipo avanzato per la scoperta semantica automatica (Automated Semantic Discovery)**. Il sistema agisce come un microservizio finalizzato alla generazione di **ontologie authoritative** e **Knowledge Graphs** a partire da testo non strutturato.
Nasce come strumento abilitante per scenari aziendali e di BPO, dove l'estrazione massiva di dati deve coniugarsi con il rigore dei vocabolari semantici formali (es. ArCo, OntoPiA, CIDOC-CRM).
Il progetto espone una doppia interfaccia:
1. **API REST (FastAPI):** Ideale per l'integrazione asincrona e l'orchestrazione da parte di backend esterni ad alte prestazioni (es. Go/Java).
2. **Web UI (Streamlit):** Un'interfaccia interattiva, perfetta per demo, test curati e visualizzazione topologica del grafo.
## Il Paradigma Neuro-Simbolico
Il progetto supera i limiti dei tradizionali sistemi RAG o delle semplici estrazioni LLM implementando una pipeline ibrida:
- **Neuro (AI Generativa & Vettoriale):** Sfrutta la comprensione del testo dei Large Language Models (tramite Groq/Llama 3) e il clustering semantico basato su embedding spaziali (`sentence-transformers`).
- **Symbolic (Logica Deterministica):** Applica regole algoritmiche rigide per la validazione ontologica (**SHACL** via `pyshacl`), il Type-Driven Domain Traversal (**TDDT**) e l'Entity Linking formale.
## Workflow Architetturale (Fase 1)
La pipeline elabora i dati in memoria ed Γ¨ orchestrata in moduli sequenziali indipendenti:
### 1. Semantic Chunking (`semantic_splitter.py`)
Segmentazione dinamica del testo basata su **cosine similarity** vettoriale. L'algoritmo calcola i percentili di distanza per individuare i reali "punti di rottura" argomentativi, garantendo chunk semanticamente coesi.
### 2. Type-Driven Domain Traversal - TDDT (`extractor.py`)
Estrazione relazionale a "imbuto" in due passaggi (Pass 1: Macro-Categorizzazione e Specializzazione; Pass 2: Estrazione Relazionale). Il modello linguistico Γ¨ vincolato tramite *Structured Outputs* (Pydantic JSON Schema) a utilizzare esclusivamente gli URI presenti nel **Domain Index**, azzerando le allucinazioni sui tipi.
### 3. Hybrid Entity Resolution (`entity_resolver.py`)
- Deduplica locale in RAM tramite clustering spaziale (**DBSCAN**).
- Normalizzazione del "Label Bloat" tramite algoritmi di **Majority Voting** sui tipi ontologici.
- Risoluzione globale sui **Vector Index nativi di Neo4j**.
- **Entity Linking** asincrono tramite chiamate REST all'API di **Wikidata** per l'ancoraggio a concetti universali (`owl:sameAs`).
### 4. SHACL Blocking & Validation (`validator.py` & `build_schema.py`)
Costruzione automatica di vincoli SHACL a partire dal dizionario ontologico. Durante l'estrazione, un reasoner OWL RL convalida la conformitΓ (Domain/Range) delle triple. Le triple invalide vengono deviate su una DLQ (Dead Letter Queue) in MongoDB per non corrompere il grafo principale.
### 5. Graph Persistence (`graph_loader.py`)
Salvataggio massivo transazionale (`UNWIND` Cypher) su database a grafo **Neo4j**, includendo tracciabilitΓ della fonte (`evidence`, `reasoning`) per garantire la massima *Explainability*.
## Struttura del repository
```text
prototipo/
β
βββ assets/
β βββ style.css
β
βββ ontology/
β βββ domain_index.json # Indice gerarchico delle ontologie (JSON)
β βββ shapes/
β βββ auto_constraints.ttl # Regole SHACL autogenerate
β
βββ src/
β βββ ingestion/
β β βββ semantic_splitter.py
β βββ extraction/
β β βββ extractor.py
β βββ validation/
β β βββ validator.py
β βββ graph/
β βββ graph_loader.py
β βββ entity_resolver.py
β
βββ app.py # Entrypoint Web UI (Streamlit)
βββ api.py # Entrypoint API REST (FastAPI)
βββ build_schema.py # Script per la generazione di index e shapes SHACL
βββ Dockerfile # Configurazione container
βββ .env.example
βββ requirements.txt
βββ README.md
```
## Tech Stack & Requisiti
- **Linguaggio**: Python 3.13
- **Database**: Neo4j (Graph), MongoDB (DLQ)
- **Interfacce**: FastAPI, Uvicorn, Streamlit
- **Core Libraries**:
- **Neuro** : `langchain`, `langchain-huggingface`, `langchain-groq`, `scikit-learn`
- **Symbolic** : `neo4j`, `rdflib`, `pyshacl`, `pydantic`
> Le dipendenze complete sono elencate in `requirements.txt`.
## Configurazione Locale
Per testare il sistema in locale, creare un file `.env` a partire dal template:
```env
NEO4J_URI=neo4j+s://<tuo-cluster>.databases.neo4j.io
NEO4J_USER=neo4j
NEO4J_PASSWORD=la_tua_password
MONGO_URI=mongodb://localhost:27017/
GROQ_API_KEY=tua_api_key_groq
ONTOLOGY_PATH=./ontology
```
## Installazione ed Esecuzione
```bash
# 1. Clona il repository
git clone [https://github.com/](https://github.com/)<username>/<repository>.git
cd prototipo
# 2. Crea l'ambiente virtuale e attivalo
python -m venv venv
source venv/bin/activate # Linux / macOS
# venv\Scripts\activate # Windows
# 3. Installa le dipendenze
pip install -r requirements.txt
# 4. Genera gli indici ontologici (una tantum)
python build_schema.py
```
## ModalitΓ 1: Web UI (Streamlit)
Avvia la dashboard interattiva per visualizzare il grafo e testare l'estrazione:
```bash
streamlit run app.py
```
L'interfaccia sarΓ disponibile su `http://localhost:8501`.
## ModalitΓ 2: API REST Headless
Avvia il motore in ascolto per l'orchestrazione backend:
```bash
python api.py
```
L'endpoint sarΓ disponibile su `http://0.0.0.0:5000/api/discover`.
## Output dell'API
Il sistema produce una risposta JSON strutturata contenente:
- Statistiche di esecuzione (tempo, chunk elaborati).
- Esito della validazione SHACL.
- La lista completa delle triple riconciliate e validate.
- Il feedback di avvenuto inserimento massivo su Neo4j.
## Limiti noti
- **Rate Limiting Wikidata**: Le chiamate di Entity Linking dipendono dai tempi di risposta dell'API pubblica di Wikidata; per ingestion intensive Γ¨ consigliato l'uso di cache locali stratificate.
- **Dipendenza da Vocabolari**: L'accuratezza dell'estrazione semantica tramite Schema-RAG fluttua in base alla ricchezza descrittiva del dizionario JSON ontologico fornito in ingresso.
## Riferimenti
**Automated Semantic Discovery β Generazione Neuro-Simbolica di Ontologie Leggere e Vocabolari Semantici**
Gaetano Parente, Dicembre 2025
## Autore
**Gaetano Parente**
Activa Digital β NextGenTech |