Cum de a instrui un model ML Core pentru o aplicație iOS

Ce veți crea

Core ML îi ușurează pe dezvoltatorii de iOS să adauge învățarea mașinilor adânci la aplicațiile lor. În acest post, vă voi arăta cum puteți pregăti un model Core ML pentru a obține informații inteligente.

Învățarea cu mașini a fost, fără îndoială, una dintre cele mai fierbinți teme din ultimul an, companiile de toate felurile încercând să-și facă produsele mai inteligente pentru a îmbunătăți experiențele utilizatorilor și pentru a-și diferenția ofertele. Google a investit între 20 de miliarde și 30 de miliarde de dolari în inteligență artificială doar anul trecut, conform studiului McKinsey's State of Machine Learning and AI, 2017. 

AI se transformă într-o cursă pentru brevete și proprietate intelectuală (IP) printre companiile de top din lume ... Raportul citează multe exemple de dezvoltare internă, inclusiv investițiile Amazon în robotică și recunoașterea vorbirii, și Salesforce pe agenți virtuali și învățare automată. BMW, Tesla și Toyota produc producătorii auto în investițiile lor în robotică și învățare automată pentru a fi utilizate în mașini fără șofer. Toyota intenționează să investească $ 1B în crearea unui nou institut de cercetare dedicat AI pentru robotică și vehicule fără șofer. (Sursa: Forbes)

Apple nu face excepție de la această tendință, având în vedere utilizarea mașinilor în propriile aplicații. De exemplu, aplicația Photos pentru iOS poate recunoaște fețe, obiecte și repere, iar Siri deduce intenția și semnificația de la vorbire. Mesajele pentru iOS sugerează inteligent și prezică cuvinte bazate pe comportamentul utilizatorilor anteriori. 

În acest tutorial, veți învăța despre modul de aplicare a algoritmilor de învățare a mașinilor la un set de date de antrenament, pentru a crea un model instruit care va face ulterior predicții bazate pe date noi. Toate datorită noului cadru Core ML al Apple. 

Obiectivele acestui tutorial

Acest tutorial vă va prezenta o submulțime de învățare automată. Veți instrui și veți integra un model de învățare în mașină într-o aplicație simplă pentru iOS, utilizând un cadru de algoritm de învățare popular. În acest tutorial, veți:

  • aflați câteva din conceptele de bază ale învățării mașinilor 
  • instruiți modelul utilizând date de probă
  • integrați modelul instruit într-o aplicație iOS

După ce a trecut prin teoria NLP, vom pune cunoștințele în practică, lucrăm printr-un simplu client Twitter, analizând mesajele tweet. Continuați și clonați replica GitHub a tutorialului și aruncați o privire la versiunea finală a aplicației pe care o vom crea de la zero. 

Cunoașterea presupusă

Acest tutorial presupune că sunteți un dezvoltator iOS experimentat, dar, deși veți lucra cu învățarea în mașină, nu trebuie să aveți niciun fel de informație despre subiect. Veți folosi un pic de Python pentru a vă crea modelul instruit, dar puteți urma exemplul tutorial fără cunoștințe anterioare despre Python. 

Învățarea în mașină 101

Scopul învățării mecanice este ca un computer să facă sarcini fără a fi programat în mod explicit să facă acest lucru - abilitatea de a gândi sau interpreta în mod autonom. Un caz de folosință contemporană de înaltă performanță este autovehiculul autonom: oferind mașinilor posibilitatea de a interpreta vizual mediul înconjurător și de a conduce vehicule fără ajutor. 

Învățarea în mașină este utilizată astăzi de companiile mari pentru a lua decizii de afaceri mai bune pe baza datelor istorice, prin utilizarea algoritmilor de învățare profundă pentru a identifica modele și corelații, care le permit să facă previziuni mai bune ale viitorului. De exemplu, puteți rezolva probleme cum ar fi "Cât de probabil este ca un anumit client să cumpere un anumit produs sau serviciu?", Cu o mai mare încredere pe baza comportamentului anterior. 

