Il fallimento dei sistemi esperti e la transizione al ML

Vediamo un esempio pratico di un semplice sistema esperto.

il
Sviluppatore / Ingegnere informatico / Funzionario, Collaboratore di IProgrammatori

Nei primi articoli sulla AI abbiamo accennato ai Sistemi Esperti proposti tra gli anni ’80 e gli anni ’90, ma non abbiamo approfondito come erano fatti e perché non hanno avuto successo.

In questo articolo colmiamo questo gap e vediamo perché siamo passati al Machine Learning (ML), cioè all’apprendimento automatico.

Anatomia dei Sistemi Esperti

I sistemi esperti sono software che imitano il processo decisionale di una persona in un dominio specifico. In pratica sono software “verticali” che hanno lo scopo di gestire la base di conoscenza per dedurre nuove informazioni o per prendere decisioni, attraverso il Motore di inferenza.

La base di conoscenza contiene fatti e regole specifiche del dominio applicativo. Le regole sono spesso rappresentate in più passaggi decisionali (if-then = “se … allora …”).

Facciamo un esempio pratico con un tipo di sistema esperto dedicato al campo medico: dato un insieme di sintomi, vogliamo ottenere la patologia di cui è affetto il paziente.

La base di conoscenza potrebbe essere formata da affermazioni simili alle seguenti:

  • <SE> il paziente ha la febbre alta, tosse e difficoltà respiratorie,
    <ALLORA> potrebbe avere una polmonite;
  • <SE> il paziente ha mal di testa, rigidità del collo e febbre,
    <ALLORA> potrebbe avere una meningite;
  • … e così via …

Il medico inserisce i sintomi del paziente nell’interfaccia utente del sistema esperto e, dalla stessa interfaccia, ottiene le potenziali diagnosi e le raccomandazioni basate sui dati inseriti.

Ovviamente il medico dovrà poi verificare che la deduzione del sistema esperto sia corretta, eventualmente confermando la diagnosi attraverso analisi di laboratorio e/o la diagnostica per immagini ecc., per evitare che una patologia venga confusa con un’altra che magari non è ancora mappata nella base di conoscenza del sistema esperto. Questo è uno dei grossi limiti dei sistemi esperti che hanno contribuito alla mancata accettazione da parte del mercato.

Codice C# per un piccolo sistema esperto

Supponiamo di voler verificare se un paziente ha l’influenza, con le seguenti regole:

  • <SE> il paziente ha febbre e tosse e mal di gola,
    <ALLORA> il paziente ha l’influenza;
  • <SE> il paziente ha febbre e dolori muscolari e stanchezza,
    <ALLORA> il paziente ha l’influenza.

Il codice che potrebbe risolvere questo quesito è il seguente (codice per un progetto per Console):

using System;
using System.Collections.Generic;

public class DiagnosiInfluenza
{
    // Struttura per rappresentare i sintomi del paziente
    public class Sintomi
    {
        public bool Febbre { get; set; }
        public bool Tosse { get; set; }
        public bool MalDiGola { get; set; }
        public bool DoloriMuscolari { get; set; }
        public bool Stanchezza { get; set; }
    }

    // Metodo per determinare se il paziente ha l'influenza
    public static bool HaInfluenza(Sintomi sintomi)
    {
        // Regola 1: Se il paziente ha febbre, tosse e mal di gola
        if (sintomi.Febbre && sintomi.Tosse && sintomi.MalDiGola)
        {
            return true;
        }

        // Regola 2: Se il paziente ha febbre, dolori muscolari e stanchezza
        if (sintomi.Febbre && sintomi.DoloriMuscolari && sintomi.Stanchezza)
        {
            return true;
        }

        // Se nessuna regola è soddisfatta, il paziente non ha l'influenza
        return false;
    }

    public static void Main(string[] args)
    {
        // Creazione di un esempio di sintomi del paziente
        Sintomi pazienteSintomi = new Sintomi
        {
            Febbre = true,
            Tosse = true,
            MalDiGola = true,
            DoloriMuscolari = false,
            Stanchezza = false
        };

        // Determinare se il paziente ha l'influenza
        bool diagnosi = HaInfluenza(pazienteSintomi);

        // Stampa del risultato
        if (diagnosi)
        {
            Console.WriteLine("Il paziente ha l'influenza.");
        }
        else
        {
            Console.WriteLine("Il paziente non ha l'influenza.");
        }
    }
}

