Core ML gör det enkelt för iOS-utvecklare att lägga till djup maskininlärning till sina appar. I det här inlägget visar jag hur du kan träna en Core ML-modell för att härleda intelligenta insikter.
Maskininlärning har utan tvekan varit ett av de hetaste ämnena under det senaste året, med företag av alla slag som försöker göra sina produkter mer intelligenta för att förbättra användarupplevelser och differentiera sina erbjudanden. Google investerade mellan 20 miljarder dollar och 30 miljarder dollar i artificiell intelligens bara förra året ensam, enligt McKinsey's State of Machine Learning och AI, 2017.
AI blir en ras för patent och immateriell äganderätt (IP) bland världens ledande teknikföretag ... Rapporten citerar många exempel på intern utveckling, inklusive Amazons satsningar på robotik och taligenkänning, och Salesforce på virtuella agenter och maskininlärning. BMW, Tesla och Toyota ledande biltillverkare i sina investeringar i robotik och maskininlärning för användning i förare utan bil. Toyota planerar att investera $ 1B i att inrätta ett nytt forskningsinstitut som ägnar sig åt AI för robotar och förare utan bil. (Källa: Forbes)
Apple är inget undantag för denna trend, eftersom den har utnyttjat maskininlärning i sina egna appar. Till exempel kan appen Foton för iOS känna igen ansikten, objekt och landmärken, och Siri infunderar avsikt och mening från tal. Meddelanden för iOS föreslår och förutspår ord ordentligt baserat på tidigare användarbeteenden.
I denna handledning kommer du att lära dig hur man applicerar maskininlärningsalgoritmer till en uppsättning träningsdata, för att skapa en utbildad modell som därefter kommer att göra förutsägelser baserade på ny ingång. Allt tack vare Apples nya Core ML-ramverk.
Denna handledning kommer att introducera dig till en delmängd maskininlärning. Du tränar och integrerar en maskininlärningsmodell i en enkel iOS-app, med hjälp av en populär inlärningsalgoritmram. I denna handledning kommer du att:
Efter att ha gått igenom NLP: s teori lägger vi vår kunskap i praktiken genom att arbeta genom en enkel Twitter-klient, analysera tweet-meddelanden. Gå vidare och klon i handledningens GitHub repo och ta en titt på den slutliga versionen av appen som vi kommer att skapa från början.
Denna handledning förutsätter att du är en erfaren IOS-utvecklare, men även om du kommer att arbeta med maskininlärning behöver du inte ha någon bakgrund i ämnet. Du använder lite Python för att skapa din utbildade modell, men du kan följa uppövningsexemplet utan kännedom om Python.
Målet med maskininlärning är att en dator ska kunna utföra uppgifter utan att uttryckligen programmeras att göra det - förmågan att tänka eller tolka självständigt. Ett högprofilerat modernt användningsfall är autonom körning: ger bilar möjligheten att visuellt tolka sin miljö och driva utan hjälp.
Maskininlärning hanteras idag av stora företag för att göra bättre affärsbeslut baserat på historiska data, genom att använda djupa inlärningsalgoritmer för att identifiera mönster och korrelationer, vilket gör att de kan göra bättre förutsägelser om framtiden. Du kan till exempel lösa problem som "Hur sannolikt är det för en viss kund att köpa en viss produkt eller tjänst?" Med större förtroende baserat på tidigare beteende.
Maskininlärning tillämpas bäst på problem där du har en historia av svar, som du kommer att upptäcka senare i denna handledning när vi går igenom vårt provproblem. Ett exempel på maskininlärning i åtgärd skulle vara ditt spamfilter, som använder övervakat lärande (som du flaggar objekt som skräppost eller inte) för att bättre filtrera skräppost över tid. Maskininlärningsmodellen kodar all denna kunskap om tidigare resultat och gör den tillgänglig för algoritmen för effektiv användning vid driftstid.
Det kanske låter lite överväldigande först, men det är inte komplicerat, och jag ska gå igenom hur du snabbt skapar en utbildad modell. När du väl har utarbetat en utbildad modell via en algoritm konverterar du den till en modell som kan konsumeras av IOS, tack vare Core ML.
Core ML är nytt för Apples familj av SDK, introducerad som en del av IOS 11 för att ge utvecklare möjlighet att implementera en mängd olika maskininlärningslägen och djupa inlärningsslagstyper.
Natural Language Processing (NLP) sitter logiskt inom ramen för Core ML tillsammans med två andra kraftfulla bibliotek, Vision and GameplayKit. Vision ger utvecklare möjligheten att implementera datorvisionsmaskinsinlärning för att utföra saker som att upptäcka ansikten, landmärken eller andra objekt, medan GameplayKit ger spelutvecklare verktyg för att skapa spel och specifika spelfunktioner.
Fördelen med Core ML jämfört med andra lösningar är att Apple har optimerat maskininlärning att köra på enheten, vilket innebär minskad minnesförbrukning och minskad latens. Detta innehåller också information om användarinformation inom enheten, vilket förbättrar integriteten.
Med en översikt över maskininlärning och modeller ur vägen, låt oss sätta teorin i bruk genom att skapa din första träningsmodell.
För att en modell ska vara användbar måste den utbildas för att identifiera data som information som den senare kan använda för att hävda förutsägelser med en lämplig algoritm. Core ML stöder för närvarande följande modelltyper:
Förutom att du anger en algoritm, ju mer data du har desto bättre blir din modell utbildad, och ju mer exakta förutsägelserna blir. Innan vi börjar skapa vår Core ML-modell, låt oss ta en titt på exemplet appen vi ska arbeta med, och i synnerhet provdata.
För denna handledning kommer vi att använda en öppen uppsättning data om hotellrecensioner i Las Vegas Strip som jag kommer från UCI för att illustrera hur man tränar en modell och beräknar korrelationer. Du kan ta en titt på den fullständiga kommandotgränsade CSV-filen som vi ska använda i vår app. Uppgifterna är följande:
Nr. recensioner, Nr. Hotellrecensioner, Betygsättning, Hotellnamn, Hotell stjärnor 11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3 ...
Vi kommer att vara intresserade av att förutse hotellens stjärnklassificeringar för hotell baserat på korrelationen mellan antalet hotellrecensioner och allmänna recensioner för varje specifikt hotell, vilket är ett ganska konstruerat exempel men tillräckligt enkelt för att illustrera begreppet träning av en modell med enkel data.
Hämta den kommaseparerade CSV-filen i en ny mapp som du ska använda för den här övningen. Låt oss nu gå och få våra händer smutsiga med vissa Python, med sikte på att åstadkomma följande:
Det kan tyckas som om det finns några steg, men det är inte så skrämmande som du kanske tror. Python-koden vi kommer att demonstrera nästa kommer inte vara svår att följa, oavsett din språkupplevelse.
Först ska vi ställa in våra nödvändiga moduler och beroenden, inklusive SciKit, coremltools (Apples officiella Core ML-verktyg för Python) och pandas, ett kraftfullt verktyg för datastrukturanalys.
Öppna ett terminalfönster, navigera till projektmappen där du har CSV-filen och ange följande:
sudo -H pip installera - signore-installerade coremltools scikit-learn pandas
Därefter skapar du en ny med hjälp av en redigerare efter eget val .py fil och namnge det något liknande convert_reviews.py, Lägg till följande rader för att importera de bibliotek du ska använda:
från sklearn.linear_model Importera importlinjer för import av LinearRegression Importer
Strax efter importdeklarationerna, lägg till följande:
data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) Importera CSV-filmodell = LinearRegression () # (2) Använd linjärt regressionsutskrift (data) model.fit (data [["Nr. recensioner "," Antal hotellrecensioner "," Hotellstjärnor "]], data [" Resultat "]) # (3) Data för extrapolering
Hittills importerar vi helt enkelt CSV med hjälp av pandasramen, skriver ut de importerade data till skärmen och använder sedan SciKit-ramverket för att upprätta en linjär regressionsalgoritm för att applicera på kolumnerna som vi är intresserade av att extrapolera.
Oroa dig inte för mycket om vad en linjär regressionsalgoritm innebär, men vet bara att vi använder en enkel modelleringsalgoritmteknik för att göra förutsägelser. I det här projektet är vi intresserade av hur det påverkar vårt hotell, som vi just etablerat med hjälp av model.fit
fungera.
Vi har nu vår utbildade modell, men vi behöver fortfarande konvertera den till en modell som Core ML kan konsumera, vilket är där coremltools kommer in. Sätt i följande rader av kod:
coreml_model = coremltools.converters.sklearn.convert (modell, ["Nr recensioner", "Nr hotellrecensioner", "Hotellstjärnor"], "Poäng") # (4) Konvertera coreml_model.save ("Vegas_Reviews.mlmodel" ) # (5) Exportera till ett CoreML-modellobjekt
De två sista raderna konverterar din modell till en Core ML-kompatibel modell innan du sparar resultatet som en .mlmodel objekt, redo att konsumeras i ditt Xcode-projekt. Spara Python-skriptet och kör det via terminal:
python convert_reviews.py
Förmodar att du inte har stött på några fel, den Vegas_Reviews.mlmodel filen kommer att genereras, och din utbildade modell grundades för att importeras till Xcode.
För den andra delen av denna handledning kommer du att skapa en enkel app med en enda bildkontroll, några reglage och en segmentstyrning som gör att användarna kan växla olika värden, så att du kan observera olika Core ML-förutsägelser. Den sista appen kommer att se nära följande:
Skapa en ny i Xcode Enkel visningsprogram Swift projekt, och ge det ett namn.
Kontrollera sedan att du har inkluderat den genererade Vegas_Reviews.mlmodel filen i ditt projekt genom att dra det till din navigationsprojektfönster.
Nu öppnar du ViewController.swift fil och lägg till följande:
class ViewController: UIViewController let recensioner = Vegas_Reviews () @IBOutlet weak var stackVisa: UIStackView! @IBOutlet svag var poängValue: UILabel! @IBOutlet weak var nrReviews: UISlider! @IBOutlet weak var nrHotelReviews: UISlider! @IBOutlet svaga var stjärnor: UISegmentedControl!
Det första du gör är att skapa en förekomst av vår modell, som du kommer att använda för att göra förutsägelser senare i klassen. Du skapar också några IBOutlet
variabler som du kommer att ladda upp i storyboardet, den kartan till de enskilda modellegenskaperna vi vill leka med.
Byt till Storyboard och lägg till motsvarande kontroller som vi deklarerade i din kontroller, se till att du kopplar upp varje kontroll till visningsregulatorn:
Växla tillbaka till ViewController.swift fil och lägg till följande @IBAction
metod:
@IBAction func makePrediction (_ avsändare: Alla) let nrReviewsSelected = Double (nrReviews.value) låt nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSelected: Double switch stars.selectedSegmentIndex fall 0: returnera 3.0 fall 1: retur 4,0 fall 2: return 5.0 standard: return 5.0 om låt förutsägelser = försök? 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 (för: förutsägelser. Poäng) annars print ("Error")
Detta är den primära funktionskoden för vår prediktionsmotor, så låt oss dissekera denna metod steg för steg. Vi kastade först de olika kontrollerna i Dubbel
typ som kommer att överföras som argument när vi kallar vår prediktionsmetod. Inom en Prova?
blockera, ringa self.reviews.prediction ()
, vilket är en automatiskt genererad metod som hör till vår modell, tillsammans med de förväntade egenskaperna vi definierade när vi importerade vår utbildade modell.
Resultatet av prediktionsblocket överförs sedan till etiketten ScoreValue
, att visa i din app. Vi är nästan färdiga, bara byta tillbaka en gång till storyboardet och kartlägga varje kontroll valueChanged:
egendom till @IBAction
metod som vi skapade i visningskontrollen. Du vill att den här metoden ska ringas varje gång du ändrar ett reglage- eller segmentvärde. Och med god åtgärd kan du också se till att du automatiskt anropar den här metoden inom din viewDidLoad ()
metod så att den uppdateras direkt från början:
åsidosätta func viewDidLoad () super.viewDidLoad () self.makePrediction (själv)
Bygg och kör appen i Xcode, och i simulatorn växlar du de olika reglagen och observerar värdespreferensen eftersom den ändras baserat på de andra attributfaktorerna för antalet hotellrecensioner och recensioner i allmänhet.
Som framhävt tidigare är det här ett bra exempel, men det ger dig en uppfattning om hur man bygger egna experiment för att korrelera, och ännu viktigare, hur enkelt det är att genomföra utbildade modeller i IOS.
Tack vare Core ML i iOS 11 har Apple gjort det enkelt för vardagliga utvecklare utan bakgrund i djupt lärande för att kunna lägga till intelligens i sina appar. All bearbetning görs på enheten, vilket garanterar bättre prestanda utan att privatlivet rör sig om lagring av data i molnet. Med Apple tidigare "hundmatning" har maskininlärningens genomförande på inbyggda appar som Foton och Mail, utvecklare från tredje part nu möjlighet att känna igen mönster, bilder och textintentioner med endast några rader kod.
Detta är utan tvekan bara början på Apples Core ML-rörelse, men det är en utmärkt möjlighet för utvecklare att börja tänka mer holistiskt om data. Med Core ML kan vi ge användarna bättre användarupplevelser, samtidigt som produktcheferna får större insikt i användarbeteenden.
Medan du är här, kolla in några av våra andra inlägg på IOS apputveckling och maskininlärning!