Come addestrare un modello Core ML per un'applicazione iOS

Cosa starai creando

Core ML rende facile per gli sviluppatori iOS aggiungere un deep machine learning alle loro app. In questo post, ti mostrerò come puoi addestrare un modello Core ML per ricavare intuizioni intelligenti.

L'apprendimento automatico è stato indubbiamente uno degli argomenti più caldi dello scorso anno, con aziende di ogni tipo che cercano di rendere i loro prodotti più intelligenti per migliorare le esperienze degli utenti e differenziare le loro offerte. Google ha investito tra $ 20 miliardi e $ 30 miliardi di intelligenza artificiale solo lo scorso anno, secondo lo stato di Machine Learning e AI di McKinsey, 2017. 

L'intelligenza artificiale sta diventando una competizione per i brevetti e la proprietà intellettuale (IP) tra le principali società tecnologiche del mondo ... Il rapporto cita molti esempi di sviluppo interno, inclusi gli investimenti di Amazon in robotica e riconoscimento vocale e Salesforce su agenti virtuali e apprendimento automatico. BMW, Tesla e Toyota guidano i produttori di auto nei loro investimenti in robotica e apprendimento automatico per l'uso in auto senza conducente. La Toyota ha in programma di investire $ 1 B per creare un nuovo istituto di ricerca dedicato all'IA per robotica e veicoli senza conducente. (Fonte: Forbes)

Apple non fa eccezione a questa tendenza, avendo utilizzato l'apprendimento automatico nelle proprie app. Ad esempio, l'app Foto per iOS è in grado di riconoscere volti, oggetti e punti di riferimento e Siri ne deduce l'intento e il significato dal parlato. Messaggi per iOS suggerisce e predice in modo intelligente le parole in base ai precedenti comportamenti dell'utente. 

In questo tutorial, imparerai come applicare gli algoritmi di apprendimento automatico a una serie di dati di allenamento, per creare un modello addestrato che successivamente effettuerà previsioni basate su nuovi input. Tutto grazie al nuovo framework Core ML di Apple. 

Obiettivi di questo tutorial

Questo tutorial ti introdurrà a un sottoinsieme di machine learning. Formerai e integrerai un modello di apprendimento automatico in una semplice app iOS, utilizzando un famoso framework dell'algoritmo di deep learning. In questo tutorial, dovrai:

  • impara alcuni dei concetti base di apprendimento automatico 
  • addestrare il modello usando dati di esempio
  • integrare il modello addestrato in un'app iOS

Dopo aver esaminato la teoria della PNL, metteremo le nostre conoscenze in pratica lavorando attraverso un semplice client Twitter, analizzando i messaggi tweet. Vai avanti e clona il repository GitHub del tutorial e dai un'occhiata alla versione finale dell'app che creeremo da zero. 

Conoscenza presunta

Questo tutorial presume che tu sia uno sviluppatore esperto di iOS, ma anche se lavorerai con l'apprendimento automatico, non è necessario avere alcun background sull'argomento. Userai un po 'di Python per creare il tuo modello addestrato, ma puoi seguire l'esempio del tutorial senza una precedente conoscenza di Python. 

Machine Learning 101

L'obiettivo dell'apprendimento automatico è che un computer svolga compiti senza essere programmato esplicitamente per farlo, la capacità di pensare o interpretare autonomamente. Un caso d'uso contemporaneo di alto profilo è la guida autonoma: dare alle auto la capacità di interpretare visivamente il proprio ambiente e guidare senza aiuto. 

L'apprendimento automatico è oggi sfruttato dalle grandi aziende per prendere decisioni aziendali migliori basate su dati storici, utilizzando algoritmi di deep learning per identificare schemi e correlazioni, che consentono loro di fare previsioni migliori del futuro. Ad esempio, puoi risolvere problemi come "Quanto è probabile che un cliente specifico acquisti un prodotto o servizio specifico?" Con maggiore sicurezza basata sul comportamento precedente. 

