Introduzione a ML.Net machine learning in .Net 6

Articolo che spiega le informazioni di base per la realizzazione di un semplice programma di machine learning con .Net 6.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come utilizzare la tecnologia .Net 6 e l’intelligenza artificiale tramite il Machine Learing di Microsoft  e la tecnologia ML.Net.
Da qualche anno, Microsoft ha rilasciato per l’ambiente di sviluppo Visual Studio, la possibilità di creare applicazioni di apprendimento automatico, che fornendo alcune informazioni di base, il computer automaticamente riconosce e fornisce risposte ai dati che vengono forniti.
Un possibile  esempio può essere quello di riconoscere da una foglia a quale albero appartiene, ed altri scenari del mondo reale.
L’articolo si baserà sull’ultima versione del Framework, ossia la 6, tramite la creazione di un progetto Console Application, ma la tecnologia ML.Net si può applicare anche in altri ambiti, come per esempio la tecnologia Asp.Net.
L’ambiente di sviluppo utilizzato sarà Visual Studio 2022 Community.
Lo scenario che andremo ad analizzare, sarà quello che fornita una determinata frase, ci dirà se la persona è felice oppure triste.
Digitando una determinata frase, il computer ci dirà se siamo felici oppure tristi. Il tutto come mostrato in figura 1.
Un modo semplice per avvicinarsi alla intelligenza artificiale, in particolar modo alla Machine Learning, anche se gli scenari spesso sono molto più complessi.
 

Output console Machine Learning

Figura 1 – il risultato finale del nostro progetto

Preparazione ambiente

Prima di tutto dobbiamo verificare se nel nostro ambiente di sviluppo, in particolar modo Visual Studio 2022 Community o versione successive è installato ML.Net per verificare ciò, dobbiamo fare click sul programma “Visual Studio Installer”, il quale ci fornirà i componenti installati.
Facciamo click sul pulsante “Modifica” della finestra che viene aperta vediamo se nella categoria “Singoli Componenti” (figura 2) è installato il componente ML.Net Model Builder. Possiamo vedere anche nella categoria “Sviluppo per desktop .Net” se c’è la voce spuntata su ML.Net Model Builder.

Installazione componente Visual Studio

Figura 2 – Il componente ML.Net installato


Nel caso che non è spuntato, occorre spuntarlo e poi installarlo.
In questo modo possiamo iniziare a sviluppare la nostra applicazione.
Una volta installato il tutto chiudiamo la finestra e scriviamo un file di testo per le informazioni su cui il computer dovrà estrapolare i risultati.

Creazione del modello dati

Al nostro sistema, che dovrà fornire i risultati, dobbiamo indicare un documento di testo (un file .txt) con il quale potrà elaborare le informazioni in input e restituire il risultato sulla base delle informazioni ricevute.
In particolare, dovrà restituirci se una persona è felice o triste, in base ad una frase digitata su un progetto di tipo Console application, queste informazioni saranno elaborate dal ML.Net in base al file di testo che andremo a realizzare e con il quale ci sono gli elementi per restituire il risultato atteso.
Digitando una frase l’applicativo ci fornirà un risultato per dire se siamo felici oppure tristi.
Con un qualsiasi programma di editor di testo, scriviamo il file di tipo “.txt” con le informazioni che serviranno al sistema.

Il file sarà composto a livello logico per l'applicativo di due colonne. 
Ogni frase termina con un punto e subito dopo tramite il tasto tabulazione mettiamo un valore che sia 1 o 0
Per esempio la frase “Sono felice.” avrà una tabulazione e poi il valore 1, in questo modo il framework ML.Net lo considererà come due colonne.
Qui di seguito le frasi da copiare nel programma per l’elaborazione di testo, va bene anche “Notepad”.

Sono felice. 1
che bello stare con te. 1
Non voglio mangiare la carne. 0
Odio fare i compiti. 0
Mi piace innaffiare i fiori. 1
Sono contento di andare al parco. 1
Quanto mi manchi. 0
Sono triste. 0
Non ho fame. 0
La pioggia mi mette tristezza. 0
Quando vedo il sole sono felice. 1
Che gioia vederti. 1
mi piace iprogrammatori. 1