Învățarea în mașină se aplică cel mai bine problemelor în care aveți un istoric de răspunsuri, după cum veți descoperi mai târziu în acest tutorial atunci când vom trece prin probele noastre. Un exemplu de învățare în mașină în acțiune ar fi filtrul dvs. de e-mail prin e-mail, care utilizează învățarea supravegheată (pe măsură ce marcați articolele ca spam sau nu) pentru a filtra mai bine spamul în timp. Modelul de învățare a mașinilor codifică toate aceste cunoștințe despre rezultatele anterioare și îl pune la dispoziția algoritmului pentru o utilizare eficientă la timpul de execuție.

S-ar putea să fie un pic copleșitor la început, dar nu este complicat și vă voi îndruma cum să creați în curând un model instruit. Odată ce ați conceput un model instruit printr-un algoritm, îl veți converti apoi într-un model care poate fi consumat de iOS, datorită programului Core ML.

Core ML este nou pentru familia de SDK-uri Apple, introdusă ca parte a iOS 11 pentru a permite dezvoltatorilor să implementeze o mare varietate de moduri de învățare a mașinilor și tipuri de straturi de învățare profundă. 

Procesul de prelucrare a limbajului natural (NLP) se află în mod logic în cadrul Core ML, alături de alte două biblioteci puternice, Vision și GameplayKit. Vision oferă dezvoltatorilor abilitatea de a implementa învățarea mașinilor de vizionare a computerului pentru a realiza lucruri cum ar fi detectarea fețelor, reperelor sau a altor obiecte, în timp ce GameplayKit oferă dezvoltatorilor de jocuri instrumente pentru crearea de jocuri și caracteristici specifice de joc. 

Beneficiul Core ML comparativ cu alte soluții este că Apple a optimizat învățarea mașinilor pentru a funcționa pe un dispozitiv, ceea ce înseamnă un consum redus de memorie și o latență redusă. Acest lucru, de asemenea, containerizează informații despre utilizatori în cadrul dispozitivului, îmbunătățind confidențialitatea.

Cu o imagine de ansamblu a învățării mașinilor și a modelelor din cale, să punem teoria în practică prin crearea primului dvs. model de formare. 

Formarea modelului dvs.

Pentru ca un model să fie util, trebuie să fie instruit să recunoască datele ca informații pe care le poate utiliza ulterior pentru a afirma predicții cu un algoritm adecvat. Core ML suportă în prezent următoarele tipuri de modele:

Pe lângă desemnarea unui algoritm, cu cât mai multe date aveți, cu atât mai bine va fi modelat modelul dvs. și cu cât vor fi mai precise predicțiile. Înainte de a începe să ne creăm modelul Core ML, să aruncăm o privire la aplicația de exemplu cu care vom lucra și, în special, la exemplele de date. 

Exemplu de aplicație: Las Vegas Hotel Score Predictor

Pentru acest tutorial, vom folosi un set de date cu sursă deschisă despre recenziile hotelului din Las Vegas Strip, pe care le-am obținut de la UCI pentru a ilustra modul de formare a unui model și de a calcula corelațiile. Puteți să aruncați o privire asupra fișierului CSV complet delimitat prin virgulă pe care îl vom folosi în aplicația noastră. Structura datelor este următoarea:

Nr. recenzii, Nr. hoteluri in apropiere de munte: Circus Circus Hotel & Casino, Las Vegas Hotel aproape de: Circus Circus Hotel & Casino (Las Vegas, Statele Unite). 

Vom fi interesați de prezicerea evaluărilor de stele ale hotelurilor pentru hoteluri pe baza corelării numărului de recenzii de hotel și a recenziilor generale pentru fiecare hotel specific, care este un exemplu destul de controversat, dar suficient de simplu pentru a ilustra conceptul de formare a unui model cu date clare. 

