So trainieren Sie ein Core-ML-Modell für eine iOS-App

Was Sie erstellen werden

Core ML macht es iOS-Entwicklern leicht, ihre Apps um Deep Machine Learning zu erweitern. In diesem Beitrag zeige ich Ihnen, wie Sie ein Core-ML-Modell trainieren können, um intelligente Einblicke zu gewinnen.

Maschinelles Lernen war zweifellos eines der heißesten Themen des vergangenen Jahres. Unternehmen aller Art versuchen, ihre Produkte intelligenter zu machen, um die Benutzererfahrung zu verbessern und ihr Angebot zu differenzieren. Laut McKinseys State of Machine Learning und KI 2017 hat Google allein im letzten Jahr zwischen 20 und 30 Milliarden US-Dollar in künstliche Intelligenz investiert. 

AI entwickelt sich zu einem Wettlauf um Patente und geistiges Eigentum (IP) unter den weltweit führenden Technologieunternehmen. Der Bericht nennt viele Beispiele für die interne Entwicklung, einschließlich der Investitionen von Amazon in Robotik und Spracherkennung sowie Salesforce für virtuelle Agenten und maschinelles Lernen. BMW, Tesla und Toyota führen die Automobilhersteller bei ihren Investitionen in Robotik und maschinelles Lernen für den Einsatz in fahrerlosen Autos an. Toyota plant, 1 Mrd. US-Dollar in die Einrichtung eines neuen Forschungsinstituts zu investieren, das sich der KI für Robotik und fahrerlose Fahrzeuge widmet. (Quelle: Forbes)

Apple ist keine Ausnahme von diesem Trend, da er maschinelles Lernen in seinen eigenen Apps verwendet hat. Beispielsweise kann die Foto-App für iOS Gesichter, Objekte und Orientierungspunkte erkennen, und Siri erkennt Absicht und Bedeutung aus der Sprache. Nachrichten für iOS schlägt auf intelligente Weise Wörter vor, die auf früheren Benutzerverhalten basieren. 

In diesem Lernprogramm erfahren Sie, wie Sie maschinelle Lernalgorithmen auf einen Satz von Trainingsdaten anwenden, um ein trainiertes Modell zu erstellen, das anschließend auf der Grundlage neuer Eingaben Vorhersagen trifft. Alles dank des neuen Core ML-Frameworks von Apple. 

Ziele dieses Tutorials

Dieses Lernprogramm führt Sie in eine Teilmenge des maschinellen Lernens ein. Sie trainieren und integrieren ein maschinelles Lernmodell in einer einfachen iOS-App unter Verwendung eines weit verbreiteten Algorithmus für tiefe Lernalgorithmen. In diesem Tutorial werden Sie:

  • Lernen Sie einige der grundlegenden Konzepte des maschinellen Lernens 
  • Trainieren Sie Ihr Modell anhand von Beispieldaten
  • integrieren Sie das trainierte Modell in eine iOS-App

Nachdem wir die Theorie des NLP durchgearbeitet haben, setzen wir unser Wissen in die Praxis um, indem wir einen einfachen Twitter-Client durcharbeiten und die Tweet-Nachrichten analysieren. Klonen Sie das GitHub-Repo des Tutorials und werfen Sie einen Blick auf die endgültige Version der App, die wir von Grund auf erstellen werden. 

Angenommenes Wissen

In diesem Lernprogramm wird davon ausgegangen, dass Sie ein erfahrener iOS-Entwickler sind. Obwohl Sie mit maschinellem Lernen arbeiten werden, benötigen Sie jedoch keinen Hintergrund zu diesem Thema. Sie werden ein wenig Python verwenden, um Ihr trainiertes Modell zu erstellen. Sie können jedoch dem Tutorial-Beispiel ohne vorherige Kenntnis von Python folgen. 

Maschinelles Lernen 101

Das Ziel des maschinellen Lernens besteht darin, dass ein Computer Aufgaben ausführt, ohne dafür explizit programmiert zu sein, dh die Fähigkeit, autonom zu denken oder zu interpretieren. Ein hochkarätiger, zeitgemäßer Anwendungsfall ist autonomes Fahren: Ermöglicht Fahrzeugen, ihre Umgebung visuell zu interpretieren und selbstständig zu fahren. 

Maschinelles Lernen wird heute von großen Unternehmen genutzt, um auf der Grundlage historischer Daten bessere Geschäftsentscheidungen zu treffen. Dazu werden Algorithmen mit tiefgreifendem Lernen verwendet, um Muster und Korrelationen zu identifizieren, mit denen sie bessere Vorhersagen für die Zukunft treffen können. Sie können beispielsweise Probleme wie „Wie wahrscheinlich ist es für einen bestimmten Kunden, ein bestimmtes Produkt oder eine bestimmte Dienstleistung zu kaufen?“ Mit größerem Vertrauen auf der Grundlage des vorherigen Verhaltens lösen. 

