|
Download README.md from NextGenTech/AutomatedSemanticDiscovery: direct link, hf CLI and curl.
- Browser
- Download file 7.24 kB
-
https://huggingface.co/spaces/NextGenTech/AutomatedSemanticDiscovery/resolve/main/README.md
- Command line
-
hf download hf://spaces/NextGenTech/AutomatedSemanticDiscovery/README.md
-
curl -L -o README.md https://huggingface.co/spaces/NextGenTech/AutomatedSemanticDiscovery/resolve/main/README.md
7.24 kB
| 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 |