Salviamo il file con il nome “Dati.txt”.

Creazione del progetto e modellazione dati

Si crea un nuovo progetto di tipo “App Console” , questo tipo di progetti, possono essere eseguiti anche su sistemi Linux.
Dopo aver selezionato tale modello, fare click sul pulsante “Avanti” , assegnare un nome, per esempio “ConsoleML”, e fare click sul pulsante “Avanti” , selezionare come versione del Framework 6.0 (supporto a lungo termine), a questo punto fare click su “Crea”.
In esplora soluzioni, facciamo click con il tasto destro sul nome del progetto, nel menu che viene aperto, selezioniamo la voce “Aggiungi” e poi il sottomenu “Michine Learning Model…” il tutto come mostrato in figura 3.

Machine Learning Model

Figura 3 – Il menu per la creazione guidata del modello di ML.Net


Nella finestra che viene aperta (figura 4) selezioniamo la voce “Machine Learning Model (ML.Net ).

Progetto Machine Learning Model

Figura 4 – Machine Learning Model (ML.Net)

Impostiamo un nome, o lasciamo quello che viene impostato di default “MLModel1.mbconfig” e facciamo click sul pulsante “Aggiungi” in modo che viene aggiunto al progetto.

Dopo aver fatto click sul pulsante “Aggiungi” verrà aperta una schermata, con il quale è possibile selezionare lo scenario, ossia il modello della gestione delle azioni che l’automazione dovrà prendere in considerazione in base ad un determinato evento.
Lo scenario (figura 5) fornisce vari modelli di gestione dei dati, ognuno con uno specifico compito. Nel nostro caso facciamo click su quello relativo alla voce “Data Classification”, il primo in alto a sinistra (figura 5).

Scenari di Machine Learning

Figura 5 – I vari scenari

La finestra successiva (figura 6) ci chiede in che modalità eseguire il training, ossia l’elaborazione dei dati, se locale o tramite Azure. Nel nostro caso selezioniamo “Locale (CPU)” (figura 6).

Ambiente di Training Machine Learning
Figura 6 – la Modalità di elaborazione del training


A questo punto facciamo click sul pulsante “Passaggio Successivo” e nella schermata successiva, viene indicato il file di testo che abbiamo creato in precedenza.
Questa schermata è molto importante, perché permette di gestire ed elaborare le informazioni che il motore di analisi ML.Net dovrà eseguire per ogni richiesta.
Il primo campo, quello riguardante “Input” dobbiamo selezionare l’opzione “File (.csv, .tsv, .txt) “ , in quanto le informazioni sono presenti nel file di testo che abbiamo creato in precedenza, mentre nella casella di testo situata in basso, va indicato il percorso e nome del file, che avviene selezionandola tramite il pulsante “Sfoglia…”. Una volta selezionato il file, dobbiamo impostare il campo relativo a "Colonna da prevedere (etichetta)". Questa informazione riguarda il risultato che ci deve restituire in base a quanto indichiamo. Per ogni valore presente nella prima colonna, ossia dove c’è il testo, il calcolatore ML.Net ci restituirà 1 oppure 0 in base ai dati. Nella casella a discesa dobbiamo selezionare la voce Col1, in quanto le colonne partono da 0.
A questo punto, come mostrato in figura 7, verrà visualizzata una parte di anteprima dei dati e della seconda colonna.

Origine dei dati per il modello

Figura 7 – La scelta del file dei dati e della colonna di restituzione valore


Terminata questa fase, facciamo click sul pulsante “Passaggio successivo” , in questo modo viene visualizzata la schermata relativa al training, ossia la fase in cui viene elaborato il file dal modello indicato, permette di gestire un proprio concetto di dati. Per effettuare un’accurata analisi, impostiamo il valore 60 nella casella riguardante la voce “Tempo di training (secondi)”
Tempo di Training per il modello dati

