Come creare la nostra Artificial Intelligence

28/03/22

Abbiamo parlato spesso di Artificial Intelligence, ma non l'abbiamo ancora fatto dal punto di vista di chi vuole avvicinarsi alla materia e provare a costruire la sua propria AI.

Oggi invece ci avviciniamo ai più giovani cercando di spiegare cosa occorre per realizzare una AI, quali strumenti sono utili e come procedere passo passo verso il proprio obiettivo. In questo articolo diamo per scontate alcune conoscenze, in particolare non spieghiamo cos'è una AI. Se proseguendo la lettura vi rendete conto di aver bisogno di rinfrescare qualche concetto, vi suggerisco di leggere l'articolo "La nuova rivoluzione digitale, il Deep Learning" di Andrea Piras, dove potrete trovare le definizioni e spiegazioni di AI, Machine Learning e Deep Learning.

Individuare il problema

Può sembrare strano ma se si vuole costruire una AI bisogna individuare per bene il problema che si vuole risolvere. 

Precisiamo subito che un problema che appare semplice dal punto di vista umano potrebbe essere difficile o complesso per una AI e viceversa. L'AI è di solito molto efficace nello svolgere compiti ripetitivi e che magari potrebbero essere alienanti per una persona. Per esempio supponiamo di aver bisogno di raccogliere foto e disegni di alcuni tipi di frutta (pere e mele). Potremmo assumere una persona capace di disegnare e mandarla in giro alla ricerca di soggetti da disegnare. Leonardo da Vinci probabilmente avrebbe girato per i mercati cittadini e per le campagne realizzando di persona i disegni. Oppure potremmo assumere un fotografo, chiedendogli di realizzare degli scatti che poi utilizzeremo per le nostre necessità. Potremmo anche assumere qualcuno che si metta a scandagliare internet alla ricerca di immagini e che poi le salvi in due cartelle diverse a seconda del soggetto. Potremmo, nell'ultimo caso, utilizzare una AI creata per lo scopo. Come vedete il compito è relativamente semplice, ma metodologia e tecnologia impiegate sono diverse. 

Allo stesso modo è possibile che l'identico problema sia risolvibile utilizzando tipi differenti di Intelligenza Artificiale. Occorre dunque cercare di definire bene il problema e scegliere la metodologia migliore per raggiungere lo scopo. Infine, a seconda del problema, potrebbe anche capitare che utilizzare una AI si riveli inutile e dispendioso, ma noi non ci occuperemo di quest'ultimo caso.

Sui dati...

Definito il problema si potrebbe essere tentati dal passare alla scrittura del programma (codice) che ci aiuterà a risolverlo (parliamo sempre di raccogliere immagini, foto o disegni di pere e mele e di classificarle). Ma non è così, prima di tutto occorre pensare ai dati. Occorre cercare di capire con che tipo di dati abbiamo a che fare (strutturati o non strutturati) e come dobbiamo catalogarli: dobbiamo dividere le mele e le pere oppure occorre fare qualcosa di più complesso magari distinguendo tra frutti di diverso colore? L'analisi sui dati è molto importante e sarà utile in diverse fasi del nostro progetto, in particolare nella fase di addestramento della nostra AI, in pratica quando le viene insegnato a svolgere il compito per cui è stata creata.

Come ho detto prima i dati si possono dividere in due macro categorie: strutturati o non strutturati.

I dati strutturati sono conformi ad un modello, hanno una struttura ben definita, sono ordinati ed è possibile accedervi facilmente per impiegarli (sia da una persona, sia da un programma). Normalmente si conservano all'interno di database. Se consideriamo l'esempio delle mele e pere precedentemente introdotto, possiamo associare ai due frutti delle caratteristiche loro proprie (colore, dimensione, forma...) che serviranno per distinguerle e saranno utilizzati per addestrare l'algoritmo. 

I dati non strutturati sono invece video, foto, audio... molto più difficili da trattare.

L'algoritmo

Dopo aver riflettuto sulla tipologia di dati con cui avremo a che fare, possiamo iniziare a pensare all'algoritmo più idoneo alla risoluzione del problema, algoritmo che diventerà il cuore della nostra AI. 

Possiamo dividere gli algoritmi in due categorie chiamate "supervised learning" e "unsupervised learning". 