L'apprendimento automatico si applica meglio ai problemi in cui si ha una cronologia delle risposte, come scopriremo più avanti in questo tutorial quando affronteremo il nostro esempio di problema. Un esempio di apprendimento automatico in azione sarebbe il filtro antispam per la posta elettronica, che utilizza l'apprendimento supervisionato (quando contrassegni gli elementi come spam o meno) per filtrare meglio lo spam nel tempo. Il modello di apprendimento automatico codifica tutta questa conoscenza sui risultati passati e lo rende disponibile all'algoritmo per un uso efficiente in fase di esecuzione.

All'inizio può sembrare un po 'opprimente, ma non è complicato, e ti spiegherò come creare un modello addestrato a breve. Una volta che hai ideato un modello addestrato tramite un algoritmo, lo convertirai in un modello che può essere consumato da iOS, grazie a Core ML.

Core ML è una novità della famiglia di SDK di Apple, introdotta come parte di iOS 11 per consentire agli sviluppatori di implementare una vasta gamma di modalità di apprendimento automatico e tipi di livelli di deep learning. 

Natural Language Processing (NLP) si trova logicamente all'interno del framework Core ML insieme ad altre due potenti librerie, Vision e GameplayKit. Vision offre agli sviluppatori la possibilità di implementare l'apprendimento automatico di computer vision per realizzare cose come il rilevamento di volti, punti di riferimento o altri oggetti, mentre GameplayKit offre agli sviluppatori di giochi strumenti per l'authoring di giochi e funzionalità di gioco specifiche. 

Il vantaggio di Core ML rispetto ad altre soluzioni è che Apple ha ottimizzato l'apprendimento automatico per l'esecuzione su dispositivo, il che significa riduzione del consumo energetico della memoria e riduzione della latenza. Ciò inoltre consente di memorizzare le informazioni dell'utente all'interno del dispositivo, migliorando la privacy.

Con una panoramica dell'apprendimento automatico e modelli fuori mano, mettiamo in pratica la teoria creando il tuo primo modello di formazione. 

Allenare il tuo modello

Affinché un modello sia utile, deve essere addestrato a riconoscere i dati come informazioni che possono successivamente utilizzare per affermare le previsioni con un algoritmo appropriato. Core ML attualmente supporta i seguenti tipi di modello:

Oltre a designare un algoritmo, più dati hai, migliore sarà il tuo modello e più accurate saranno le previsioni. Prima di iniziare a creare il nostro modello Core ML, diamo un'occhiata all'app di esempio con cui lavoreremo e, in particolare, ai dati di esempio. 

Esempio di app: Predictor del punteggio di Las Vegas Hotel

Per questo tutorial, utilizzeremo un insieme di dati open source sulle revisioni degli hotel nella Strip di Las Vegas, che ho acquistato da UCI per illustrare come addestrare un modello e calcolare le correlazioni. Puoi dare un'occhiata al file CSV delimitato da virgole che useremo nella nostra app. La struttura dei dati è la seguente:

Nr. recensioni, Nr. Recensioni hotel, Punteggio, Nome dell'hotel, Hotel stelle 11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3 ... 

Saremo interessati a prevedere le valutazioni stellari dell'hotel per hotel in base alla correlazione del numero di recensioni di hotel e recensioni generali per ogni specifico hotel, che è un esempio abbastanza forzato ma abbastanza semplice da illustrare il concetto di formazione di un modello con dati semplici. 

