docs: issues 0041 (split thresholds) + 0042 (GLiNER2), supersedes mREBEL
Cierra el ciclo del analysis gliner_glirel_tuning: documenta en app.md el pipeline NER+RE disponible en el registry y abre los dos issues que faltan para cablearlo en extract_graph_hybrid + panel paste_extract. Archiva el 0042 original (mREBEL) tras la decision a favor de GLiNER2 (Apache 2.0, joint NER+RE, 20-30x mas rapido en CPU). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -98,3 +98,34 @@ cmake --build build/linux --target graph_explorer -j$(nproc)
|
||||
filesystem propio para evitar lock con otras apps que esten escribiendo.
|
||||
- El `graph_hash` se calcula a partir del path canonico del input. Mismo path
|
||||
= mismo grafo a efectos de layout guardado.
|
||||
|
||||
### Pipeline NER+RE disponible en el registry (2026-05-04)
|
||||
|
||||
Tras la investigacion del analysis `gliner_glirel_tuning` (proyecto `osint_graph`), el stack completo de extraccion de entidades + relaciones desde texto / PDF esta listo como funciones del registry. **Esto desbloquea los issues 0041 y 0042**:
|
||||
|
||||
```python
|
||||
# Pipeline E2E recomendado (texto -> grafo)
|
||||
from pipelines.extract_graph_from_text import extract_graph_from_text
|
||||
from datascience.gliner2_load_model import gliner2_load_model
|
||||
|
||||
model = gliner2_load_model() # Apache 2.0, NER+RE joint, 340M params
|
||||
result = extract_graph_from_text(text, ENTITY_LABELS, RELATION_LABELS, ALLOWED, model)
|
||||
# result = {'nodes': [...], 'edges': [...], 'stats': {...}}
|
||||
```
|
||||
|
||||
Componentes (mira `python/functions/{core,datascience,pipelines}/`):
|
||||
- **core (puras):** `clean_pdf_text`, `chunk_with_overlap`, `merge_entity_aliases`, `filter_relations_by_entity_types`, `aggregate_extraction_results`.
|
||||
- **datascience (impuras):** `gliner2_load_model`, `extract_graph_gliner2`, `spacy_es_load_model`, `extract_triples_spacy_es` (OpenIE schema-less ES).
|
||||
- **pipelines:** `extract_graph_from_text` — composicion E2E.
|
||||
|
||||
Recetas validadas en notebooks 04-08 del analysis y vaultadas en `vaults/osint_nlp_models/`:
|
||||
- `threshold=0.3` (vs default 0.5) para GLiNER2.
|
||||
- snake_case verbal labels (`works_at`, `ceo_of`...).
|
||||
- `chunk_with_overlap` para texto > 1500 chars.
|
||||
- `filter_relations_by_entity_types` para descartar `Madrid president_of Persona`.
|
||||
- `merge_entity_aliases` para fusionar `BBVA` ⊂ `Banco Bilbao Vizcaya Argentaria, S.A.`.
|
||||
- spaCy ES dep-rules como capa OpenIE schema-less complementaria (predicado = verbo del texto).
|
||||
|
||||
Issues que desbloquea: `issues/0041-split-confidence-thresholds.md` y `issues/0042-gliner2-unified-extractor.md`. El registry tiene todas las funciones necesarias; solo falta cablearlas en `extract_graph_hybrid_py_pipelines` y el panel `paste_extract`.
|
||||
|
||||
Playground de referencia: `projects/osint_graph/analysis/gliner_glirel_tuning/playground/` (FastAPI + Sigma.js, sirviendo en `localhost:7878`).
|
||||
|
||||
Reference in New Issue
Block a user