Alla prima categoria (supervised learning) appartengono degli algoritmi che richiedono l'intervento umano, principalmente per classificare manualmente i dati che verranno poi impiegati per addestrare l'algoritmo. Se il nostro problema consistesse nel verificare le email in arrivo e selezionare quelle di spam, da mandare su una apposita cartella, probabilmente useremo un algoritmo di questa categoria utilizzando come esempi un numero molto elevato di messaggi che gli utilizzatori hanno classificato come legittimi o spam. Tra queste tecniche possiamo annoverare le neural networks, naive Bayes, linear regression, logistic regression, support vector machine (SVM), k-nearest neighbor, random forest.

Alla seconda categoria (unsupervised learning) appartengono algoritmi che non necessitano dell'intervento umano per classificare i dati e vi appartengono tre sottocategorie: clustering, association e dimensionality reduction. Sempre a titolo di esempio, se il nostro problema consiste nell'identificare attività potenzialmente malevole in una rete aziendale, probabilmente utilizzeremo un algoritmo di clustering per individuare l'insieme delle attività che appaiono molto diverse da quelle usuali. 

Addestrare l'AI

La fase successiva consiste nell'addestrare l'algoritmo a svolgere il compito. Per tornare al semplice esempio iniziale della suddivisione di immagini di pere e mele occorrerà addestrare il nostro algoritmo a riconoscere i due frutti con una certa accuratezza. L'accuratezza dipende da noi, è una cosa che dobbiamo decidere in base ai nostri obiettivi di business. Potremmo decidere che ci interessa una accuratezza dell'80%, il che significa che il nostro algoritmo dovrà essere in grado di riconoscere una pera o una mela da immagini di frutta 80 volte su cento. questo significa che possiamo gestire l'errore dell'algoritmo attraverso un'altra metodologia (per esempio mettendo una persona a controllare le immagini selezionate) oppure che l'errore non causa danni al nostro business o ancora che il danno causato è inferiore alla spesa che dovremmo sostenere per migliorare il processo di selezione.

Se però nella fase di addestramento non si riesce a raggiungere l'accuratezza richiesta potrebbe essere necessario fare un passo indietro e scegliere un diverso tipo di algoritmo. Ma prima di cambiare algoritmo è meglio verificarne la configurazione (attraverso i parametri di configurazione) e se il dataset selezionato per eseguire l'addestramento è corretto. Per tornare al solito esempio di selezione di mele e pere, se tra le immagini usate per l'addestramento abbiamo per errore utilizzato solo immagini di pere e mele di colore rosso potrebbe darsi che l'AI non riconosca pere e mele di altri colori non riuscendo perciò a raggiungere l'accuratezza richiesta. In questo caso sarà sufficiente modificare il dataset per comprendere frutti di vari colori, fino a raggiungere l'accuratezza richiesta.

Linguaggio di programmazione e piattaforma

Il passo successivo consiste nella scelta del linguaggio di programmazione da utilizzare. La scelta dipende dalle nostre conoscenze di programmazione.

I linguaggi che possono essere utilizzati sono tanti ma i più comuni sono Python e R in quanto possiedono già molte librerie già pronte all'uso che semplificano la scrittura del codice. Infine è necessario scegliere la piattaforma che ci consentirà di costruire la nostra AI. Esistono varie piattaforme che aiutano nella realizzazione del nostro progetto, tra queste per esempio TensorFlow è una piattaforma open source che permette di fare delle prove senza spendere niente, oppure Numpy, Keras, Pandas, scikit-learn, Matplotlib, Seaborn e cosi via, il panorama è veramente ampio.

Non resta che provare...

A proposito, dimenticavo di dire che la nostra AI si alimenta continuamente dei dati che riceve. Ne tiene traccia e li utilizza. Così è possibile insegnarle a fare previsioni, magari sulla qualità e tipo di mele che troveremo al mercato nei mesi prossimi. Ma questo è un altro problema!

Alessandro Rugolo

(Ringrazio tutti gli amici di SICYNT che mi hanno consigliato ed aiutato a migliorare l'articolo)

Per approfondire:

La nuova rivoluzione digitale, il deep learning - Difesa Online

Step-by-Step Methods To Build Your Own AI System Today | upGrad blog

What is Structured Data? - GeeksforGeeks

What is Supervised Learning? | IBM

Types of Artificial Intelligence Algorithms You Should Know [A Complete Guide] | upGrad blog

Unsupervised Learning for Cyber (hmgstrategy.com)