Figura 8 – La pagina relativa al training


Dopo aver impostato come valore 60, facciamo click sul pulsante “Avvia il training”, ed attendiamo che completi l’esecuzione dell’elaborazione dei dati.
Al termine dell’elaborazione, verrà abilitato il pulsante “Passaggio Successivo” ma ci fornirà informazioni sull’elaborazione dei dati in particolare dobbiamo fare attenzione al valore della riga “Accuratezza migliore” , se non soddisfa le nostre aspettative (se per esempio è al 30%) possiamo ripetere l’elaborazione, facendo click sul pulsante “Avvia il Training”.
Il risultato del termine del training è come in figura 9.

Risultati training del modello dati

Figura 9 – L’elaborazione del training


Facciamo click sul pulsante “Passaggio Successivo”, in modo che si apre la schermata successiva.
La maschera “Valuta” fornisce la possibilità al programmatore di verificare tramite un esempio se l’analisi del calcolatore è corretta, e quindi verificare se il risultato finale è attendibile, ossia come ci si aspetta.
Facciamo click sul pulsante “Previsione” (figura 10) e se il risultato è corretto, andiamo alla maschera successiva.

Calcolo dei risultati per il modello di training

Figura 10 – La schermata per la verifica del modello


Facciamo click sul pulsante “Passaggio Successivo” in modo che passiamo all’ultima schermata.
In questa ultima schermata, viene proposto un frammento di codice (figura 11) da utilizzare nel nostro applicativo per la gestione del modello.

Codice per consumare il modello dati

Figura 11 – Il frammento di codice di esempio generato.


Facciamo click sul pulsante “Passaggio successivo” che ci fornisce dei collegamenti ad ulteriori guide online.

Model builder di Visual Studio

Figura 12 – Le guide online.

Stesura del codice

Facciamo doppio click sul file “Program” in modo che passiamo in visualizzazione codice della classe che viene eseguita appena si esegue l’applicazione.
Se abbiamo copiato il codice che ci ha proposto in precedenza la composizione guidata, possiamo utilizzarla, altrimenti scriviamo il codice.
In alto sopra ad ogni dichiarazione, dobbiamo aggiungere lo spazio dei nomi del progetto, in questo modo le classi generate per la gestione del modello saranno visibili.
In alto scriviamo la seguente dichiarazione di spazio dei nomi.

C#
using ConsoleML;

Naturalmente se il nome del progetto è diverso, bisogna cambiarlo da quello proposto nel precedente frammento di codice.

Subito sotto, scriviamo le istruzioni per leggere da output, ossia da utente, una frase e sul modello generato verificare se è un sentimento felice oppure no.
Di seguito le istruzioni delle suddette operazioni.

C#
var datoDaElaborare = new MLModel1.ModelInput()
{
Col0 = Console.ReadLine(),
};
var result = MLModel1.Predict(datoDaElaborare);
string sentimento = result.Prediction == 1 ? "Contento" : "Triste";
Console.WriteLine($"Testo: {datoDaElaborare.Col0}\nSentimento: {sentimento}");

Ora non resta che eseguire il nostro applicativo ed inserire una frase anche simile a quelle proposte del modello. Dalla proprietà prediction, restituiamo il valore “Contento” oppure “Triste”, il risultato sarà come nella figura seguente.


Output elaborato Machine Learning

Conclusioni

L’articolo ha fornito al lettore la conoscenza base della programmazione .Net in ambito di Machine Learning, l’auto apprendimento, che è una branca dell’intelligenza artificiale.
Le potenzialità offerte dal sistema ML.Net, che negli ultimi anni è stato aggiornato in maniera frequente, mette a disposizione dello sviluppatore uno strumento molto valido e di semplice utilizzo per la creazione di applicazioni di intelligenza artificiale, anche di una certa complessità.
L’intelligenza artificiale, come la sanità digitale e l’internet delle cose, sono le tecnologie al quale bisogna puntare visto il crescente e costante utilizzo e nuovi scenari che si stanno formando in tempi molto brevi.