Descărcați fișierul CSV delimitat prin virgulă într-un folder nou pe care îl veți folosi pentru acest exercițiu. Acum să mergem mai departe și să ne mâncăm mâinile cu niște Python, cu scopul de a realiza următoarele: 

  • importând bibliotecile necesare, inclusiv bibliotecile Python Core ML
  • importând datele de probă
  • aplicând un algoritm de regresie liniară la datele noastre, folosind o bibliotecă numită SciKit
  • identificarea coloanelor din datele care ne interesează în modelarea (Nr. comentarii, Nr. Comentarii clienți, Hotel stele)
  • identificarea coloanei pe care o poate influența (Scor
  • convertirea modelului instruit într-un model Core ML

S-ar părea că există pași destul de puțini, dar nu este la fel de descurajant cum credeți. Codul Python pe care îl vom demonstra în continuare nu va fi greu de urmărit, indiferent de experiența dvs. cu limba. 

În primul rând, vom configura modulele și dependențele necesare, inclusiv SciKit, coremltools (instrumentele core ML oficial pentru Python) și panda, un instrument puternic pentru analiza structurii datelor. 

Deschideți o fereastră de terminal, navigați la dosarul proiectului unde aveți fișierul CSV și introduceți următoarele:

sudo -H instalare pip - instalare core-instalat coremltools scikit-learn panda

Apoi, folosind un editor la alegere, creați un nou .py fișier și numește-i ceva asemănător convert_reviews.py, adăugând următoarele linii pentru a importa bibliotecile pe care le veți folosi:

de la sklearn.linear_model Import LinearRegression import pandas import coremltools 

După declarațiile de import, adăugați următoarele:

data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) Importul fișierului CSV = LinearRegression () # (2) "," Hotel stele "], date [" Scor "]) # (3) Datele pentru a extrapola

Până în prezent, pur și simplu importem CSV utilizând cadrul pandas, tipărind datele importate pe ecran și apoi utilizând cadrul SciKit pentru a stabili un algoritm de regresie liniară pentru a aplica coloanelor care ne interesează extrapolarea. 

Nu vă faceți griji prea mult despre ceea ce înseamnă un algoritm de regresie liniară, ci doar să știți că folosim o tehnică simplă de algoritm de modelare pentru a face predicții. În acest proiect, suntem interesați de modul în care afectează scorul hotelului nostru, pe care tocmai l-am stabilit folosind model.fit funcţie. 

Acum avem modelul nostru instruit, dar trebuie încă să îl transformăm într-un model pe care îl poate consuma Core ML, adică în cazul în care apar coremltools. Introduceți următoarele linii de cod:

coreml_model = coremltools.converters.sklearn.convert (model, ["Nr. recenzii", "Nr. recenzii hotel", "Hotel stele"], "Scor") # (4) ) # (5) Exportați un obiect model CoreML

Ultimele două linii convertesc modelul dvs. într-un model compatibil cu ML, înainte de a salva rezultatul ca un .mlmodel obiect, gata pentru a fi consumat în proiectul dvs. Xcode. Salvați scriptul Python și îl rulați prin terminal:

python convert_reviews.py

Presupunând că nu ați întâlnit erori,  Vegas_Reviews.mlmodel fișierul va fi generat și modelul tău pregătit va fi importat în Xcode. 

Integrarea modelului instruit

Pentru a doua parte a acestui tutorial, veți crea o aplicație simplă cu un singur controler de vizualizare, câteva glisante și un control segment pentru a permite utilizatorilor să schimbe diferite valori, permițându-vă să observați diferite predicții Core ML. Aplicația finală va arăta aproape de următoarele:

În Xcode, creați un nou Vizualizare aplicație unică Proiect Swift și dați-i un nume.

Apoi, asigurați-vă că ați inclus datele generate Vegas_Reviews.mlmodel fișier în proiectul dvs., tragându-l în panoul de proiectare al navigației.

Acum, deschideți ViewController.swift fișier și adăugați următoarele:

clasa ViewController: UIViewController lasa recenzii = Vegas_Reviews () @IBOutlet slab var stackView: UIStackView! @IBOutlet slab var scoreValue: UILabel! @IBOutlet slab var nrReviews: UISlider! @IBOutlet slab var nrHotelReviews: UISlider! @IBOutlet slab stele var: UISegmentedControl!

