Hvordan trene en Core ML-modell for en iOS-app

Hva du skal skape

Core ML gjør det enkelt for iOS-utviklere å legge til dyp maskinlæring til sine apps. I dette innlegget vil jeg vise deg hvordan du kan trene en Core ML-modell for å utlede intelligent innsikt.

Maskininnlæring har utvilsomt vært et av de heteste emnene i løpet av det siste året, med selskaper av alle slag som prøver å gjøre sine produkter mer intelligente for å forbedre brukeropplevelsene og skille deres tilbud. Google investerte mellom $ 20 milliarder og $ 30 milliarder i kunstig intelligens bare i fjor alene, ifølge McKinsey's State of Machine Learning og AI, 2017. 

AI blir til et løp for patenter og intellektuell eiendom (IP) blant verdens ledende teknologibedrifter ... Rapporten citerer mange eksempler på intern utvikling, inkludert Amazons investeringer i robotteknologi og talegjenkjenning, og Salesforce på virtuelle agenter og maskinlæring. BMW, Tesla og Toyota ledende bilprodusenter i sine investeringer i robotteknikk og maskinlæring for bruk i sjåførløse biler. Toyota planlegger å investere $ 1B i å etablere et nytt forskningsinstitutt viet til AI for robotteknologi og førerkjøretøy. (Kilde: Forbes)

Apple er ikke noe unntak for denne trenden, etter å ha utnyttet maskinlæring i sine egne apper. For eksempel kan appen Bilder for iOS gjenkjenne ansikter, objekter og landemerker, og Siri gir intent og mening fra tale. Meldinger for iOS foreslår og forutser ord ordentlig basert på tidligere brukeradferd. 

I denne opplæringen lærer du om hvordan du bruker maskinlæringsalgoritmer til et sett med treningsdata, for å skape en utdannet modell som senere vil gjøre spådommer basert på ny innsats. Alt takk til Apples nye Core ML-rammeverk. 

Målet med denne opplæringen

Denne opplæringen vil introdusere deg til en delmengde maskinlæring. Du skal trene og integrere en maskinlæringsmodell i en enkel iOS-app, ved hjelp av en populær dyp læring algoritme rammeverk. I denne opplæringen vil du:

  • lære noen av de grunnleggende maskinlæringskonseptene 
  • Tren din modell ved å bruke prøvedata
  • integrere den trente modellen i en iOS-app

Etter å ha gått gjennom NLP-teorien, legger vi vår kunnskap i praksis ved å arbeide gjennom en enkel Twitter-klient, analysere tweet-meldinger. Gå videre og klone opplæringen GitHub repo og se på den endelige versjonen av appen vi vil lage fra grunnen av. 

Forutsatt kunnskap

Denne opplæringen antar at du er en erfaren iOS-utvikler, men selv om du vil jobbe med maskinlæring, trenger du ikke å ha noen bakgrunn på emnet. Du bruker litt Python til å lage din opplærte modell, men du kan følge opplæringseksempelet uten å ha kjent med Python. 

Maskininnlæring 101

Målet med maskinlæring er at en datamaskin skal utføre oppgaver uten å være eksplisitt programmert for å gjøre det - evnen til å tenke eller tolke autonomt. Et høyt profilert, moderne brukstilfelle er autonom kjøring: gir bilene muligheten til å visuelt tolke sitt miljø og kjøre uten hjelp. 

Maskininnlæring håndteres i dag av store bedrifter for å gjøre bedre forretningsbeslutninger basert på historiske data, ved å bruke dype læringsalgoritmer for å identifisere mønstre og korrelasjoner som gjør dem i stand til å gi bedre forutsigelser om fremtiden. For eksempel kan du løse problemer som "Hvor sannsynlig er det for en bestemt kunde å kjøpe et bestemt produkt eller en tjeneste?" Med større tillit basert på tidligere oppførsel. 

Maskininnlæring brukes best til problemer der du har en historie med svar, som du vil oppdage senere i denne opplæringen når vi går gjennom vårt utvalgsproblem. Et eksempel på maskinlæring i aksjon ville være ditt spamfilter, som bruker overvåket læring (som du flagger elementer som spam eller ikke) for å bedre filtrere spam over tid. Maskininnlæringsmodellen koder for all denne kunnskapen om tidligere resultater og gjør det tilgjengelig for algoritmen for effektiv bruk i driftstid.

Det kan høres litt overveldende i begynnelsen, men det er ikke komplisert, og jeg vil gå gjennom hvordan du raskt lager en trent modell. Når du har utviklet en utdannet modell via en algoritme, konverterer du den til en modell som kan bli brukt av IOS, takket være Core ML.

Core ML er nytt for Apples familie av SDKs, introdusert som en del av iOS 11 for å tillate utviklere å implementere et stort utvalg av maskininnlæringsmoduser og dype lærlagtyper. 

Natural Language Processing (NLP) sitter logisk innenfor Core ML-rammen sammen med to andre kraftige biblioteker, Vision and GameplayKit. Vision gir utviklere muligheten til å implementere datasystemmaskinlæring for å utføre ting som å oppdage ansikter, landemerker eller andre objekter, mens GameplayKit gir spillutviklere verktøy for forfatterspill og spesifikke spillfunksjoner. 