Maschinelles Lernen eignet sich am besten für Probleme, bei denen Sie eine Vorgeschichte von Antworten haben, wie Sie später in diesem Lernprogramm erfahren werden, wenn wir unser Beispielproblem durchgehen. Ein Beispiel für maschinelles Lernen in der Praxis ist der E-Mail-Spam-Filter, bei dem überwachtes Lernen (wenn Sie Elemente als Spam kennzeichnen oder nicht) verwendet wird, um Spam im Laufe der Zeit besser zu filtern. Das Modell des maschinellen Lernens kodiert all dieses Wissen über vergangene Ergebnisse und stellt es dem Algorithmus zur effizienten Verwendung zur Laufzeit zur Verfügung.

Es klingt auf den ersten Blick alles ein wenig überwältigend, aber es ist nicht kompliziert. Ich werde Sie in Kürze durcharbeiten, wie Sie ein trainiertes Modell erstellen. Wenn Sie ein trainiertes Modell über einen Algorithmus entwickelt haben, konvertieren Sie es in ein Modell, das dank Core ML für iOS verwendet werden kann.

Core ML ist neu in der SDK-Familie von Apple und wurde als Teil von iOS 11 eingeführt, um Entwicklern die Implementierung einer Vielzahl von maschinellen Lernmodi und tieferen Schichttypen zu ermöglichen. 

Natural Language Processing (NLP) befindet sich logischerweise innerhalb des Core ML-Frameworks neben zwei anderen leistungsstarken Bibliotheken, Vision und GameplayKit. Vision bietet Entwicklern die Möglichkeit, Computer Vision Machine Learning zu implementieren, um beispielsweise Gesichter, Orientierungspunkte oder andere Objekte zu erkennen, während GameplayKit Spielentwicklern Tools für das Authoring von Spielen und bestimmte Gameplay-Funktionen zur Verfügung stellt. 

Der Vorteil von Core ML im Vergleich zu anderen Lösungen besteht darin, dass Apple das maschinelle Lernen für die Ausführung auf dem Gerät optimiert hat, wodurch der Stromverbrauch des Speichers reduziert und die Latenz verringert wird. Dadurch werden auch Benutzerinformationen innerhalb des Geräts in Containern gespeichert, wodurch die Privatsphäre verbessert wird.

Mit einem Überblick über maschinelles Lernen und wegfallende Modelle setzen wir die Theorie in die Praxis um, indem Sie Ihr erstes Trainingsmodell erstellen. 

Trainieren Sie Ihr Modell

Damit ein Modell nützlich ist, muss es darauf trainiert werden, Daten als Informationen zu erkennen, die es anschließend verwenden kann, um Vorhersagen mit einem geeigneten Algorithmus zu bestätigen. Core ML unterstützt derzeit die folgenden Modelltypen:

Zusätzlich zum Festlegen eines Algorithmus wird das Modell umso besser trainiert, je mehr Daten Sie haben, und desto genauer sind die Vorhersagen. Bevor wir mit der Erstellung unseres Core-ML-Modells beginnen, werfen wir einen Blick auf die Beispiel-App, mit der wir arbeiten, und insbesondere auf die Beispieldaten. 

Beispiel-App: Las Vegas Hotel Score Predictor

Für dieses Lernprogramm verwenden wir ein offenes Datenmaterial zu Hotelbewertungen im Las Vegas Strip, das ich von UCI bezogen habe, um zu zeigen, wie man ein Modell trainiert und Korrelationen berechnet. Sie können die vollständige, durch Kommas getrennte CSV-Datei betrachten, die wir in unserer App verwenden werden. Die Datenstruktur sieht wie folgt aus:

Nr. Bewertungen, Nr. Hotelbewertungen, Score, Hotelname, Hotel Sterne 11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3… 

Wir werden daran interessiert sein, die Sternebewertung der Hotels für Hotels basierend auf der Korrelation der Anzahl der Hotelbewertungen und der allgemeinen Bewertungen für jedes einzelne Hotel vorherzusagen. Dies ist ein ziemlich ausgefallenes Beispiel, aber einfach genug, um das Konzept des Trainings eines Modells mit darzustellen unkomplizierte Daten. 

