În mod clar, trăim în era AI, fie că interacționăm cu boți inteligenți din ce în ce mai prezenți în interacțiunile noastre zilnice, fie că suntem consumatori de conținut generat de AI, sub formă de text, imagini sau chiar video-uri. În acest articol, vom discuta despre ML.net și despre rolul și modul de utilizare al acestuia în marele ecosistem .NET.
AI (Inteligența Artificială) este domeniul care își propune să facă mașini capabile de acte inteligente precum învățarea, înțelegerea limbajului, raționamentul, rezolvarea de probleme și percepția.
De exemplu, să analizăm următorul paragraf care descrie rolul Generative AI și care, nu în mod surprinzător, a fost generat de AI Copilot de la Microsoft:
"Generative AI este un tip de inteligență artificială ce poate crea conținut nou precum text, imagine, video și audio pe baza unor date de antrenament. Folosește modele sofisticate de machine learning, precum algoritmi deep learning pentru a înțelege tiparele din datele de intrare și pentru a genera conținut nou, similar, drept răspuns la prompturi. Exemplele includ modele AI precum ChatGPT pentru generarea de text și DALL-E pentru crearea de imagini."
Deci, AI poate avea un efect semnificativ asupra vieților noastre, îmbunătățind sau simplificând anumite aspecte. Totuși, pe măsură ce, din ce în ce mai mulți furnizori de servicii integrează capabilitățile puternice ale AI, interacțiunea noastră cu AI crește și ea, din moment ce procesele de optimizare sunt acaparate de prietenul nostru iubitor de bytes.
Modelele mari de inteligență artificială create de AI ce au acces la datele publice sunt grozave și extrem de utile, dar, evident, există anumite preocupări legate de securitate și de caracterul privat al datelor, în perspectiva în care este tot mai frecventă utilizarea datelor fără autorizație și breșele.
Am văzut ce este un AI, pe scurt. Să ne îndreptăm atenția și spre machine learning. Machine learning (sau ML) este un sub-domeniu AI care pune accent pe algoritmi care permit unui computer să învețe și să facă predicții (sau să ia decizii) pe baza datelor furnizate. Scopul este ca sistemul să învețe fără instrucțiuni directe, identificând tiparele din date. Similar modului în care învață oamenii, pentru a face un ML de acuratețe ridicată, avem nevoie de foarte multe date și de multă experiență pe care o obținem prin antrenament.
Deci, veți întreba, unde apare ML.net în peisaj? Ei bine, ML.net este un framework open source, multiplatformă de machine learning construit pentru programatori, creat de Microsoft, așa cum se vede în figura 1. Folosind C# sau F#, putem crea modele ML personalizate direct în ecosistemul .NET. Astfel, ML.NET permite unui programator .NET să își folosească toate abilitățile dobândite anterior pentru a integra rapid capabilitățile machine learning în mai multe tipuri de aplicații: desktop, mobile, web, jocuri sau chiar IoT. Când ne referim la aplicații, vorbim de aplicații gata de a fi lansate în producție, din moment ce, după ce modelul ML.net este antrenat și pregătit, acesta poate fi lansat și folosit direct din aplicația .NET.
Fig 1: ML.net și ecosistemul .Net AI
Există patru etape mari pentru a putea folosi ML: selectarea datelor și a scenariilor, pre-procesarea datelor, antrenamentul, iar în final, lansarea modelului.
În cadrul etapei de selectare a datelor și a scenariilor, alegem cu precădere scenariul țintă pentru ML. Avem nevoie, în prealabil, de date adnotate, din moment ce atât datele, cât și scenariul ar trebui să fie cei mai buni prieteni. Cu cât există mai multe date disponibile, cu atât mai bine.
În cadrul etapei de pre-procesare, se curăță datele și se extrag caracteristicile datelor. Acesta poate fi un proces intensiv ce presupune multe calcule și multă logică complexă de pre-procesare, în funcție de scenariul ales.
În cadrul etapei de antrenament, este nevoie de mult timp sau de o putere de procesare mare pentru ca modelul să fie antrenat pe baza datelor de intrare. Cu alte cuvinte, este o etapă intens consumatoare de timp și de resurse computaționale. În unele cazuri, dacă modelul de performanță obținut nu este suficient sau dacă apar noi date, se efectuează un reantrenament pentru a asigura cel mai bun nivel de acuratețe pentru modelul obținut.
Finalmente, modelul poate fi implementat în aplicația țintă, iar funcționalitatea testată. Dacă modelul a atins acuratețea dorită, iar testarea se finalizează cu succes, modelul poate fi folosit în mediile superioare.
Pentru a simplifica lucrurile, ML.net oferă pachetul AutoML & Model Builder. Model Builder este un instrument similar unui wizard, cu suport CLI care face ca lucrul cu ML să fie ușor și rapid. Model Builder este reprezentat în figura 2.
Folosit împreună cu AutoML, acest instrument automatizează procesul de construire a celor mai performante modele pentru scenariul ML ales și permite programatorilor să scrie volume mici de cod. AutoML este, de fapt, un pachet NuGet "Microsoft.ML.AutoML" care localizează automat cele mai bune trăsături din model și cei mai buni hiperparametri pentru scenariul în cauză și pentru setul de date.
Așa cum s-a menționat, este simplu. Încărcați datele, iar AutoML & Model Builder se ocupă de restul. Există trei categorii mari de scenarii pentru care oferă suport AutoML:
Date tabulare,
Detecția vizuală asistată de calculator,
Categoria datelor tabulare gestionează numere, texte, valori categoriale și valori de tip dată, acoperind scenariile următoare:
Clasificarea datelor:
Datele tabulare pot fi clasificate în două sau mai multe categorii.
Predicția de valori:
Recomandări:
Previziuni:
Detecția vizuală bazată pe calculator folosește deep learning pentru a gestiona doar date de tip imagine, acoperind următoarele scenarii:
Clasificarea imaginilor:
Detecția de obiecte:
Categoria destinată procesării limbajului natural folosește deep learning pentru a gestiona doar date de tip text, acoperind următoarele scenarii:
Clasificare textelor:
Similaritatea propozițiilor:
Răspuns la întrebări:
Recunoașterea entităților numite:
Pentru fiecare din aceste scenarii, când antrenăm un model de date, AutoML va încerca algoritmi și parametri diferiți, pe măsură ce iterează algoritmii ML împerecheați cu trăsătura corespondentă selectată. După acest proces, fiecare iterație generează un model care are un scor de antrenament atașat. Cu cât scorul este mai bun, cu atât este mai potrivit modelul pentru datele de intrare oferite.
Fiecare scenariu se mapează pe o sarcină de lucru diferită, de machine learning. Iată câteva exemple: clasificare binară, clasificare multi-clasă, regresie, clustering, detecția anomaliilor, ierarhizare, recomandări, predicții, clasificarea imaginilor & detecția obiectelor.
Clasificarea binară prezice care este clasa sau categoria căreia îi aparține o instanță de date, atunci când avem de ales între două clase. Poate fi folosită pentru a detecta sentimentul dominant al comentariilor de pe Twitter, cu valori precum "pozitiv" sau "negativ". Este utilă pentru diagnosticul unui pacient dacă dorim să determinăm dacă are o boală sau nu. Putem chiar decide dacă un email este "spam" sau nu.
Clasificarea multi-clasă prezice clasa sau categoria unei instanțe de date. Poate fi folosită pentru a cataloga zborurile în termeni precum: "devreme", "la timp", or "întârziat", pentru a cataloga recenziile de film în termeni precum: "pozitiv", "neutru" sau "negativ" sau chiar pentru a cataloga recenziile unui hotel după criterii precum "locație", "preț", "curățenie". Figura 3 arată scenariul de clasificare a datelor, așa cum este acesta disponibil din wizardul ml.net.
Fig 3: Scenariul de clasificare de date
Regresia prezice valoarea unei etichete dintr-un set de trăsături asociate. Se poate folosi pentru prezicerea prețului caselor, pe baza unor trăsături ale caselor, precum numărul de dormitoare, locație sau dimensiune. Poate prezice viitorul preț al acțiunilor pe baza datelor istorice și a tendințelor actuale din piață. Poate prezice vânzările unui produs pe baza bugetului de reclame. Figura 4 arată scenariul de prezicere de valori.
Fig. 4: Scenariul de prezicere de valori
Clusteringul grupează instanțele de date în clustere ce conțin caracteristici similare. Se poate folosi pentru înțelegerea segmentelor de invitați dintr-un hotel pe baza obiceiurilor invitaților și pe baza caracteristicilor hotelurilor. Se poate folosi pentru implementarea de campanii de publicitate țintite, prin identificarea segmentelor de clienți și a datelor demografice. Suplimentar, se poate folosi pentru clasificarea inventarelor pe baza metricilor din manufactură.
Predicțiile, așa cum se pot observa în figura 5, se folosesc de serii de date din trecut pentru a anticipa comportamentul viitor. Se pot folosi pentru predicția vremii, pentru predicția vânzărilor sezoniere și pentru mentenanță predictivă.
Fig. 5: Scenariul de predicții
Clasificarea imaginilor prezice clasa sau categoria unei imagini. Se poate folosi pentru determinarea rasei de câine: "Siberian Husky", "Golden Retriever", pentru determinarea unui defect de manufactură al unui produs și pentru determinarea speciei de flori: "Trandafir", "Floarea Soarelui", așa cum se observă în figura 6.
Fig. 6: Scenariul de clasificare de imagini
Detecția obiectelor prezice clasa sau categoria unei imagini, oferind și o delimitare grafică a locului unde se află acea categorie în imagine. Poate detecta chiar și obiecte multiple într-o imagine. Se poate folosi pentru detectarea mașinilor, a semnelor sau a pietonilor (din imagini), pentru detectarea defectelor unor produse (din imagini) sau pentru detectarea anomaliilor din imagini cu raze X. Scenariul de detecție a obiectelor se poate observa în figura 7.
Fig. 7: Scenariul de detecție a obiectelor
Cum am văzut anterior, ML.net poate fi folosit în scenarii multiple, unde trebuie să adăugăm capabilități inteligente unei aplicații existente sau noi. Fiind multiplatformă și open-source, se poate integra cu orice aplicație .NET.
Scenariile se bazează pe cerințe comune și pot fi extinse pentru sarcini de lucru similare. Modelul ML poate fi antrenat local și, chiar și în Azure pentru unele scenarii, dar cel mai important aspect este că acesta este autonom.
După ce modelul ML generează teste complete, acesta poate fi încorporat chiar și într-o aplicație offline, necesitând nicio altă componentă adițională, nicio conexiune externă la servicii sau Internet pe care să le utilizeze în cadrul rulării. Oricare ar fi locația în care rulează aplicația de bază, componenta machine learning va putea rula lângă aceasta. Modelele pot fi folosite oriunde: local, pe dispozitive, în cloud, toate acestea fără a abandona ecosistemul .NET. Ce înseamnă acest lucru? Înseamnă că ML.net poate fi folosit pentru aspecte critice de securitate sau când nu vrem costuri adiționale asociate cu funcționalitatea AI.
Din moment ce atât aplicația, cât și componenta ML rulează ca parte a aceleiași aplicații, constatăm un câștig la nivel de performanță prin eliminare altor apeluri în rețea, ceea ce elimină latența. Pentru aplicații ASP.net existente sau pentru componente API, putem chiar rula modelul folosind o resursă PredictionEnginePool.
ML.net este complet adaptat lansării în producție, putând fi folosit cu orice alt produs .NET. Este o tehnologie matură lansată inițial în 2019, după ce a fost dezvoltată inițial de Microsoft. Companiile folosesc ML.net pentru aplicații diverse, iar Power BI utilizează ML.net pentru a identifica factori cheie de influență și segmente de clienți, în timp ce Microsoft Defender ATP folosește ML.net pentru a crea modele machine learning cu rol în protecția malware. SigParser convertește semnăturile email în contracte și prezice dacă o entitate ce trimite email este umană sau automată. Asgard Systems folosește ML.net pentru a prezice modul în care magazinele pot reduce risipa alimentară și emisiile cu efect de seră. Hunter Medical Research Institute (HMRI) a realizat un framework de tip Human-In-The-Loop ML pentru cercetarea medicală, în timp ce Williams Mullen folosește ML.net pentru clasificarea documentelor, permițând avocaților să se axeze pe clienți în loc să caute prin documente.
Dacă sunteți programatori experimentați în știința datelor, puteți personaliza pipeline-ul de antrenament, iar apoi puteți ajusta parametrii ML în continuare. ML.net se poate integra chiar și cu modelele Open Neural Network Exchange (ONNX), ceea ce presupune că ML.net poate fi folosit cu un model dezvoltat în TensorFlow (de exemplu) ce poate fi apoi exportat.
Putem observa că ML.net este un candidat grozav pentru a adăuga capabilități ML aplicațiilor noastre .NET existente sau noi. Pe lângă suportul pentru scenariile existente, pe măsură ce noi funcționalități sunt adăugate cu fiecare nouă versiune .NET, beneficiază de sprijinul bine cunoscut al comunității și al Microsoft.
Este un produs stabil și matur care poate dezvolta, testa și lansa rapid un model ML direct în aplicația voastră .NET și, mai important, într-un mod multiplatformă.
https://dotnet.microsoft.com/en-us/apps/machinelearning-ai/ml-dotnet
https://dotnet.microsoft.com/en-us/apps/machinelearning-ai/ml-dotnet/model-builder
https://learn.microsoft.com/en-us/dotnet/machine-learning/automated-machine-learning-mlnet
Generative AI în Programare
Miercuri, 26 Martie, ora 18:00
sediul Betfair Romania Development
Facebook Meetup StreamEvent YouTubede Ovidiu Mățan
de Ioana Barboș