Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_introduzione-a-mlnet-machine-learning-i_1776.aspx
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.
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.
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.
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 ).
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).
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).
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.
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)”
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.
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.
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.
Figura 11 – Il frammento di codice di esempio generato.
Facciamo click sul pulsante “Passaggio successivo” che ci fornisce dei collegamenti ad ulteriori guide online.
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.
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.