Scarica il file CSV delimitato da virgola in una nuova cartella che utilizzerai per questo esercizio. Ora andiamo avanti e ci sporchiamo le mani con alcuni Python, con l'obiettivo di realizzare quanto segue: 

  • importazione delle librerie necessarie, incluse le librerie Python Core ML
  • importando i nostri dati di esempio
  • applicando un algoritmo di regressione lineare ai nostri dati, utilizzando una libreria chiamata SciKit
  • identificando le colonne nei dati che ci interessano nella modellazione (Nr. recensioni, Nr. recensioni di hotel, Stelle dell'hotel)
  • identificando la colonna che potrebbe influenzare (Punto
  • convertire il modello addestrato in un modello Core ML

Potrebbe sembrare che ci siano parecchi passaggi, ma non è così scoraggiante come potresti pensare. Il codice Python che dimostreremo in seguito non sarà difficile da seguire, indipendentemente dalla tua esperienza con la lingua. 

Innanzitutto, configureremo i nostri moduli e le dipendenze necessari, tra cui SciKit, coremltools (gli strumenti Apple Core per Apple ufficiali per Python) e i panda, un potente strumento per l'analisi della struttura dei dati. 

Apri una finestra di terminale, vai alla cartella del progetto in cui hai il file CSV e inserisci quanto segue:

sudo -H pip installa --ignore-installato coremltools scikit-learn panda

Quindi, utilizzando un editor di tua scelta, creane uno nuovo .py file e chiamarlo come qualcosa convert_reviews.py, aggiungendo le seguenti righe per importare le librerie che userete:

da sklearn.linear_model import LinearRegression import pandas import coremltools 

Subito dopo le istruzioni di importazione, aggiungere quanto segue:

data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) Importa file CSV model = LinearRegression () # (2) Applica regressione lineare stampa (dati) model.fit (dati [["Nr recensioni recensioni "," Nr. Recensioni di hotel "," Stelle dell'hotel "]], dati [" Punteggio "]) # (3) Dati da estrapolare

Finora, stiamo semplicemente importando il CSV usando il framework pandas, stampando i dati importati sullo schermo, e poi usando il framework SciKit per stabilire un algoritmo di regressione lineare da applicare alle colonne che ci interessa estrapolare. 

Non preoccuparti troppo di ciò che significa un algoritmo di regressione lineare, ma sappi che stiamo usando una semplice tecnica di algoritmo di modellazione per fare previsioni. In questo progetto, siamo interessati a come influisce sul punteggio del nostro hotel, che abbiamo appena stabilito usando il model.fit funzione. 

Ora abbiamo il nostro modello addestrato, ma dobbiamo ancora convertirlo in un modello che Core ML può consumare, ed è qui che entra in gioco coremltools. Inserisci le seguenti righe di codice:

coreml_model = coremltools.converters.sklearn.convert (modello, ["Nr. recensioni", "Nr. recensioni di hotel", "Stelle dell'hotel"], "Punteggio") # (4) Converti coreml_model.save ("Vegas_Reviews.mlmodel" ) # (5) Esporta in un oggetto modello CoreML

Le ultime due linee convertono il tuo modello in un modello compatibile con Core ML prima di salvare il risultato come un file .mlmodel oggetto, pronto per essere consumato nel tuo progetto Xcode. Salva lo script Python ed eseguilo tramite terminale:

python convert_reviews.py

Presumendo che non si siano verificati errori, il  Vegas_Reviews.mlmodel il file verrà generato e il modello addestrato verrà inizializzato per essere importato in Xcode. 

Integrazione del modello addestrato

Per la seconda parte di questo tutorial, creerai una semplice app con un controller di visualizzazione singola, alcuni cursori e un controllo di segmento per consentire agli utenti di commutare vari valori, consentendo di osservare le varie previsioni di Core ML. L'app finale sarà simile a quanto segue:

In Xcode, creane uno nuovo App Single View Progetto Swift, e dargli un nome.

Quindi, assicurati di aver incluso il generato Vegas_Reviews.mlmodel file nel progetto, trascinandolo nel riquadro del progetto di navigazione.

Ora apri il ViewController.swift file e aggiungere quanto segue:

class ViewController: UIViewController let reviews = Vegas_Reviews () @IBOutlet weak var stackView: UIStackView! @IBOutlet weak var scoreValue: UILabel! @IBOutlet weak var nrReviews: UISlider! @IBOutlet weak var nrHotelRecensioni: UISlider! @IBOutlet stelle var deboli: UISegmentedControl!

La prima cosa che stai facendo è creare un'istanza del nostro modello, che userai per fare previsioni più avanti nella classe. Ne stai creando anche alcuni IBOutlet variabili che verranno cablate nello storyboard a breve, quella mappa alle singole proprietà del modello con cui vogliamo giocare.

Passa allo Storyboard e aggiungi i controlli corrispondenti dichiarati nel tuo controller di visualizzazione, assicurandoti di collegare ogni controllo al controller della vista:

Ritorna al ViewController.swift file e aggiungere quanto segue @IBAction metodo: 

@IBAction func makePrediction (_ sender: Any) let nrReviewsSelected = Double (nrReviews.value) let nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSelected: Double switch stars.selectedSegmentIndex caso 0: ritorno 3.0 caso 1: caso restituito 4.0 2: return 5.0 default: return 5.0 if let forecast = try? 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 (per: predictions. Punteggio) else print ("Errore")

Questo è il codice funzionale principale del nostro motore di previsione, quindi analizziamo questo metodo passo dopo passo. Per prima cosa lanciamo i vari controlli nel Doppio digita, che verrà passato come argomento quando chiamiamo il nostro metodo di previsione. All'interno di a provare? blocco, chiama self.reviews.prediction (), che è un metodo generato automaticamente che appartiene al nostro modello, insieme alle proprietà previste che abbiamo definito durante l'importazione del nostro modello addestrato.

Il risultato del blocco delle previsioni viene quindi passato all'etichetta ScoreValue, da visualizzare nella tua app. Abbiamo quasi finito, torniamo ancora una volta allo storyboard e mappiamo ogni controllo valueChanged: proprietà al @IBAction metodo che abbiamo creato nel controller della vista. Vuoi che questo metodo venga chiamato ogni volta che cambi un cursore o un valore di segmento. E per buona misura, puoi anche assicurarti di chiamare automaticamente questo metodo all'interno del tuo viewDidLoad () metodo in modo che si aggiorni sin dall'inizio:

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

Costruisci ed esegui l'app in Xcode e, nel Simulatore, attiva i vari cursori e osserva la previsione del valore del punteggio quando cambia in base agli altri fattori di attribuzione del numero di recensioni di hotel e recensioni in generale. 

Come sottolineato in precedenza, questo è davvero un esempio forzato, ma ti dà un'idea di come costruire i tuoi esperimenti da correlare e, ancora più importante, quanto sia semplice implementare modelli addestrati in iOS. 

Conclusione

Grazie a Core ML in iOS 11, Apple ha reso facile per gli sviluppatori di tutti i giorni senza un background in deep learning di poter aggiungere intelligenza alle proprie app. Tutta l'elaborazione viene eseguita su dispositivo, garantendo prestazioni migliori senza i problemi di privacy relativi alla memorizzazione dei dati nel cloud. Con Apple in passato "dog-fooding" la sua implementazione di apprendimento automatico su app integrate come Foto e Mail, gli sviluppatori di terze parti ora hanno l'opportunità di riconoscere modelli, immagini e intenti testuali solo con poche righe di codice. 

Questo è senza dubbio l'inizio del movimento Core ML di Apple, ma è una grande opportunità per gli sviluppatori di iniziare a pensare in modo più olistico ai dati. Con Core ML, siamo in grado di fornire agli utenti un'esperienza utente migliore, fornendo al contempo ai product manager informazioni più approfondite sui comportamenti degli utenti. 

Mentre sei qui, dai uno sguardo ad alcuni dei nostri altri post sullo sviluppo di app per iOS e sull'apprendimento automatico!