Laden Sie die durch Kommas getrennte CSV-Datei in einen neuen Ordner herunter, den Sie für diese Übung verwenden werden. Lassen Sie uns jetzt mit etwas Python die Hände schmutzig machen, um folgendes zu erreichen: 

  • Importieren der erforderlichen Bibliotheken, einschließlich der Python Core ML-Bibliotheken
  • Importieren unserer Beispieldaten
  • Anwendung eines linearen Regressionsalgorithmus auf unsere Daten mithilfe einer Bibliothek namens SciKit
  • Identifizierung der Spalten in den Daten, an denen wir interessiert sind (Nr. Bewertungen, Nr. Hotelbewertungen, Hotelsterne)
  • Identifizieren der Spalte, auf die sie Einfluss haben kann (Ergebnis
  • Umwandlung des trainierten Modells in ein Core ML-Modell

Es scheint, als gäbe es einige Schritte, aber es ist nicht so entmutigend, wie Sie vielleicht denken. Der Python-Code, den wir als Nächstes demonstrieren werden, ist unabhängig von Ihren Sprachkenntnissen nicht schwer zu folgen. 

Zuerst werden wir die erforderlichen Module und Abhängigkeiten einrichten, darunter SciKit, coremltools (offizielle Core ML-Tools von Apple für Python) und Pandas, ein leistungsfähiges Werkzeug für die Datenstrukturanalyse. 

Öffnen Sie ein Terminalfenster, navigieren Sie zu dem Projektordner, in dem sich die CSV-Datei befindet, und geben Sie Folgendes ein:

sudo -H pip install - signore-installierte coremltools scikit-learn pandas

Als Nächstes erstellen Sie mit einem Editor Ihrer Wahl einen neuen .py Datei, und nennen Sie es etwas convert_reviews.py, Fügen Sie die folgenden Zeilen hinzu, um die zu verwendenden Bibliotheken zu importieren:

aus sklearn.linear_model importieren LinearRegression importieren Pandas importieren Coremltools 

Fügen Sie direkt nach den Importanweisungen Folgendes hinzu:

data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) CSV-Dateimodell importieren = LinearRegression () # (2) Lineare Regression anwenden print (data) model.fit (data [["" Nr. reviews.) "," Nr. Hotelbewertungen "," Hotelsterne "]], Daten [" Punkte "]) # (3) Zu extrapolierende Daten

Bisher importieren wir einfach die CSV-Datei mit dem Pandas-Framework, drucken die importierten Daten auf dem Bildschirm aus und verwenden dann das SciKit-Framework, um einen linearen Regressionsalgorithmus für die zu extrapolierenden Spalten festzulegen. 

Machen Sie sich nicht zu viele Gedanken darüber, was ein linearer Regressionsalgorithmus bedeutet, sondern wissen Sie, dass wir eine einfache Modellierungsalgorithmusmethode verwenden, um Vorhersagen zu treffen. In diesem Projekt interessieren wir uns dafür, wie sich dies auf die Bewertung unseres Hotels auswirkt, die wir gerade mit der model.fit Funktion. 

Wir haben jetzt unser geschultes Modell, müssen es aber noch in ein Modell umwandeln, das Core ML konsumieren kann. Hier kommt coremltools ins Spiel. Fügen Sie die folgenden Codezeilen ein:

coreml_model = coremltools.converters.sklearn.convert (Modell, ["Nr. Bewertungen", "Nr. Hotelbewertungen", "Hotel Sterne"], "Punkte") # (4) Konvertieren coreml_model.save ("Vegas_Reviews.mlmodel" ) # (5) Export in ein CoreML-Modellobjekt

Die letzten beiden Zeilen konvertieren Ihr Modell in ein Core ML - kompatibles Modell, bevor Sie das Ergebnis als. Speichern .mlmodel Objekt, das in Ihrem Xcode-Projekt verwendet werden kann. Speichern Sie das Python-Skript und führen Sie es über das Terminal aus:

python convert_reviews.py

Vorausgesetzt, Sie haben keine Fehler festgestellt, die  Vegas_Reviews.mlmodel Es wird eine Datei erstellt und das trainierte Modell für den Import in Xcode vorbereitet. 

Das geschulte Modell integrieren

Für den zweiten Teil dieses Lernprogramms erstellen Sie eine einfache App mit einem einzelnen View-Controller, einigen Schiebereglern und einem Segmentsteuerelement, mit dem Benutzer verschiedene Werte umschalten können, um verschiedene Core ML-Vorhersagen zu beobachten. Die endgültige App sieht in etwa so aus:

Erstellen Sie in Xcode ein neues Einzelansicht App Schnelles Projekt, und geben Sie ihm einen Namen.

Stellen Sie als Nächstes sicher, dass Sie das generierte enthalten haben Vegas_Reviews.mlmodel Datei in Ihrem Projekt, indem Sie sie in Ihr Navigationsprojektfenster ziehen.

Jetzt öffne die ViewController.swift Datei und fügen Sie Folgendes hinzu:

