In un dominio di analisi economico-finanziaria la conoscenza utile è sparsa fra documenti di ricerca, fogli di modello, note metodologiche e corrispondenza interna, e il problema operativo non è archiviarla ma ritrovarla quando serve. Su sistemi di questo tipo, per Prometeia, ho visto da vicino come lo stack open source di oggi affronti la questione e dove invece lascia scoperto il lavoro di integrazione.
Contesto e problema
Una società che fa analisi del rischio e previsioni di budget produce informazione con tre proprietà scomode per un sistema documentale.
È eterogenea: convivono testo discorsivo (note di ricerca, commenti di scenario), dati tabellari (esposizioni, serie storiche) e artefatti binari (fogli di calcolo, presentazioni, PDF di report). Un indice che tratta solo il testo perde metà del valore.
È versionata di fatto: una stima di rischio o una previsione esiste in più revisioni, ognuna legata a un’assunzione e a una data. Senza traccia della revisione, due documenti all’apparenza identici diventano indistinguibili e l’informazione si degrada.
Si deperisce in fretta: uno scenario di sei mesi fa serve come storia, non come riferimento corrente. Un motore che ordina per sola pertinenza testuale e ignora la data dà risposte plausibili e sbagliate.
Il problema da risolvere è quindi doppio: catturare la conoscenza in una forma strutturata abbastanza da interrogarla, e indicizzare il materiale binario già prodotto senza chiedere alle persone di riscriverlo.
Architettura
Lo stack open source del 2009 copre questi due bisogni con due famiglie di strumenti distinte.
Per la cattura strutturata, un wiki resta lo strumento che chiede meno a chi scrive. MediaWiki 1.14 (febbraio 2009) è un motore solido, e l’estensione Semantic MediaWiki — versione 1.4.2, uscita a febbraio 2009 — aggiunge ciò che a un wiki tradizionale manca: si annotano i collegamenti fra pagine con proprietà tipizzate ([[ha rischio::credito]], [[data revisione::2009-03]]) e li si interroga come un piccolo database. Una nota metodologica smette di essere testo libero e diventa un nodo con attributi navigabili. DokuWiki, che salva il contenuto in file di testo invece che in un database, resta l’alternativa più leggera quando il volume è contenuto e l’integrazione con il versionamento dei file pesa più di tutto il resto.
Per indicizzare il materiale già esistente, il riferimento è Apache Lucene, libreria Java di indicizzazione full-text matura da anni, e la sua incarnazione come servizio: Apache Solr. Solr 1.3, uscito a settembre 2008, espone Lucene come servizio HTTP con schema configurabile, ricerca a faccette (faceted search) e replica dell’indice. La ricerca a faccette è ciò che qui serve di più: filtra i risultati per attributo — tipo di rischio, periodo, autore, classe di asset — invece di affidarsi al solo ranking testuale.
Estrarre il testo dai binari è un problema a sé. Apache Tika, all’epoca giovane ma già usabile, riduce PDF, documenti Office e HTML a testo più metadati, e copre proprio gli artefatti che un dominio finanziario produce in quantità. La catena è questa: Tika estrae, Solr indicizza con un campo per la data e uno per il tipo di documento, il wiki semantico ospita la conoscenza che nasce già strutturata.
Punto critico
Il nodo dell’integrazione non sta in nessuno dei componenti, ma nella coerenza dello schema fra di essi. Solr lavora bene solo se lo schema dei campi è disegnato sul dominio e non lasciato generico. Un campo data dichiarato come stringa anziché come tipo data non si ordina in modo cronologico; un campo tipo_rischio senza un vocabolario controllato genera dieci varianti dello stesso valore e rende inutile la faccetta. Lo stesso vincolo vale sul wiki semantico: le proprietà vanno definite una volta e usate con disciplina, altrimenti la query strutturata restituisce un sottoinsieme arbitrario.
Il grosso del lavoro si sposta dall’installazione del software alla modellazione del dominio. Decidere quali attributi rendono un documento ritrovabile in un contesto di rischio — la classe di esposizione, la data dell’assunzione, lo scenario di riferimento — è lavoro di analisi, non di sistemistica. Lo strumento open source toglie il costo dell’infrastruttura di ricerca; resta il costo di capire cosa si sta indicizzando.
Implicazioni
La conseguenza pratica è che lo schema va versionato insieme al codice. Quando si aggiunge un attributo all’indice o una proprietà al wiki, tutto il corpus va reindicizzato perché i documenti vecchi conoscano il campo nuovo; Solr lo consente, ma è un’operazione da pianificare, non da improvvisare. Conviene quindi trattare lo schema Solr e l’insieme delle proprietà semantiche come artefatti di progetto sotto controllo di versione, con una procedura di reindicizzazione ripetibile.
Una seconda conseguenza riguarda i confini di accesso. In un contesto finanziario non tutta la conoscenza è leggibile da tutti, e né Solr 1.3 né MediaWiki risolvono il controllo di accesso a livello di documento in modo nativo e granulare. Il filtro per permessi va applicato a monte — separando gli indici o filtrando le query in base al ruolo — ed è una scelta di architettura che conviene fare all’inizio, perché reintrodurla su un indice già popolato costa caro.
Limiti
Lo stack descritto indicizza e ritrova; non interpreta. La ricerca a faccette di Solr trova i documenti che parlano di un certo rischio, ma non stabilisce relazioni causali fra scenari né riconcilia stime in conflitto: quel lavoro resta all’analista. Allo stesso modo il wiki semantico rende interrogabile la conoscenza che qualcuno ha già strutturato a mano, e da solo non struttura niente. Sul piano operativo, Solr 1.3 non offre indicizzazione vicina al tempo reale: l’indice si aggiorna sui commit espliciti, con un ritardo che in un flusso di lavoro a battitura rapida va gestito. Sono confini noti dell’epoca, e segnano dove finisce ciò che lo strumento fa da solo e dove comincia il progetto.
La piattaforma di knowledge e activity management costruita su queste basi per Prometeia è descritta nell’insight pubblicato da noze: https://www.noze.it/insights/knowledge-management-prometeia/.
https://www.mediawiki.org/wiki/Release_notes/1.14 https://semantic-mediawiki.org/wiki/Semantic_MediaWiki_1.4.2 https://solr.apache.org/ https://lucene.apache.org/ https://www.dokuwiki.org/dokuwiki
Immagine di copertina: Schermata di una pagina di Semantic MediaWiki con annotazioni di dati strutturati su una voce wiki — schermata di Eloquence, CC BY-SA 3.0 — https://commons.wikimedia.org/wiki/File:Semantic-mediawiki.png