Ovviamente questo è solo un brevissimo esempio, ma per mappare tutti i possibili sintomi e le corrispondenti diagnosi direttamente nel codice sarebbero necessarie centinaia o forse migliaia di pagine. Un metodo più pratico (che poi è proprio quello che viene fatto nella realtà) è quello di archiviare i sintomi e le diagnosi in un database, in modo ordinato, così da rendere il sistema più semplice da gestire e aggiornabile direttamente dall’utente o periodicamente dal fornitore del software.

Pro e Contro dei Sistemi Esperti

Tra i vantaggi dei Sistemi Esperti (SE) possiamo citare i seguenti:

  • consentono la codifica e la conservazione della conoscenza di esperti umani, per renderla accessibile a una vasta gamma di utenti;
  • vengono forniti consigli e decisioni coerenti, basati su regole predefinite, che permettono (relativamente…) di ridurre il rischio di errori umani;
  • sono rese disponibili esperienza e conoscenza di specialisti che in certe situazioni potrebbero non essere facilmente accessibili.

Le limitazioni dei Sistemi Esperti che possiamo indicare sono invece:

  • la necessità di un mantenimento della base di conoscenza costantemente aggiornata;
  • la dipendenza da uno o più esperti di dominio, per codificare la base di conoscenza;
  • l’impossibilità di adattamento a nuovi dati o contesti, per una rigidità intrinseca del sistema;
  • la difficoltà di creare una base di conoscenza per particolari domini molto complessi. In questi casi, la crescita del numero di regole necessarie potrebbe crescere esponenzialmente, rendendo il sistema lento e difficile da gestire.

Transizione al Machine Learning (ML)

Il Machine Learning è emerso come soluzione per superare i limiti dei Sistemi Esperti, grazie a diverse innovazioni e progressi tecnologici.

Infatti, la digitalizzazione ha permesso l’aumento esponenziale della raccolta di dati da innumerevoli fonti e per vari domini (Big Data). È evidente che il Machine Learning può sfruttare tutti questi dati per apprendere i modelli e fare previsioni.

Inoltre, l’evoluzione dell’hardware, lo sviluppo di nuovi processori (CPU e GPU), con architetture di calcolo parallelo, ha permesso di addestrare modelli di ML complessi in tempi ragionevoli.

Sono stati sviluppati nuovi algoritmi di apprendimento, come le Reti Neurali profonde (Deep Learning) che hanno migliorato significativamente le capacità di apprendimento automatico (senza quindi la necessità di esperti di dominio), attraverso le tecniche come l’apprendimento supervisionato, non supervisionato e l’apprendimento per rinforzo.

Tornando all’esempio che abbiamo fatto sulla necessità di dedurre una patologia sulla base dei sintomi di un paziente, un sistema di ML utilizza un enorme dataset di cartelle cliniche storiche per addestrare il modello predittivo. Il modello apprende automaticamente le correlazioni tra sintomi e diagnosi e pertanto è in grado di dare le risposte corrette per nuovi casi che dovessero essere sottoposti al suo esame. Ovviamente possono essere aggiunti nuovi dati, con periodici aggiornamenti e addestramenti, in modo da riflettere l’avanzamento delle conoscenze nel campo della medicina (o di qualsiasi altro dominio di interesse).

Vantaggi del Machine Learning

I modelli di Machine Learning hanno diversi vantaggi rispetto ai Sistemi Esperti:

  • sono scalabili, cioè possono essere addestrati su grandi quantità di dati e possono gestire delle complessità che sarebbero impraticabili per i sistemi esperti;
  • sono flessibili e adattabili, nel senso che possono adattarsi automaticamente ai nuovi dati, migliorando continuamente le loro previsioni;
  • sono efficienti, perché un modello di Machine Learning, una volta addestrato, può fare previsioni rapidamente e con meno interventi umani;
  • in fine possono generalizzare i dati utilizzati per l’addestramento, facendo previsioni accurate su dati nuovi e mai visti prima.

Conclusione

La transizione dai sistemi esperti al machine learning è stata guidata dalla necessità di superare le limitazioni dei sistemi esperti. Con l'avvento del machine learning, l'intelligenza artificiale è diventata più flessibile, scalabile ed efficiente, portando a innovazioni significative nella medicina, nella finanza, nell'ingegneria e in molti altri campi.