class ViewController: UIViewController let reviews = Vegas_Reviews () @IBOutlet schwach var stackView: UIStackView! @IBOutlet schwache Var scoreValue: UILabel! @IBOutlet schwach var nrReviews: UISlider! @IBOutlet schwach var nrHotelReviews: UISlider! @IBOutlet schwache Var-Sterne: UISegmentedControl!

Als Erstes erstellen Sie eine Instanz unseres Modells, mit der Sie später in der Klasse Vorhersagen treffen können. Sie erstellen auch einige IBOutlet Variablen, die Sie in Kürze in das Storyboard einbinden, die den einzelnen Modelleigenschaften entsprechen, mit denen wir spielen möchten.

Wechseln Sie zum Storyboard, und fügen Sie die entsprechenden Steuerelemente hinzu, die wir in Ihrem View-Controller deklariert haben, und stellen Sie sicher, dass Sie jedes Steuerelement mit dem View-Controller verbinden.

Wechseln Sie wieder in die ViewController.swift Datei und fügen Sie Folgendes hinzu @IBAction Methode: 

@IBAction func makePrediction (_ sender: Any) let nrReviewsSelected = Double (nrReviews.value) let nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSelected: Double switch stars.selectedSegmentIndex case 0: back 3.0 case 2: return 5.0 default: return 5.0 wenn Vorhersagen lassen = versuchen? self.reviews.prediction (nrReviews: nrReviewsAusgewählt, Nr__hotel_reviews: nrHotelReviewsSelected, Hotel_stars: starsSelected) lassen scoreFormatter = NumberFormatter () scoreFormatter.numberStyle = .decimal scoreFormatter.maximumFractionDigits =. Score) else print ("Error")

Dies ist der primäre Funktionscode unseres Vorhersagemoduls. Lassen Sie uns diese Methode Schritt für Schritt analysieren. Wir werfen zuerst die verschiedenen Steuerelemente in die Doppelt Typ, der als Argumente übergeben wird, wenn wir unsere Vorhersagemethode aufrufen. Innerhalb eines Versuchen? blockieren, anrufen self.reviews.prediction (), Dies ist eine automatisch generierte Methode, die zu unserem Modell gehört, zusammen mit den erwarteten Eigenschaften, die wir beim Importieren unseres trainierten Modells definiert haben.

Das Ergebnis des Vorhersageblocks wird dann an das Label übergeben ScoreValue, in Ihrer App anzuzeigen. Wir sind fast fertig - wechseln Sie noch einmal zurück zum Storyboard und ordnen Sie die einzelnen Steuerelemente zu valueChanged: Eigentum an der @IBAction Methode, die wir im View Controller erstellt haben. Sie möchten, dass diese Methode jedes Mal aufgerufen wird, wenn Sie einen Schieberegler oder einen Segmentwert ändern. Sie können auch sicherstellen, dass Sie diese Methode automatisch in Ihrem System aufrufen viewDidLoad () Methode, so dass es von Anfang an aktualisiert wird:

func viewDidLoad () überschreiben super.viewDidLoad () self.makePrediction (self)

Erstellen Sie die App in Xcode und führen Sie sie aus. Schalten Sie im Simulator die verschiedenen Schieberegler um und beobachten Sie die Vorhersage des Score-Werts, wenn sie sich aufgrund der anderen Zuordnungsfaktoren der Anzahl der Hotelbewertungen und -bewertungen im Allgemeinen ändert. 

Wie bereits erwähnt, handelt es sich in der Tat um ein durchdachtes Beispiel, aber Sie erhalten eine Vorstellung davon, wie Sie Ihre eigenen Experimente erstellen und korrelieren können, und vor allem, wie einfach es ist, geschulte Modelle in iOS zu implementieren. 

Fazit

Dank Core ML in iOS 11 hat Apple es den Entwicklern des Alltags leicht gemacht, ohne tiefes Lernen in der Lage zu sein, ihren Apps Intelligenz hinzuzufügen. Die gesamte Verarbeitung erfolgt auf dem Gerät. Dadurch wird eine höhere Leistung sichergestellt, ohne dass die Daten in der Cloud gespeichert werden müssen. Durch die Einführung des maschinellen Lernens von Apple mit integrierten Apps wie Photos und Mail haben Apple-Entwickler nun die Möglichkeit, Muster, Bilder und Textabsichten mit nur wenigen Codezeilen zu erkennen. 

Dies ist zweifellos nur der Anfang von Apples Core-ML-Bewegung, aber es ist eine großartige Gelegenheit für Entwickler, ganzheitlich über Daten nachzudenken. Mit Core ML können wir Benutzern eine bessere Benutzererfahrung bieten und Produktmanagern bessere geschäftliche Einblicke in das Benutzerverhalten geben. 

Während Sie hier sind, lesen Sie einige unserer anderen Beiträge zur Entwicklung von iOS-Apps und zum maschinellen Lernen!