Primul lucru pe care îl faci este crearea unui exemplu al modelului nostru, pe care îl vei folosi pentru a face predicții mai târziu în clasă. Creați și câteva IBOutlet variabilele pe care le veți însoți în scurt timp în tabloul de scripturi, care se referă la proprietățile individuale ale modelului cu care vrem să jucăm.

Treceți la Storyboard și adăugați comenzile corespunzătoare pe care le-am declarat în controlerul dvs. de vizualizare, asigurându-vă că conectați fiecare control la controlerul de vizualizare:

Reveniți la ViewController.swift fișier și adăugați următoarele @IBAction metodă: 

@IBAction func makePredicție (_ expeditor: Oricare) let nrReviewsSelected = Double (nrReviewsvalue) permite nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSelected: Double switch stars.selectedSegmentIndex case 0: return 3.0 case 1: 2: întoarcere 5.0 implicit: retur 5.0 dacă permiteți predicțiile = încercați? auto.reviews.prediction (Nr__reviews: nrReviewsSelected, Nr__hotel_reviews: nrHotelReviewsSelected, Hotel_stars: starsSelected) lăsați scoreFormatter = NumărFormatter () scoreFormatter.numberStyle = .decimal scoreFormatter.maximumFractionDigits = 1 self.scoreValue.text = scoreFormatter.string (pentru: predicții. Scor) altceva print ("Eroare")

Acesta este codul funcțional principal al motorului nostru de predicție, deci să analizăm această metodă pas cu pas. Am aruncat mai întâi diferite controale în Dubla tip, care vor fi transmise ca argumente când ne sunăm metoda predicțiilor. Intr-un încerca? blocați, sunați self.reviews.prediction (), care este o metodă generată automat de modelul nostru, împreună cu proprietățile așteptate pe care le-am definit la importul modelului nostru instruit.

Rezultatul blocului de predicții este apoi trecut pe etichetă ScoreValue, pentru a fi afișate în aplicația dvs. Suntem aproape finalizați - reveniți din nou pe scenă și cartografiați fiecare control valueChanged: proprietate la @IBAction metoda pe care am creat-o în controlerul de vizualizare. Doriți ca această metodă să fie apelată de fiecare dată când modificați un cursor sau o valoare de segment. Și, pentru o bună măsură, vă puteți asigura, de asemenea, că veți numi automat această metodă în cadrul dvs. viewDidLoad () astfel încât să se actualizeze de la început:

override func vizualizareDidLoad () super.viewDidLoad () self.makePrediction (auto)

Construiți și rulați aplicația în Xcode și în Simulator, comutați diferitele glisoare și observați predicția valorii punctajului pe măsură ce se modifică în funcție de ceilalți factori care atribuie numărul de recenzii și recenzii de hotel în general. 

După cum sa subliniat mai devreme, acesta este într-adevăr un exemplu conturat, dar vă oferă o idee despre cum să construiți propriile experimente pentru a corela și, mai important, cât de simplu este să implementați modele instruite în iOS. 

Concluzie

Mulțumită Core ML în iOS 11, Apple a facilitat dezvoltatorilor de zi cu zi, fără a avea un background în învățarea profundă, pentru a putea adăuga inteligență în aplicațiile lor. Toată prelucrarea se face pe dispozitiv, asigurând o performanță mai mare fără preocuparea de confidențialitate a stocării datelor în nor. Cu Apple, anterior, implementarea mașinilor de învățare pe aplicații încorporate, cum ar fi Photos and Mail, dezvoltatorii de la terți au acum posibilitatea de a recunoaște modele, imagini și intenții textuale cu doar câteva linii de cod. 

Aceasta este, fără îndoială, doar începutul mișcării Core ML a Apple, dar este o mare oportunitate pentru dezvoltatori să înceapă să se gândească mai cuprinzător la date. Cu Core ML, putem oferi utilizatorilor experiențe de utilizare mai bune, oferind în același timp managerilor de produse informații mai bune despre comportamentul utilizatorilor. 

În timp ce sunteți aici, verificați câteva dintre celelalte postări despre dezvoltarea aplicațiilor iOS și învățarea în mașină!

Cod