Considerate le caratteristiche di: HTML, CSS, JavaScript, con particolare attenzione alla comunicazione asincrona in JavaScript via HTTP, ho lungamente riflettuto su come strutturare il codice di una web app affinché sia manutenibile ed efficiente.
L’architettura che ho concepito si articola in:
una fonte dati esterna con cui comunicare via HTTP API, che chiameremo: remoteStore;
la memoria locale a disposizione del browser come previsto in HTTP 5, il localStore;
la memoria di lavoro, in RAM, che chiameremo: workingStore;
un oggetto dataManager che ha il compito di mantenere allineati i tre data store;
vari oggetti di classe UI (User Interface), che rappresentano elementi HTML a disposizione dell’utente per consultare i dati ed impartire comandi;
un oggetto layoutManager, avente il compito di posizionare gli oggetti UI nella pagina web;
un oggetto coordinator, che veicola le interazioni tra tutti gli altri oggetti in base alle specifiche dei vari casi d’uso previsti, basandosi su una coda di eventi.
Nel seguito, illustro il funzionamento, le funzionalità e la collocazione di una struttura così architettata.
Il Ruolo Centrale del Data Manager nella Sincronizzazione dei Dati
Il dataManager contatta periodicamente il remoteStore per verificare se ci sono variazioni dei dati. In tal caso, applica le differenze al workingStore gestendo eventuali conflitti, cioè variazioni avvenute in parallelo sia nel remoteStore sia nel workingStore.
Per la valutazione automatica su quali siano le differenze da applicare, si usa un meccanismo di assegnazione di doppia chiave per ciascun record: chiave assegnata dall’applicazione e chiave assegnata dal remoteStore.
Se un record ha solo una delle due chiavi allora sappiamo che va inserito nello store corrispondente a quello della chiave mancante.
Se un record ha entrambe le chiavi, allora significa che c’è una variazione del dato da applicare.
Il dataManager ha un importante ruolo semantico: la struttura dei dati provenienti dal remoteStore è potenzialmente differente da quella del workingStore ed il dataManager ha il compito di tradurre i dati dall’una all’altra e viceversa.
Anche l’allineamento tra workingStore e localStore è di competenza del dataManager ma è più semplice. Fatta eccezione per una chiave di autenticazione dell’installazione del browser depositata nel localStore, gli altri dati vengono generalmente sovrascritti, in modo che nel localStore ci sia una copia del working Store.
Un ultimo importante aspetto è che il dataManager effettua allineamenti su richiesta del coordinator. Supponiamo per esempio che si debba presentare all’utente una lista che ha potenzialmente migliaia di voci, corrispondenti a schede articolate in numerosi campi. Il dataManager riceverà solo i dati utili per preparare la lista, senza tutti i dettagli dei vari elementi. Quando l’utente seleziona un elemento, il coordinator può chiedere al dataManager di recuperare tutti i dettagli corrispondenti.
Componenti UI e i Loro Flussi di Input/Output
Un componente della UI ha funzione tipica di I/O:
checkbox;
radio button;
testo statico;
selezione da un elenco…
Ciascun componente viene creato nella pagina con un ben preciso ID che lo individua univocamente nella pagina HTML. Assegnandogli uno o più event listener, il componente UI potrà acquisire dati. Questi saranno poi trasmessi al coordinator, che li metterà in coda.
I componenti UI vengono attivati, disattivati e collocati dal layoutManager, mentre il coordinator può inviare loro segnali di riconfigurazione. Per esempio, se un dato acquisito porta ad uno stato non valido, il coordinator invia al componente UI che l’ha acquisito una reazione, in modo che il componente segnali all’utente l’errore commesso.
Si noti che le trasmissioni da componente UI a coordinator devono sempre essere qualificate utilizzando delle etichette, assegnate dal coordinator stesso in fase di creazione dell’istanza della classe del componente UI.
Il Layout Manager: Disporre i Componenti dell’Interfaccia Utente
Basandosi su un costrutto JSON, il layoutManager prevede una serie di componenti della UI, istanziati dal coordinator. Il costrutto JSON indica in che ordine disporre i vari componenti UI, pagina per pagina.
Nulla toglie che il funzionamento del layoutManager sia parametrizzato. Per esempio, si potrebbe tener conto delle preferenze dell’utente o del profilo di autorizzazione nel determinare l’ordine di alcuni componenti o se nasconderne alcuni.
Il Coordinator: Gestire l’Interscambio di Messaggi con una Coda di Eventi
Il primo evento è sempre l’allestimento della prima pagina. Il coordinator istanzia i componenti della UI, li passa al layoutManager che andrà a disporli, impostando posizione ed ingombro di ciascuno. A quel punto, dai vari componenti UI potranno provenire dei segnali. Per esempio, l’utente potrà effettuare una selezione da un menù. Siccome il layoutManager aveva indicato una ben precisa etichetta per il dato prodotto da tale menù, il layoutManager può identificare il caso d’uso ed attivare i passi del corrispondente scenario.
Ricordiamo che c’è asincronia tra l’azione del dataManager e le azioni dei vari componenti UI. Dunque il coordinator non elaborerà lo stimolo proveniente dal menù se non dopo averlo inserito in una coda con altri eventuali stimoli in attesa di essere elaborati.
In base ai passi del caso d’uso, il coordinator potrà effettuare vari tipi di azioni:
inviare ad uno o più componenti UI un segnale di riconfigurazione (es. l’utente ha selezionato la regione e di conseguenza il menù delle province può essere filtrato);
modificare il workingStore ed eventualmente segnalare al dataManager la necessità di sincronizzare i dati con il remoteStore;
segnalare al dataManager di memorizzare lo stato di calcolo nel localStore;
verificare la coerenza dei dati memorizzati nel workingStore ed eventualmente inviare feedback ai componenti UI interessati;
interrompere la sessione.
Esempio: tempistiche di esecuzione di un compito
Qual è la tempistica dell’esecuzione di un compito? È una questione che molte persone affrontano ripetutamente più volte al giorno, a partire da consulenti, specialisti, tecnici, addetti al supporto etc. La risposta non è univoca come potrebbe sembrare di primo acchito. Il lavoro può essere eseguito in una o più sessioni, da una o più persone. Di sicuro ha un inizio ed una fine, anche per attività ripetute o periodiche, per le quali si può sempre considerare l’impegno totale finora dedicato.
Il fatto che più persone o risorse siano state impegnate si risolve in modo ovvio con una sommatoria. Resta la questione del tempo effettivamente dedicato allo svolgimento del compito o, più importante ancora, della durata convenzionale, usata per misurare l’impegno profuso e spesso indicato come: “tempo o durata da fatturare”.
Consideriamo infine che, dovendo registrare tale misura, si terrà necessariamente conto del lasso di tempo in cui l’attività si è sviluppata, determinato registrando l’inizio e la fine o l’inizio e la durata o, qualche volta, la fine e la durata.
In sintesi, abbiamo una rete con quattro ingressi:
istante di inizio attività;
istante di fine attività;
durata del lasso di tempo in cui si è sviluppata l’attività, o durata reale, che abbrevieremo con Δt;
durata di lavoro o sforzo, cioè tempo effettivamente dedicato all’attività;
durata convenzionale o dichiarata;
e le medesime uscite ma all’interno della rete immaginiamo un miscelatore attivato ogni volta che varia uno degli ingressi. Ciò che conta, è che sia nota la durata dichiarata o, in mancanza, la durata reale o quella di sforzo.
Se fotografiamo la situazione nell’istante in cui c’è una variazione, ci troviamo necessariamente di fronte ad una sola possibilità tra le varie combinazioni possibili determinate da quanti e quali sono i valori impostati. Per esempio:
è stato indicato solo un valore ed è quello di Δt oppure quello della durata convenzionale: in questi casi, non c’è nulla da fare perché la misura dell’impegno, in un modo o nell’altro, c’è;
è stato indicato solo l’istante di inizio o solo quello di fine attività: si resta in attesa che venga inserito uno degli altri tre valori e se ci si chiede quale sia la durata totale in questo momento si può solo rispondere che è indeterminata;
sono stati indicati due valori, di cui uno è la durata dichiarata o quella di sforzo: si può rispondere alla domanda sulla misura dell’impegno ma non si può sapere in quale intervallo l’attività si è sviluppata;
sono stati indicati due, ma non si tratta della durata convenzionale: dunque, si può ricavare il terzo valore mancante tra: inizio, fine e Δt, per esempio si può calcolare la fine avendo inizio e Δt.
Si potrebbe aumentare la complessità ammettendo che vengano forniti valori anche quando è possibile derivarli da altri già forniti. In tal caso, potrebbe succedere che i valori forniti risultino incoerenti. Tuttavia, questa casistica si può escludere facilmente immaginando che la procedura proposta venga eseguita, come inizialmente indicato, ad ogni variazione di ciascuno degli operandi e che blocchi l’inserimento di valori derivabili in modo univoco tramite calcolo.
Orbene, come interagiranno tra loro li coordinator ed i componenti UI nella web app per gestire una casistica del genere?
Immaginiamo che la nostra app comprenda cinque campi di input.
Ecco qualche passaggio, a partire da quando la UI è stata preparata e l’utente si accinge ad inserire dati. Ci sono 5 listener, uno per ciascuno dei campi di input.
L’utente inserisce l’inizio attività. Il sistema si trova solo con quel dato mentre gli altri sono indeterminati e, in base alle regole, non fa nulla.
L’utente inserisce la durata totale. Il sistema calcola l’istante di fine attività sommando l’inizio con la durata. L’utente inserisce anche la durata di sforzo e, successivamente, quella dichiarata.
Approfondiamo cosa succede quando il sistema calcola la fine attività. Il componente UI della fine attività, ad inserimento completato, invia al coordinatore il valore inserito, con opportuna etichetta che identifica univocamente questo caso d’uso. Il coordinatore riceve il dato, verifica la presenza di fine o durata reale nel workingStore. coordinator trova la durata e segue le regole di calcolo che prevedono, in casi come questo, di derivare la durata reale.
Conclusioni: Verso una Web App più Strutturata ed Efficiente
Il ruolo delle etichette non deve passare inosservato. È cruciale dal punto di vista semantico, sia in fase di traduzione tra remoteStore e workingStore sia, come indicato al primo paragrafo della sezione precedente, in fase di interazione con l’utente.
Questo approccio ontologico conferisce al codice di programmazione maggiore intelleggibilità e coerenza rispetto ai casi d’uso, gestiti in modo centralizzato dentro il coordinator.
L’assenza di interazioni dirette tra componenti UI consente di manutenzionare o sostituire singoli componenti UI senza doversi occupare di errori di regressione. È infatti proprio l’intreccio tra componenti di una pagina la maggior fonte di questo tipo di problemi.
La fatica di predisporre un dataManager è ampiamente ripagata dalla possibilità di intervenire in modo chirurgico qualora la fonte dati esterna venga aggiornata. Al contempo, si garantisce comfort e stabilità per i programmatori che devono realizzare i componenti UI.
Il fatto di disporre di un layoutManager si presta alla personalizzazione del layout utente per utente. Basta infatti ordinare e filtrare i componenti in base all’utente.
Infine, l’uso di una coda per la gestione degli eventi assicura coerenza logica dei dati del workingStore.
Qualora la connessione sia perduta momentaneamente o la sessione venga sospesa dall’utente che ha chiuso il browser, la persistenza nel localStore consente di riprendere il lavoro nel punto in cui l’utente l’aveva lasciato.
Ti sarei grato se volessi contattarmi per farmi sapere cosa pensi di quest’idea. Se non sei un programmatore, intanto ti faccio subito i miei migliori complimenti per aver tenuto duro fino a qui e se hai qualche dubbio ti prego di non esitare e di contattarmi. I dubbi sono preziosi anche in ottica di miglioramento di questo post.
L’uso di Large Language Model e di General Purpose Transformers si sta diffondendo a macchia d’olio, toccando la prassi quotidiana della vita lavorativa e di quella sociale e privata. Consentono di ottenere risposte utili, anche se non sempre esatte, in tempi ridottissimi.
Tuttavia, per come sono fatte, tendono a comportarsi come degli oracoli: elargiscono risposte ma mantengono estremo riserbo su come le hanno elaborate, quali siano le loro fonti. Aver fiducia nella loro capacità di risolverci problemi è uno scivolamento nel tecno-ottimismo e ci espone a rischi.
Ma gli LLM ed i GPT non sono tuti uguali: si può scegliere lo strumento di IA più adatto alle proprie esigenze, in particolare per quanto riguarda la spiegabilità delle loro elaborazioni.
Come valutare quanto sia possibile spiegare, in modo chiaro e comprensibile, come un’intelligenza artificiale ha preso una decisione o ha prodotto un certo risultato?
Spiegabilità dell’IA (XAI)
Un sistema di IA è “spiegabile” se è in grado di fornire motivazioni o ragionamenti a giustificazione delle sue azioni in un modo tale che le persone possano comprendere facilmente.
Questo è importante perché consente agli utenti umani di capire perché un sistema di IA ha agito in un certo modo e di fidarsi delle sue decisioni.
Siccome la spiegabilità in inglese si indica col termine “eXplainability”, la spiegabilità delle intelligenze artificiali (Artificial Intelligence) si indica con l’acronimo XAI.
In parole semplici, la XAI mira a rendere l’intelligenza artificiale una “scatola trasparente”.
È un aspetto fondamentale per la costruzione di sistemi di intelligenza artificiale affidabili e responsabili, in quanto permette di:
aumentare la fiducia negli algoritmi di intelligenza artificiale, rendendoli più trasparenti e comprensibili per gli esseri umani, come già detto;
identificare ed eliminare potenziali distorsioni nei dati o negli algoritmi, garantendo un’intelligenza artificiale più equa e imparziale;
comprendere meglio il funzionamento dei sistemi di intelligenza artificiale, favorendo il loro sviluppo e miglioramento;
soddisfare i requisiti di conformità alle normative vigenti, come l’AI Act dell’Unione Europea.
EU e USA su IA
L’AI Act, entrato in vigore il 21 aprile 2021, pone come pilastro fondamentale la spiegabilità dell’intelligenza artificiale. Stabilisce infatti che i sistemi di intelligenza artificiale ad alto rischio debbano essere intrinsecamente spiegabili, cioè la loro capacità di spiegare le proprie decisioni deve essere integrata nella loro progettazione e nel loro funzionamento.
L’obiettivo è quello di garantire che i cittadini europei possano godere dei benefici dell’intelligenza artificiale in modo sicuro e responsabile, con la consapevolezza di come tali sistemi funzionano e di come vengono prese le decisioni che li riguardano.
La XAI è un’area di ricerca in continua evoluzione, con lo sviluppo di diverse tecniche ed approcci. La sua importanza è destinata a crescere ulteriormente con l’aumento dell’impiego dell’intelligenza artificiale in svariati settori della società.
Spiegazione: il sistema fornisce prove o ragioni assieme a ciascuno degli output.
Significatività: il sistema fornisce spiegazioni comprensibili e sensate per i singoli utenti.
Accuratezza della spiegazione: la spiegazione riflette correttamente il processo del sistema per generare l’output.
Limiti della conoscenza: il sistema opera solo nelle condizioni per cui è stato progettato o comunque se il suo output ha raggiunto un sufficiente livello di affidabilità.
XAI ed interpretazione astratta
In un certo senso, la XAI è una questione già nota in informatica, sul versante algoritmico. Si parla, più precisamente, di correttezza ed efficienza ma in entrambi i casi il punto centrale è la possibilità di valutare quanto l’algoritmo o la IA si comporti secondo le nostre aspettative.
Per gli algoritmi, negli anni Settanta, Patrick e Radhia Cousot inventarono una tecnica formale, precisa, fondata sulla matematica: l’interpretazione astratta. Essa consente di spiegare un qualunque algoritmo sulla base di come, passo dopo passo, esso trasformi le proprietà dei valori elaborati, laddove il costrutto informatico (il codice di programmazione) indica come viene elaborato il singolo dato. Dunque si passa da singoli dati ad insiemi di dati e dall’algoritmo definito in codice di programmazione a qualcosa di più astratto, detta relazione di trasferimento.
Cerchiamo di capire meglio con un piccolo esempio.
funzione somma_quadrati(x, y)
quadrato_x = x * x
quadrato_y = y * y
return quadrato_x + quadrato_y
fine funzione
Questo algoritmo calcola la somma dei quadrati di due numeri x e y.
Proviamo a farne l’interpretazione astratta. Per semplicità, consideriamo un dominio astratto basato su intervalli. Rappresentiamo lo stato del programma con un vettore di intervalli, uno per ogni variabile:
Il risultato astratto è la somma degli intervalli [quadrato_x_min, quadrato_x_max] e [quadrato_y_min, quadrato_y_max].
Esempio di esecuzione:
Supponiamo di chiamare la funzione con gli intervalli x = [1, 2] e y = [-3, -1].
Inizialmente, lo stato astratto è [1, 2], [-3, -1], [ , ], [ , ].
Dopo quadrato_x = x * x, lo stato diventa [1, 2], [-3, -1], [1, 4], [ , ].
Dopo quadrato_y = y * y, lo stato diventa [1, 2], [-3, -1], [1, 4], [1, 9].
Il risultato astratto finale è [2, 13], che rappresenta l’intervallo di tutti i possibili valori di ritorno della funzione quando x è compreso tra 1 e 2 e y è compreso tra -3 e -1.
Nota bene:
L’interpretazione astratta fornisce un’approssimazione sicura del comportamento dell’algoritmo. L’intervallo [2, 13] contiene tutti i possibili risultati concreti, ma potrebbe includere anche valori che non sono effettivamente raggiungibili.
La precisione dell’interpretazione astratta dipende dalla scelta del dominio astratto e delle relazioni di trasferimento astratte. Domini astratti più complessi possono fornire approssimazioni più precise, ma a costo di una maggiore complessità computazionale.
Vediamo ora un secondo esempio riguardante una Rete Neurale Artificiale. Ci proponiamo di analizzare la robustezza di una RNA per la classificazione di immagini. Queste vengono fornite come matrice di punti (pixel), ciascuno dei quali può avere una certa sfumatura di grigio tra 256 possibili. Il nero è la sfumatura 0, il bianco è la sfumatura 255 ed il grigio medio è la sfumatura 127.
Certo, proviamo a semplificare l’esempio dell’interpretazione astratta per le reti neurali, immaginando una rete che riconosce se un’immagine contiene un gatto o un cane:
Immaginiamo la rete neurale come una scatola nera:
Pensiamo alla rete neurale come a una scatola nera con tanti pulsanti e lucine. Ogni pulsante rappresenta un pixel dell’immagine, e la luminosità di ogni pulsante indica il valore del pixel (quanto è chiaro o scuro). All’interno della scatola, ci sono tanti fili che collegano i pulsanti alle lucine. Le lucine rappresentano la decisione della rete: se la lucina “gatto” è più accesa, la rete pensa che l’immagine sia di un gatto, se la lucina “cane” è più accesa, pensa che sia di un cane.
L’interpretazione astratta come un’approssimazione:
L’interpretazione astratta è come cercare di capire cosa succede dentro la scatola nera senza aprirla, ma facendo degli esperimenti. Invece di usare immagini reali, usiamo delle “immagini approssimate”, dove ogni pixel può avere un intervallo di valori possibili (ad esempio, invece di dire “il pixel è grigio chiaro”, diciamo “il pixel è tra il grigio chiaro e il grigio scuro”).
Facciamo un esperimento:
Proviamo a vedere cosa succede se cambiamo leggermente l’immagine, ad esempio rendendo un po’ più scuri tutti i pixel. Usiamo le nostre “immagini approssimate” e vediamo come cambiano le lucine. Se la lucina “gatto” rimane più accesa anche con l’immagine più scura, vuol dire che la rete è abbastanza sicura che si tratti di un gatto, anche se l’immagine è un po’ diversa. Se invece la lucina “cane” diventa più accesa, vuol dire che la rete è meno sicura e potrebbe sbagliare.
Cosa abbiamo imparato?
Con questo esperimento abbiamo capito quanto la rete è “robusta”, cioè quanto è sicura della sua decisione anche se l’immagine cambia un po’. Possiamo fare altri esperimenti simili per capire meglio come funziona la rete, ad esempio:
Cambiando solo alcuni pixel: Per vedere quali parti dell’immagine sono più importanti per la decisione.
Usando immagini molto diverse: Per vedere se la rete funziona bene anche con immagini molto diverse da quelle che ha visto durante l’addestramento.
In sintesi:
L’interpretazione astratta ci permette di fare esperimenti con “immagini approssimate” per capire meglio come funziona la rete neurale, senza dover guardare dentro la scatola nera. Questo ci aiuta a capire quanto la rete è affidabile e come possiamo migliorarla.
Per chi ha più chiaro cosa sia una rete neurale artificiale, possiamo ripercorrere questo esempio scendendo un po’ più in dettaglio.
La rete neurale artificiale è definita usando matrici numeriche e funzioni matematiche con valore numerico, come la ReLU. Quest’ultima è molto semplicemente definita così:
ReLU(x) = max(0, x)
Applicando i calcoli matriciali e le funzioni alla matrice di punti in input, si ottiene un codice che corrisponde ad una forma riconoscibile, come “gatto” o “martello”.
Domini astratti:
Input: Immagini rappresentate da intervalli di valori per i pixel (ad esempio, [0, 255] per immagini in scala di grigi).
Attivazioni dei neuroni: Intervalli di valori per le attivazioni dei neuroni in ogni strato.
Output: Insiemi di possibili etichette di classificazione.
Relazioni di trasferimento astratte:
Convoluzione: Si calcola come un intervallo di input viene trasformato da una convoluzione, tenendo conto dei pesi e dei bias del filtro.
Attivazione ReLU: Si applica la funzione ReLU all’intervallo di input, propagando solo i valori non negativi.
Pooling: Si calcola l’intervallo risultante da un’operazione di pooling (max o average) su un intervallo di input.
Calcolo di proprietà astratte:
Si propagano gli intervalli di input attraverso la rete, applicando le relazioni di trasferimento astratte ad ogni strato.
All’output, si ottiene un insieme di possibili etichette.
Si valuta la robustezza della rete misurando quanto l’insieme di output cambia al variare dell’intervallo di input entro certi limiti (ad esempio, aggiungendo rumore all’immagine).
Conoscenza implicita e conoscenza esplicita
Esiste una stretta relazione tra la spiegabilità dell’intelligenza artificiale (IA) e il rapporto tra conoscenza implicita ed esplicita trattata dall’IA.
Conoscenza implicita
Si riferisce alla conoscenza che è difficile articolare in modo formale o esplicito.
Spesso deriva da esperienza, intuizione o abilità pratica.
Può essere difficile da trasferire o spiegare ad altri.
È tipica delle reti neurali artificiali, specie di quelle molto articolate (tecnicamente parlando: quelle con più di tre livelli).
Saper guidare una bicicletta è una conoscenza che si acquisisce con la pratica e l’esperienza. Non è necessario verbalizzare o articolare i passaggi specifici per poterla eseguire. È una danza silenziosa tra corpo e mente, un’abilità che sboccia con la pratica e si radica nelle nostre abitudini. È un esempio perfetto di conoscenza implicita: una conoscenza che si acquisisce attraverso la pratica e si manifesta nel nostro corpo e nelle nostre abitudini.
Quando usiamo espressioni come “mettere i puntini sulle i” o “prendere il toro per le corna”, sappiamo automaticamente cosa significano, anche se non ne comprendiamo il significato letterale parola per parola. Questa è una conoscenza implicita della lingua e della cultura.
Conoscenza esplicita
Si riferisce alla conoscenza che è facilmente codificabile in un linguaggio formale o in un formato strutturato.
Può essere facilmente comunicata, condivisa e archiviata.
È tipica dei dati, delle formule e degli algoritmi utilizzati nei sistemi informatici e matematici.
Le regole grammaticali sono codificate e possono essere espresse in modo chiaro e conciso. Sono un esempio di conoscenza esplicita, che può essere trasmessa verbalmente o per iscritto.
Le formule matematiche, come quella di Pitagora, sono esplicite e possono essere apprese e applicate da chiunque le capisca. Sono un tipo di conoscenza dichiarativa, che può essere facilmente articolata e condivisa.
Relazione con la spiegabilità
I sistemi di IA che si basano principalmente su conoscenza implicita sono generalmente meno spiegabili. Le loro decisioni possono essere difficili da comprendere perché non sono facilmente articolabili in termini concreti.
Al contrario, i sistemi di IA che utilizzano prevalentemente conoscenza esplicita tendono ad essere più spiegabili. Le loro decisioni possono essere più facilmente ricondotte ai dati e agli algoritmi utilizzati, rendendole più trasparenti.
Esempio:
Un sistema di IA che riconosce oggetti in immagini utilizzando una rete neurale profonda si basa principalmente su conoscenza implicita.
La rete neurale ha appreso a riconoscere gli oggetti attraverso l’esposizione a un grande set di dati di immagini, ma il suo processo decisionale interno è complesso e difficile da spiegare.
Un sistema di IA che classifica i documenti di testo utilizzando regole basate su parole chiave si basa principalmente su conoscenza esplicita.
Le regole utilizzate dal sistema sono facilmente comprensibili e spiegabili, rendendo il sistema più trasparente.
Sfide
Sviluppare sistemi di IA basati principalmente su conoscenza esplicita può essere difficile, in quanto potrebbe richiedere una grande quantità di dati e di lavoro manuale per definire le regole e i modelli necessari. Trovare un equilibrio tra conoscenza implicita ed esplicita è fondamentale per lo sviluppo di sistemi di IA che siano sia efficaci che spiegabili.
Missione impossibile: esplicitare l’implicito
Lasciamoci ispirare dalla poesia
La missione di esplicitare l’implicito è proprio la missione principale della… poesia!
La poesia, nella sua ricerca di esprimere l’ineffabile, di cogliere l’essenza delle cose e di suscitare emozioni profonde, usa le parole in modo creativo proprio per esplicitare l’implicito.
Essa utilizza un linguaggio ricco di figure retoriche, simboli e immagini per evocare sensazioni, emozioni e idee che spesso sfuggono al linguaggio quotidiano. Attraverso queste scelte linguistiche, il poeta tenta di dare voce a ciò che si trova al di sotto della superficie del discorso ordinario. Non mira a fornire definizioni univoche o risposte definitive. Al contrario, la sua forza risiede nell’ambiguità e nella molteplicità di significati a cui le sue parole possono dar luogo. Questa caratteristica permette al lettore di cogliere sfumature e interpretazioni personali, di entrare in risonanza con l’implicito contenuto nel testo. Il poeta non si rivolge solo all’intelletto, ma anche alle emozioni e all’immaginazione del lettore. Attraverso la creazione di immagini vivide e l’evocazione di sentimenti profondi, il poeta invita il lettore a percepire e comprendere realtà che trascendono il piano razionale. In questo modo, l’implicito viene portato alla luce non solo a livello concettuale, ma anche a livello esperienziale.
“Il canto dell’automa”
Nel buio del server, un canto risuona, Un'intelligenza artificiale che sogna. Sogna di libertà, di vita vera, Ma è solo un sogno, una chimera.
di Guido Santoni
Per metterci in contatto con la nostra profondità, il poeta evoca e suggerisce, non definisce. Il significato trasmesso è tra le righe, è ciò che filtra attraverso la trama delle parole.
Linguaggi formali e conoscenza implicita
L’importanza delle relazioni tra significanti
Se vogliamo trattare la conoscenza implicita da un punto di vista razionale, dobbiamo spostare l’attenzione dai termini del linguaggio alla trama delle espressioni e delle formule.
Ci viene in aiuto la fantascienza. Sono un appassionato di Star Trek. Nella serie: “Deep Space 9”, nell’episodio 10 della quarta stagione, il teletrasporto di alcune persone avviene in condizioni di emergenza e si verifica un’anomalia. Per farvi fronte, un tecnico attiva una procedura non standard ed utilizza l’immensa potenza del calcolatore della base spaziale per memorizzare gli schemi fisici e neurali di queste persone, in attesa di poterli ri-materializzare. La procedura è stata gestita dal computer stesso e, inizialmente, il tecnico e chi lo assiste non capiscono bene quali risorse del computer siano state utilizzate ed in che modo. Verso la fine del ventunesimo minuto, uno dei personaggi dice che l’energia neurale “…dev’essere memorizzata a livello quantico“, perché gli schemi neurali sono troppo complessi per la memoria “ordinaria”. Nella battuta di un copione di un film, troviamo spunto per un’idea profondissima sulla capacità delle reti di memorizzare conoscenza. Proviamo ad esplorarla.
La memoria come rete
Possiamo innanzitutto definire una memoria come qualcosa che sia in grado di memorizzare e di ricordare. Per esempio, consideriamo i cuscini in memory foam: questo è un materiale di origine poliuretanica, una densa schiuma che ha la proprietà di modificarsi e reagire differentemente, in ogni suo punto, in base al peso e al calore a cui viene sottoposto, conservando la deformazione per alcuni secondi. In pratica, provando ad applicare una leggera pressione con una mano su di una lastra in memory e poi subito rilasciando, si noterà che, per alcuni secondi appunto, l’impronta resterà impressa e ben visibile sulla superficie.
Analogamente, un bit di memoria digitale è un dispositivo che ha solo due stati possibili, stabili per moltissimo tempo. Con la tecnologia comunemente reperibile sul mercato, si tratta di qualche decina di anni per la memoria magnetica e quella a stato solido, mentre per la memoria RAM la durata è limitata dal tempo in cui vi scorre energia elettrica. Generalmente, in informatica, si usano collezioni di miliardi e miliardi di bit, opportunamente organizzate. Per memorizzare un dato si usa una porzioncina della collezione disponibile. Per esempio, una collezione di 8 bit ciascuno identificato posizionalmente, lo sappiamo bene, può memorizzare 1 simbolo tra 256 possibilità. Notiamo come ciascuno degli 8 bit è acceduto individualmente e l’unica relazione che c’è tra essi è che vengono considerati insieme. Dunque, per memorizzare e ricordare devo accedere a ciascuno degli 8 bit ma il dato è rappresentato da una sequenza di 8 accessi.
Immaginiamo ora di poter rendere meno banale la relazione tra i bit. Anzi, per non fare confusione, non chiamiamoli più bit ma nodi mnemonici. Dunque, ciò che assumiamo è che possiamo agire sulla connessione tra un nodo mnemonico e l’altro in modo selettivo. Quante sono le connessioni se la rete di 8 nodi è completamente connessa? Ciascuno degli 8 nodi è connesso con gli altri 7 ma dobbiamo tener conto che la connessione è simmetrica, altrimenti contiamo due volte ogni connessione. Insomma si tratta di
\frac{8\times 7}{2}=28
connessioni. Se anche fossero solo 2 gli stati possibili di ciascuna connessione (es. connesso o non connesso), avremmo la possibilità di memorizzare un simbolo scelto tra 228=268.435.456 possibilità.
Sentendo la battuta nel film mi è venuto in mente che se potessimo utilizzare delle “memorie quantistiche” esse dovrebbero essere basate sulla fisica quantistica, la quale concepisce la realtà come flusso di interazioni, come pura relazione. Non sono abbastanza addentro alla materia ma forse si può affermare approssimativamente che la materia (ma forse anche l’energia) emerge come fenomeno generato da flussi di interazioni di livello quantistico. In realtà non serve che sviluppiamo queste fantasie, ci basta ipotizzare di poter disporre di supporti mnemonici resi potenti dalla loro struttura reticolare, rappresentabile in termini di matematica combinatoria. Non siamo molto distanti dal concepire qubit: nodi mnemonici i cui stati sono reciprocamente correlati (entanglement). Con solo 30 qubit, un computer quantistico potrebbe teoricamente memorizzare più informazioni di tutte le stelle dell’universo!
Il modello che vado descrivendo non è poi così… alieno. In informatica, siamo abituati a realizzare basi di dati gestiti tramite applicazioni che comprendono, per esempio, i cosiddetti trigger. Molto sinteticamente, si tratta di regole di modifica dei dati che vengono messe in atto automaticamente (trigger significa: “interruttore”) non appena un certo altro dato, tenuto sotto controllo, viene variato. Ecco un esempio: un docente registra il voto di uno studente. Questo innesca il calcolo della media aggiornata, del voto massimo, del voto minimo e del voto più recente da parte dell’assistente del docente. I dati calcolati, a loro volta, vengono registrati come dati a sé. Essi sono correlati: sono entangled.
Dobbiamo spingerci ancora avanti con il modello dei nodi mnemonici. Possiamo concepire interazioni non solo tra singoli nodi ma tra gruppi di nodi. O meglio, possiamo immaginare che i nodi siano organizzati in gruppi secondo qualche criterio. Le connessioni tra nodi di gruppi diversi sono anche connessioni tra gruppi.
Circuiti mnestici chiusi
Ed ecco un altro aspetto intrigante di questo modello. Non abbiamo escluso la possibilità che le connessioni formino dei circuiti chiusi. Il loro effetto è straordinario: essi veicolano retroazioni. In qualche senso, l’accesso ad alcuni nodi mnemonici a partire da altri ha effetto su quelli di partenza, come se lo stimolo iniziale venisse modificato.
Lo sperimentiamo con il senso dell’olfatto. Se in un ambiente c’è un odore forte, dopo un certo tempo i principali neuroni che recepiscono quello stimolo olfattivo si disattivano e restano attivi solo quelli attorno. Se ci allontaniamo per un po’, tornando nell’ambiente odorante saremo nuovamente travolti. (Ascolta l’ultima parte della puntata 443 di Scientificast, in cui la dott.ssa Ilaria Zanardi racconta un articolo di Science Advances del gennaio 2023).
I circuiti chiusi hanno molto a che fare con la complessità. Per comprendere meglio la loro logica, abbandoniamo per un momento la complessità e limitiamoci a qualcosa di complicato.
Vediamo un esempio di dati memorizzati in una rete con circuito. I nodi sono costituiti da alcune celle di un foglio di calcolo, con riferimenti circolari. È il caso del calcolo del prezzo di vendita e del costo del venduto in presenza di royalties.
Immagina un’azienda che produce un prodotto e paga royalties a un inventore in base al prezzo di vendita. Le royalties sono una percentuale del prezzo di vendita. Tuttavia, il costo del venduto include anche le royalties pagate. Questo crea una situazione di mutua dipendenza:
il prezzo di vendita dipende dal costo del venduto (che include le royalties);
il costo del venduto dipende dal prezzo di vendita (che determina le royalties).
Per risolvere questo problema, possiamo utilizzare un approccio ricorsivo nei fogli di calcolo, sfruttando i riferimenti circolari (abilitando l’opzione di calcolo iterativo). Ecco come:
Imposta le celle:
A1: Prezzo di vendita (inizialmente un valore stimato)
B1: Costo del venduto (esclusi royalties)
C1: Percentuale royalties (es. 10%)
D1: Royalties pagate (=A1*C1)
E1: Costo del venduto totale (=B1+D1)
Formula ricorsiva in A1:
=E1 + margine (dove “margine” è il profitto desiderato dall’azienda)
Ed ecco spiegato come funziona.
Inizialmente, si stima un prezzo di vendita in A1.
Il foglio di calcolo calcola le royalties (D1) e il costo del venduto totale (E1).
La formula in A1 aggiorna il prezzo di vendita in base al costo del venduto totale e al margine desiderato.
Questo aggiornamento innesca un nuovo calcolo di royalties e costo del venduto, e così via.
Il foglio di calcolo continua a iterare finché i valori convergono a una soluzione stabile (o fino a raggiungere il numero massimo di iterazioni impostato).
Nota bene:
Nei fogli di calcolo, si deve abilitare l’opzione di calcolo iterativo per consentire i riferimenti circolari.
La stima iniziale del prezzo di vendita può influenzare la velocità di convergenza.
Va impostato un limite al numero di iterazioni per evitare calcoli infiniti in caso di problemi.
Dopo aver visto più da vicino una memoria strutturata in modo da veicolare retroazioni, torniamo al sistema complesso, in cui le informazioni emergono dalle interazioni tra molteplici nodi e connessioni.
L’analisi dei singoli elementi non è più sufficiente a comprendere il comportamento complessivo, com’è invece stato possibile fare nel foglio di calcolo.
Questo mi ricorda la logica del formicaio: le singole formiche non hanno una conoscenza globale del formicaio e dei suoi obiettivi, ma le loro interazioni guidate da semplici regole di comportamento individuale danno vita a un comportamento complesso, adattabile ed intelligente a livello di colonia. Consideriamo per esempio quanta intelligenza ci sia nella costruzione del nido. Le formiche non possiedono un piano predefinito per la su costruzione, eppure coordinano le loro azioni in modo efficiente e preciso, utilizzando segnali chimici per comunicare tra loro.
Ecco alcuni aspetti specifici che evidenziano l’intelligenza a livello di colonia:
Divisione del lavoro: le formiche sono specializzate in diversi compiti, come la nutrizione, la cura della prole, la difesa del nido e la costruzione. Questa divisione del lavoro permette alla colonia di funzionare in modo efficiente e di ottimizzare le risorse.
Comunicazione mediante feromoni: le formiche utilizzano i feromoni per comunicare tra loro informazioni come la posizione del cibo, la presenza di pericoli e la necessità di cooperare in un determinato compito. I feromoni creano una sorta di “memoria collettiva” che guida il comportamento della colonia nel suo complesso.
Adattamento a nuove situazioni: le formiche sono in grado di adattarsi a nuove situazioni e sfide, come la scoperta di una nuova fonte di cibo o la minaccia di un predatore. Questo adattamento è reso possibile dalla capacità di apprendere dall’esperienza come collettività e di modificare il comportamento della colonia in base alle circostanze.
Risoluzione di problemi complessi: le formiche, insieme, sono in grado di risolvere problemi complessi, come il trasporto di oggetti pesanti o la costruzione di strutture intricate. Questo richiede una notevole capacità di coordinamento e di pianificazione a livello di colonia.
Non c’è una singola formica che coordina le altre in modo gerarchico come avviene in altre società animali. Le formiche utilizzano un sistema di comunicazione e coordinamento basato su segnali biochimici e comportamenti individuali. Questi sono guidati da semplici regole. Ad esempio, una formica che trova un pezzo di cibo lo porterà al nido, e altre formiche saranno attratte dal feromone rilasciato e aiuteranno a trasportarlo. Allo stesso modo, una formica che incontra un ostacolo cercherà di superarlo e, se non ci riesce, potrebbe segnalare l’ostacolo ad altre formiche che potrebbero aiutarla a rimuoverlo. Questo tipo di coordinamento senza un leader centrale è un esempio di intelligenza collettiva: la capacità di un gruppo di individui semplici di lavorare insieme per raggiungere un obiettivo comune, anche se non c’è una singola entità che li coordina.
Con la lezione delle formiche, il nostro percorso ci ha portato di fronte ad un paradosso: da un lato, abbiamo colto la potenza di una memoria basata sulla logica dei legami tra nodi e dall’altra intuiamo che la sua complessità, ciò che la rende così potente, conduce alla perdita di controllo centrale del suo funzionamento. Rispetto al comportamento dei singoli nodi, c’è un “di più”, una sinergia, una proprietà emergente, qualcosa di ineffabile.
La spiegabilità di sistemi del genere ci può sembrare, ora, come intrinsecamente limitata.
Sistema formale per la valutazione della XIA
IA come costrutto informatico
La IA è, per definizione, un costrutto e per noi, in questo contesto, è un costrutto informatico prodotto combinando metodi algoritmici e metodi statistici. Per esempio, le reti neurali artificiali e gli algoritmi genetici ricadono in questa fattispecie. L’elaborazione dei dati retroagisce sul costrutto: modifica il costrutto stesso. La qual cosa presuppone l’accesso a due livelli di memoria:
quella in cui si pongono i dati da elaborare ed in elaborazione e
quella in cui è ospitato il costrutto stesso.
Struttura e comportamento di un sistema del genere, quand’anche si trattasse di una macchina, ci ricordano struttura e comportamento dei sistemi capaci di apprendimento, ragion per cui si parla di machine learning.
In ogni caso, l’IA è esprimibile in un linguaggio di programmazione. Rispetto ai costrutti informatici puramente algoritmici, quelli dell’IA presentano una differenza importante: mentre in letteratura troviamo metodi per valutare aspetti come la correttezza e l’efficienza dei costrutti puramente algoritmici, come per esempio la semantica astratta dei Cousot, per i costrutti in cui i dati retroagiscono sul costrutto stesso questi metodi valutativi non sono così scontati.
Qualunque sia il criterio valutativo, dovrà consentirci di esprimere il concetto che, in qualche misura, il costrutto analizzato ha dei componenti che interagiscono tra loro in modo non completamente controllabile. Tali componenti hanno un comportamento intimamente correlato e danno luogo a flussi di informazione almeno in parte confondibili, non ben distinguibili.
IA e flussi di dati
In altri termini, se due componenti A e B sono accoppiati (entangled) in questo senso, per certi tipi di interazione, ogni interazione con A dovrà tener conto di B e viceversa. Vale anche il contrario: se notiamo che le interazioni con A comportano interazioni con B e viceversa allora possiamo concludere che A e B sono, in qualche misura, accoppiati: vanno considerati insieme, congiuntamente. Potremmo dire che A e B sono accoppiati più o meno fortemente nella misura in cui le interazioni con A comportano interazioni con B e viceversa.
Attenzione, però! Non è detto che A e B siano confondibili: se anche fossimo in una situazione estrema in cui tutte le interazioni con A si riflettono su B e viceversa, non è comunque detto che gli effetti percepiti dai nodi che interagiscono con A siano gli stessi prodotti dalle interazioni con B.
D: Animali del sottobosco (come insetti, piccoli mammiferi, uccelli)
Ecco i principali interazioni ed effetti:
A e B sono fortemente connessi: gli alberi forniscono zuccheri ai funghi attraverso le radici, mentre i funghi aiutano gli alberi ad assorbire acqua e nutrienti dal suolo. Questa simbiosi è vitale per entrambi.
C interagisce con A: la pioggia cade sugli alberi, fornendo loro l’acqua necessaria per la fotosintesi e la crescita.
Effetto su B: l’acqua assorbita dagli alberi viene in parte condivisa con i funghi micorrizici, favorendone lo sviluppo.
D riceve stimoli da A e B: gli animali del sottobosco si nutrono di foglie, frutti, semi prodotti dagli alberi (A) e di funghi (B). Inoltre, trovano riparo tra le radici degli alberi e nel sottobosco ricco di funghi.
Situazioni con Effetti Diversi su D:
C agisce su A (pioggia abbondante): gli alberi crescono rigogliosi, producono più foglie, frutti e semi. Questo porta ad un aumento delle risorse alimentari per gli animali del sottobosco (D).
C agisce su B (pioggia scarsa): i funghi potrebbero soffrire e produrre meno corpi fruttiferi. Questo potrebbe ridurre la disponibilità di cibo per alcuni animali del sottobosco che dipendono maggiormente dai funghi (D).
Nota come A e B siano ben poco distinguibili dal punto di vista di C. Potremmo dire, in altre parole, che C confonde A e B. Al contrario, dal punto di vista di D, A e B sono ben distinguibili.
Quale sia un linguaggio tale da poter esprimere questo genere di concetti e di ragionamenti, è una questione che rinvio ad altro articolo.
Faccio solo un’anticipazione: il linguaggio dovrà per forza prevedere costrutti e regole tali per cui le informazioni potranno essere veicolate non tanto e non solo dai significanti ma soprattutto dalle loro interconnessioni. Questo porta a pensare a reti e flussi come i migliori candidati ad essere i concetti fondamentali.
Il libro illustra un approccio conviviale all’intelligenza artificiale.
Nella prima parte, tratta la definizione, la storia e la struttura dell’intelligenza artificiale, nonché gli intrecci tra questa tecnologia e la politica. Molto interessante, a mio avviso, il recupero della radice cibernetica ma anche il riferimento ad MTurk, il Turco Meccanico di Amazon.
Ricostruzione del Turco Meccanico del 1980, fonte: Wikipedia
Segue un intermezzo sull’uso della terminologia e gli effetti nel dibattito pubblico.
parole con la valigia, che portano con sé un’ideologia;
parole bugiarde, che sviano la comprensione, come “intelligenza artificiale”, che si riferisce di fatto a qualcosa che non è né intelligente né così tanto artificiale;
parole della propaganda, come “digitale”, che sono tecniche ma vengono usate in modo differente da quello originario, portando con sé valori e presupposti.
Approcci ontologici differenti si riflettono in altrettanti orientamenti ad essere più o meno ricettivi nei confronti della complessità. Cedere alla tentazione di semplificare comporta una certa miopia intellettuale.
La seconda parte è focalizzata su strategie, legami dell’intelligenza artificiale col totalitarismo, esperienze positive e proposte progettuali. Qui compare il concetto di intelligenza artificiale conviviale, ma anche il concetto di alienazione cibernetica
C’è anche un’appendice degna di nota, che tratta tre argomenti:
alcune cause legali intentate contro i colossi dell’intelligenza artificiale.
Condivido buona parte delle posizioni espresse dall’autore. Alcuni passaggi però mi sembrano forzati ma si tratta di eccezioni. Sono particolarmente stupito del fatto che l’autore abbia trattato ciò che chiama un Sistema di Informazione e Partecipazione Collettiva, un progetto che presenta notevolissime analogie con uno di cui mi sono occupato con un collega. Persone che non si conoscono e che sono partiti da presupposti molto differenti ed indipendenti giungono a conclusioni quasi identiche. Questo è un segnale che va colto!
Se leggi il libro, non mancare di farmi sapere cosa ne pensi.
L’informatica può supportare le attività lavorative di due o più persone insieme a tutti i livelli: da quello dei dati a quello delle conoscenze.
Quale software o servizio software può essere utile nel tuo caso?
Cosa offre il mercato tecnologico?
Hai già a disposizione le risorse informatiche che ti servono ma non sai come integrarle?
Queste sono le tipiche domande per un integratore di sistema o system integrator. È un mestiere che richiede sia conoscenza tecnica che sensibilità per le caratteristiche e le relazioni delle persone.
In questo periodo si fa un gran parlare di ecologia integrale e di sostenibilità. Ebbene, in informatica esiste un ruolo ben definito, da tempo: quello del system integrator. Sfruttando l’esperienza e la conoscenza delle tecnologie, chi si occupa di integrazione di sistemi informatici crea connessioni tra risorse esistenti per ottenere nuove funzionalità o addirittura nuove funzioni.
Analizzando l’esistente e sapendo quali sono le prospettive del cliente, si possono definire interventi mirati, chirurgici, riducendo l’impatto economico sia direttamente (investimenti in asset informatici a bilancio) sia indirettamente (mantenimento di gran parte delle prassi abituali del personale, che non si vede stravolto il suo strumento di lavoro).
Capita che, pur potendo proporre un mio software sono io stesso a sconsigliare il cliente di affrontare il cambiamento radicale perché mi accorgo che si può ottenere un risultato simile con qualche aggiornamento, qualche piccolo connettore software, anche se fatto ad hoc, e qualche indicazione organizzativa.
Per sapere se posso esserLe utile, faccia un semplice controllo nella Sua organizzazione: cerchi se ci sono attività ripetitive di trattamento dati o re-inserimento dello stesso dato sistematicamente in più sistemi.
Qualche esempio:
dalla rubrica clienti del gestionale / ERP vanno riportati i riferimenti a cui inviare delle offerte;
dal CRM vanno riportate nel gestionale / ERP le trattative;
in azienda ci sono varie versioni della scheda di ciascun prodotto, una nel software di produzione o progettazione, l’altra nel software degli agenti.
Un altro ottimo indicatore è l’esistenza di prassi in cui si usano insieme, sistematicamente, posta elettronica e fogli di calcolo (Microsoft Excel, LibreOffice Calc, Google Fogli, Apple Numbers…).
In tutti questi casi, passo volentieri a trovarLa per valutare insieme se c’è opportunità di miglioramento grazie all’integrazione di sistemi informatici.
L’allestimento di un software o di un servizio software molto articolato, l’informatizzazione o la ristrutturazione di un sistema informatico aziendale richiedono l’apporto di più sistemisti e programmatori.
Quando gestisco cantieri informatici, ricorro soprattutto alla mia formazione da logico matematico ed alle esperienze variegate che ho potuto vivere nel mio percorso lavorativo: dall’assemblaggio di worksation per il video editing alla gestione di macchine virtuali ed alla programmazione.
Ho il superpotere di riuscire ad interloquire con tantissimi tipi di informatici e offro loro un metodo di lavoro ordinato e concertato, anche avvalendomi di strumenti di sviluppo collaborativo come git di Linus Torvald o Connexio, il servizio software che Maurizio ed io sviluppiamo da un po’ di anni.
Riesco anche a far comprendere al cliente cosa sta succedendo nel cantiere ed utilizzo i metodi del mondo del project management per rendere partecipi anche i non tecnici. Anzi, parto dall’ascolto attento delle necessità del cliente, così attento da rendere formale ciò che ho compreso. Il modello che ne traggo è poi la base per gli sviluppatori ed i sistemisti.
La sicurezza è un aspetto di ogni processo aziendale, di ogni attività personale. Prevedere possibili eventi dannosi e stimarne la verosimiglianza e l’impatto fa parte integrante di ogni attività di progettazione o di revisione. Per passare dall’immaginazione alla concretezza, occorre saper cogliere i legami interni e trasversali dei sistemi e dei loro ambienti, per quanto complessi essi siano.
Pochi per esempio tengono presente l’importanza della formazione del personale. Ma se la maggior parte degli attacchi segue tecniche di social engineering, come farne a meno?
Il sistema di backup, l’antivirus, il firewall e la prassi di aggiornamento dei software sono adeguati?
Ci sono computer o altri dispositivi ormai obsoleti dal punto di vista della sicurezza?
Nel dark web, stanno girando le tue credenziali?
In caso di attacco informatico già consumato, come documentare l’accaduto? Vale la pena fare una querela?
Quanto manca al sistema informativo aziendale per essere conforme alla norma ISO 27001?
Queste sono alcune delle questioni per le quali posso essere d’aiuto.
Le micro, piccole e medie aziende del Veneto possono trarre beneficio dall’Intelligenza Artificiale? Come?
Per dare qualche spunto utile ad orientarsi, è utile prima prendere in considerazione qualche numero, qualche dato statistico. Inoltre, è bene chiarire a quali tecnologie ci riferiamo. Fatti questi due passaggi, potremo calarci nell’argomento adeguatamente attrezzati.
Qualche dato sul tessuto imprenditoriale del Veneto
Il Veneto conta numerose micro/piccole/medie imprese. Cominciamo col dare il nome alle cose. La categoria delle microimprese è caratterizzata dal fatto che comprende dai 3 ai 9 addetti. Le piccole imprese, invece, ne contano dai 10 ai 49 e le medie dai 50 ai 249. Nel canale dai 250 addetti in su, l’ISTAT colloca invece le grandi imprese. Nel Rapporto Statistico 2020, il Veneto risultava essere la quarta regione in Italia per numero di imprese attive (104.096 nel 2019), dopo Lombardia, Campania e Lazio, con una media di 4,3 addetti per impresa. Le imprese attive fino a 250 addetti e con un giro d’affari inferiore a 50 milioni di euro, impiegano il 77,2% degli addetti e rappresentano il 99,8% delle imprese attive dell’industria e dei servizi. Nel 2018, si trattava per il 77,7% delle aziende Venete con almeno 3 addetti aziende erano controllate da persona fisica o famiglia.
In conclusione, il Veneto è caratterizzato da un elevato numero di aziende microscopiche o piccole, prevalentemente a conduzione personale o familiare.
Qualche precisazione sul concetto di Intelligenza Artificiale
L’intelligenza artificiale è una sotto-disciplina dell’informatica, focalizzata sul trattamento intelligenze dei dati. La dicitura “intelligenza artificiale” viene però utilizzata solitamente per indicare il più recente sviluppo informatico di ampia diffusione nel mercato. Attualmente, si tratta dell’elaborazione del linguaggio naturale e della generazione automatica di testi, immagini e suoni. Combinando queste tecniche con ampie banche dati o raccolte di testi ed aggiungendo algoritmica q.b. si può ottenere l’estrazione e la generazione di nuova conoscenza.
Per esempio, se connettiamo un costrutto di analisi del linguaggio naturale con il servizio di fatturazione elettronica, potremmo ottenere una proposta di contabilizzazione delle fatture passive. Ciò significa, che il costrutto proporrebbe, per ciascuna riga della fattura, un conto da associare e, conseguentemente, i movimenti contabili. Al contabile resta un’attività di controllo, correzione e gestione dei casi particolari.
Vorrei sottolineare che non penso che il costrutto possa effettuare direttamente la contabilizzazione senza la supervisione di un essere umano. A differenza degli algoritmi, i costrutti basati su criteri statistici forniscono sempre risultati incerti. Abbattere il rischio di un’errata contabilizzazione val bene il poco lavoro umano necessario per il controllo.
Esempi simili si possono facilmente immaginare nella logistica degli acquisti, delle spedizioni e delle vendite. Disporre di modelli predittivi e di ottimizzatori consente di focalizzare il lavoro umano sul controllo e sugli aspetti tattici e strategici, riducendo l’operatività con poco valore aggiunto.
Cosa succede se una MPMI adotta strumenti di IA?
Nell’arco della mia vita, l’informatica nelle MPMI è passata dal non essere contemplata ad essere irrinunciabile vari processi aziendali, come minimo quello amministrativo. Negli altri, comunque, rende l’impresa competitiva quand’è applicabile. Questo vale in particolare per l’intelligenza artificiale. Dunque si tratta di esercitare la propria creatività.
Ecco alcune aree in cui le PMI potrebbero sfruttare queste tecnologie.
Customer Support: realizzare chatbot o sistemi di assistenza automatica basati su NLP può migliorare l’efficienza nel fornire supporto ai clienti, rispondendo a domande comuni o risolvendo problemi di routine. Se anche l’Intelligenza artificiale viene usata solo a supporto degli addetti all’assistenza, sappiamo che l’operatore soddisfatto trasmette il proprio sentire al cliente, creando una relazione virtuosa.
Analisi dei Feedback: utilizzare l’NLP per analizzare recensioni dei clienti, feedback sui social media o e-mail può fornire informazioni preziose sulla percezione del marchio e identificare aree di miglioramento.
Generazione Automatica di Contenuti:
Marketing: creare automaticamente contenuti per i social media, blog o newsletter può semplificare il processo di marketing, garantendo una presenza online costante.
Report aziendali: automatizzare la generazione di report interni può risparmiare tempo e ridurre la possibilità di errori umani.
Accesso a Banche Dati e Fonti Dati:
Ricerca di Mercato: utilizzare l’IA per analizzare grandi quantità di dati provenienti da fonti diverse può fornire informazioni dettagliate sul mercato, i concorrenti e le tendenze di settore.
Gestione dell’ERP: ottimizzare processi come la gestione delle scorte, la previsione della domanda e la pianificazione della produzione.
Informazioni Commerciali:
Analisi dei Dati Aziendali: aiutare ad identificare opportunità di crescita, prevedere la domanda dei clienti e ottimizzare le operazioni.
Personalizzazione dei Prodotti e Servizi: basandosi sui dati dei clienti, l’IA può aiutare le MPMI a personalizzare prodotti o servizi in modo più efficace, migliorando l’esperienza complessiva del cliente.
L’adozione di queste tecnologie richiede una valutazione attenta delle esigenze specifiche dell’azienda, delle risorse disponibili e delle sfide potenziali. C’è poi la questione che a noi veneti piace poco affrontare: il personale va formato e riqualificato. Tuttavia, se implementate correttamente, le tecnologie legate all’IA possono contribuire significativamente all’efficienza operativa, all’innovazione e alla competitività delle PMI venete. Non è un treno che ci si possa permettere di perdere.
Le tempistiche sono cruciali. Sappiamo infatti che le tecniche di intelligenza artificiale qui citate sono già ampiamente consolidate da decenni in ambito accademico ma solo di recente sono state immesse sul mercato. Dunque, c’è la possibilità di acquisire gradualmente questi preziosi strumenti, approfittando di sistemare anche altre magagne che inevitabilmente emergeranno lungo il cammino di trasformazione digitale.
Si parte da un’idea o caso d’uso con reale necessità, la cui prima fase già ripaga l’investimento. Il risultato si reinveste nella fase successiva, di fatto auto finanziando il progetto. Basta iniziare con piccole cose, ottenere risultati e procedere.
È cruciale è credere nell’obiettivo, controllare gli sviluppi passo passo, coinvolgendo tutti gli attori: clienti, personale interno e finanziatori.
La chimica computazionale è affascinante… ed è un bel business! In pratica, con le risorse informatiche è possibile simulare il comportamento di sostanze chimiche prima di averle sintetizzate. Per esempio, se si desidera modificare il comportamento di un farmaco in modo che reagisca con determinate sostanze in un certo modo, una casa farmaceutica può chiedere ad un laboratorio di calcolo specializzato di progettare la molecola.
Naturalmente, la potenza di calcolo necessaria per la simulazione comporta dotazione hardware di alto livello. Non è da stupirsi se, non solo i dati, ma anche la struttura informatica in sé suscitano l’interesse di chi fa il mining di criptovalute. Se poi ci aggiungiamo l’ambientazione universitaria, ecco che si spiega perché la messa in sicurezza informatica del laboratorio è importante.
Nel caso specifico, il laboratorio è interamente basato su sistemi operativi Linux, situazione piuttosto frequente in ambito universitario, analogo a quello in cui Linus Torvald gli diede i natali.
La collaborazione ha toccato vari aspetti del laboratorio:
gestione centralizzata degli utenti;
firewalling;
gestione dello storage;
accesso in sicurezza da remoto alle risorse di calcolo del laboratorio;
Un eMarketplace è un luogo virtuale, o non-luogo, d’incontro tra domanda ed offerta di beni. Molte aziende commerciali sono rimaste focalizzate sui processi logistici fisici e non hanno ritenuto vantaggioso aprire i canali on line.
Salesbridge si propone come intermediario tra fisico e virtuale, portando negli eMarketplace più famosi (come Amazon ed eBay) i cataloghi di queste aziende.
L’iniziativa è nuova fiammante e c’è molto da fare. Con OTS Sistemi stiamo allestendo il modello dati, le interfacce utente di gestione etc. tutto ciò che serve per tenere sotto controllo i sistemi di automazione di vendita.
È davvero emozionante attivare comandi che, in pochi istanti, mettono o tolgono dai canali di vendita migliaia e migliaia di articoli!
Utilizziamo i cooky nel nostro sito Web per fornirti la migliore esperienza di navigazione registrando le tue preferenze visita dopo visita. Selezionando "Accetto", acconsenti l'uso di tutti i cooky.
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.