Fordelen med Core ML sammenlignet med andre løsninger er at Apple har optimalisert maskinlæring for å kjøre på enheten, noe som betyr redusert minneforbruk og redusert ventetid. Dette beholder også brukerinformasjon i enheten, og forbedrer personvernet.

Med en oversikt over maskinlæring og modeller ut av veien, la oss sette teorien i bruk ved å lage din første treningsmodell. 

Tren din modell

For at en modell skal være nyttig, må den trent til å gjenkjenne data som informasjon som den senere kan bruke til å hente forutsigelser med en passende algoritme. Core ML støtter for tiden følgende modelltyper:

I tillegg til å utpeke en algoritme, jo flere data du har, desto bedre blir modellen din trent, og jo mer nøyaktig vil spådommene være. Før vi begynner å lage vår Core ML-modell, la oss ta en titt på eksemplet appen vi skal jobbe med, og spesielt eksempeldataene. 

Eksempel App: Las Vegas Hotel Score Predictor

For denne opplæringen skal vi bruke et åpent sett med data om hotellanmeldelser i Las Vegas Strip, som jeg hentet fra UCI for å illustrere hvordan man trener en modell og beregner korrelasjoner. Du kan se på den komplette kommaseparerte CSV-filen som vi skal bruke i vår app. Datastrukturen er som følger:

Nr. anmeldelser, Nr. hotellanmeldelser, score, hotellnavn, hotell stjerner 11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3 ... 

Vi vil være interessert i å forutse hotellstjerner for hoteller basert på sammenheng mellom antall hotellanmeldelser og generelle vurderinger for hvert enkelt hotell, noe som er et ganske godt eksempel, men enkelt nok til å illustrere konseptet om å trene en modell med enkle data. 

Last ned den kommaseparerte CSV-filen i en ny mappe som du vil bruke til denne øvelsen. La oss nå gå og få våre hender skitne med noen Python, med sikte på å oppnå følgende: 

  • importerer nødvendige biblioteker, inkludert Python Core ML-bibliotekene
  • importerer våre eksempeldata
  • bruke en lineær regresjonsalgoritme til våre data, ved hjelp av et bibliotek kalt SciKit
  • identifisere kolonnene i dataene vi er interessert i modellering (Nr. anmeldelser, Nr. hotellanmeldelser, Hotell stjerner)
  • identifisere kolonnen som det kan påvirke (Score
  • konvertere den trente modellen til en Core ML-modell

Det kan virke som om det er ganske få skritt, men det er ikke så skremmende som du kanskje tror. Python-koden vi vil demonstrere neste, vil ikke være vanskelig å følge, uavhengig av din erfaring med språket. 

Først skal vi sette opp våre nødvendige moduler og avhengigheter, inkludert SciKit, coremltools (Apples offisielle Core ML-verktøy for Python), og pandas, et kraftig verktøy for datastrukturanalyse. 

Åpne et terminalvindu, naviger til prosjektmappen der du har CSV-filen, og skriv inn følgende:

sudo -H pip installere - signore-installerte coremltools scikit-learn pandas

Deretter skal du opprette en ny med en redaktør etter eget valg .py fil, og nevne det noe som convert_reviews.py, legger til følgende linjer for å importere bibliotekene du skal bruke:

fra sklearn.linear_model Importer LinearRegression import pandas importere coremltools 

Rett etter importerklæringene, legg til følgende:

data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) Importer CSV-filmodell = LinearRegression () # (2) Bruk lineær regresjonsutskrift (data) model.fit (data [["Nr. anmeldelser "," Nr. Hotelanmeldelser "," Hotellstjerner "]], data [" Score "]) # (3) Data for ekstrapolering

Så langt importerer vi bare CSV ved hjelp av pandasrammen, skriver ut de importerte dataene på skjermen, og bruker deretter SciKit-rammeverket til å etablere en lineær regresjonsalgoritme for å søke på kolonnene vi er interessert i å ekstrapolere. 

Ikke bekymre deg for mye om hva en lineær regresjonsalgoritme betyr, men bare vet at vi bruker en enkel modelleringsalgoritmteknikk for å gjøre spådommer. I dette prosjektet er vi interessert i hvordan det påvirker poengsummen på hotellet vårt, som vi nettopp har etablert ved hjelp av model.fit funksjon. 

Vi har nå vår opplærte modell, men vi må fortsatt konvertere den til en modell som Core ML kan konsumere, noe som er der coremltools kommer inn. Sett inn følgende kodelinjer:

coreml_model = coremltools.converters.sklearn.convert (modell, ["Nr. vurderinger", "Nr. hotelanmeldelser", "Hotel stjerner"], "Score") # (4) Konverter coreml_model.save ("Vegas_Reviews.mlmodel" ) # (5) Eksporter til et CoreML-modellobjekt

De to siste linjene konverterer modellen til en Core ML-kompatibel modell før du lagrer resultatet som en .mlmodel objekt, klar til å bli konsumert i Xcode-prosjektet. Lagre Python-skriptet og kjør det via terminal:

python convert_reviews.py

Forutsatt at du ikke har oppdaget noen feil,  Vegas_Reviews.mlmodel filen vil bli generert, og din trente modell vil bli importert til Xcode. 

Integrering av trenet modell

For den andre delen av denne opplæringen skal du lage en enkel app med en enkelt visningskontroller, et par skyvekontrollere og en segmentkontroll for at brukerne kan bytte forskjellige verdier, slik at du kan observere ulike Core ML-spådommer. Den endelige appen vil se nærmere på følgende:

I Xcode, opprett en ny Single View App Swift prosjekt, og gi det et navn.

Deretter sørg for at du har tatt med den genererte Vegas_Reviews.mlmodel filen i prosjektet ditt, ved å dra det i navigasjonsprosjektpanelet.

Nå åpner du ViewController.swift fil, og legg til følgende:

klasse ViewController: UIViewController la vurderinger = Vegas_Reviews () @IBOutlet weak var stackView: UIStackView! @IBOutlet svak var scoreValue: UILabel! @IBOutlet svak var nrReviews: UISlider! @IBOutlet svak var nrHotelHotelReviews: UISlider! @IBOutlet svake var stjerner: UISegmentedControl!

Det første du gjør er å skape en forekomst av vår modell, som du vil bruke til å gjøre spådommer senere i klassen. Du lager også noen få IBOutlet variabler som du snart kommer opp i storyboardet, det kartet til de enkelte modellegenskapene vi ønsker å leke med.

Bytt til Storyboard, og legg til de tilsvarende kontrollene vi erklærte i visningskontrollen din, og sørg for at du kobler opp hver kontroll til visningskontrollen:

Bytt tilbake til ViewController.swift fil, og legg til følgende @IBAction metode: 

@IBAction func makePrediction (_ sender: Enhver) la nrReviewsSelected = Double (nrReviews.value) la nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSelected: Double switch stars.selectedSegmentIndex case 0: return 3.0 case 1: return 4.0 case 2: return 5.0 standard: return 5.0 hvis la forutsigelser = prøv? self.reviews.prediction (Nr__reviews: nrReviewsSelected, Nr__hotel_reviews: nrHotelReviewsSelected, Hotel_stars: starsSelected) let scoreFormatter = NumberFormatter () scoreFormatter.numberStyle = .decimal scoreFormatter.maximumFractionDigits = 1 self.scoreValue.text = scoreFormatter.string (for: spådommer. Score) ellers print ("Error")

Dette er den primære funksjonskoden til vår prediksjonsmotor, så la oss dissekere denne metoden trinnvis. Vi kastet først de forskjellige kontrollene inn i Dobbelt type, som vil bli sendt som argumenter når vi kaller vår prediksjonsmetode. Innenfor en prøve? blokkere, ringe self.reviews.prediction (), som er en automatisk generert metode som tilhører modellen vår, sammen med de forventede egenskapene vi definerte ved import av vår opplærte modell.

Resultatet av prediksjonsblokken sendes deretter til etiketten ScoreValue, å vise i appen din. Vi er nesten ferdige, bare bytt tilbake en gang til storyboardet og kart hver kontroll er valueChanged: eiendom til @IBAction Metode vi opprettet i visningskontrolleren. Du vil at denne metoden skal kalles hver gang du endrer en glidebryter eller segmentverdi. Og i god grad kan du også sørge for at du automatisk kaller denne metoden i din viewDidLoad () metode slik at den oppdateres helt fra starten:

overstyr func viewDidLoad () super.viewDidLoad () self.makePrediction (selv)

Bygg og kjøre appen i Xcode, og i Simulatoren, skift de forskjellige skyvekontrollene og observer verdivurderingen som den endrer basert på de andre tildelingsfaktorene i antall hotellomtaler og vurderinger generelt. 

Som allerede understreket, er dette faktisk et opptatt eksempel, men det gir deg en ide om hvordan du bygger dine egne eksperimenter for å korrelere, og enda viktigere, hvor enkelt er det å implementere trenede modeller i IOS. 

Konklusjon

Takket være Core ML i iOS 11 har Apple gjort det enkelt for hverdagsutviklere uten bakgrunn i dyp læring for å kunne legge til intelligens i sine apper. All behandling skjer på enheten, noe som sikrer større ytelse uten at personvernet gjelder å lagre data i skyen. Med Apple tidligere 'hundemating' implementering av maskinlæring på innebygde programmer som Bilder og Mail, har tredjepartsutviklere nå mulighet til å gjenkjenne mønstre, bilder og tekstformål med bare noen få linjer med kode. 

Dette er uten tvil bare begynnelsen på Apples Core ML-bevegelse, men det er en flott mulighet for utviklere å begynne å tenke mer holistisk på data. Med Core ML kan vi gi brukerne bedre brukeropplevelser, samtidig som produktledere gir større forretningsinnsikt i brukeradferd. 

Mens du er her, sjekk ut noen av våre andre innlegg på IOS app utvikling og maskin læring!