So trainieren Sie ein ML-Kernmodell für eine iOS-App
() translation by (you can also view the original English article)



Mit Core ML können iOS-Entwickler ihren Apps auf einfache Weise tiefgreifendes maschinelles Lernen hinzufügen. In diesem Beitrag zeige ich Ihnen, wie Sie ein Core ML-Modell trainieren können, um intelligente Erkenntnisse abzuleiten.
Maschinelles Lernen war im vergangenen Jahr zweifellos eines der heißesten Themen. Unternehmen aller Art versuchten, ihre Produkte intelligenter zu gestalten, um die Benutzererfahrung zu verbessern und ihre Angebote zu differenzieren. Laut McKinseys State of Machine Learning And AI, 2017, hat Google allein im letzten Jahr zwischen 20 und 30 Milliarden US-Dollar in künstliche Intelligenz investiert.
AI wird zu einem Wettlauf um Patente und geistiges Eigentum (IP) unter den weltweit führenden Technologieunternehmen... Der Bericht nennt viele Beispiele für interne Entwicklungen, einschließlich der Investitionen von Amazon in Robotik und Spracherkennung sowie Salesforce für virtuelle Agenten und maschinelles Lernen. BMW, Tesla und Toyota sind führende Automobilhersteller bei ihren Investitionen in Robotik und maschinelles Lernen für den Einsatz in fahrerlosen Autos. Toyota plant, 1 Mrd. USD in die Einrichtung eines neuen Forschungsinstituts für KI für Robotik und fahrerlose Fahrzeuge zu investieren. (Quelle: Forbes)
Apple ist keine Ausnahme von diesem Trend, da es maschinelles Lernen in seinen eigenen Apps verwendet hat. Beispielsweise kann die Fotos-App für iOS Gesichter, Objekte und Orientierungspunkte erkennen, und Siri leitet Absicht und Bedeutung aus der Sprache ab. Nachrichten für iOS schlagen Wörter intelligent vor und prognostizieren sie basierend auf früheren Benutzerverhalten.
In diesem Lernprogramm erfahren Sie, wie Sie Algorithmen für maschinelles Lernen auf eine Reihe von Trainingsdaten anwenden, um ein trainiertes Modell zu erstellen, das anschließend auf der Grundlage neuer Eingaben Vorhersagen trifft. Alles dank Apples neuem Core ML-Framework.
Ziele dieses Tutorials
Dieses Tutorial führt Sie in eine Teilmenge des maschinellen Lernens ein. Sie trainieren und integrieren ein Modell für maschinelles Lernen in eine einfache iOS-App unter Verwendung eines beliebten Deep-Learning-Algorithmus-Frameworks. In diesem Tutorial werden Sie:
- einige der grundlegenden Konzepte des maschinellen Lernens kennenlernen
- Ihr Modell anhand von Beispieldaten trainieren
- das trainierte Modell in eine iOS-App integrieren
Nachdem wir die Theorie des NLP durchgearbeitet haben, werden wir unser Wissen in die Praxis umsetzen, indem wir über einen einfachen Twitter-Client arbeiten und Tweet-Nachrichten analysieren. Klonen Sie das GitHub-Repo des Tutorials und sehen Sie sich die endgültige Version der App an, die wir von Grund auf neu erstellen werden.
Vorausgesetztes Wissen
In diesem Tutorial wird davon ausgegangen, dass Sie ein erfahrener iOS-Entwickler sind. Obwohl Sie mit maschinellem Lernen arbeiten, benötigen Sie keinen Hintergrund zu diesem Theme. Sie werden ein bisschen Python verwenden, um Ihr trainiertes Modell zu erstellen, aber Sie können das Tutorial-Beispiel ohne vorherige Python-Kenntnisse durchgehen.
Maschinelles Lernen 101
Das Ziel des maschinellen Lernens besteht darin, dass ein Computer Aufgaben erledigt, ohne explizit dafür programmiert zu sein - die Fähigkeit, autonom zu denken oder zu interpretieren. Ein hochkarätiger zeitgenössischer Anwendungsfall ist das autonome Fahren: Autos können ihre Umgebung visuell interpretieren und ohne fremde Hilfe fahren.
Maschinelles Lernen wird heute von großen Unternehmen genutzt, um auf der Grundlage historischer Daten bessere Geschäftsentscheidungen zu treffen, indem mithilfe von Deep-Learning-Algorithmen Muster und Korrelationen identifiziert werden, mit denen sie bessere Vorhersagen für die Zukunft treffen können. Sie können beispielsweise Probleme wie "Wie wahrscheinlich ist es, dass ein bestimmter Kunde ein bestimmtes Produkt oder eine bestimmte Dienstleistung kauft?" mit größerem Vertrauen basierend auf vorherigem Verhalten beheben.
Maschinelles Lernen eignet sich am besten für Probleme, bei denen Sie bereits Antworten erhalten haben. Dies erfahren Sie später in diesem Lernprogramm, wenn wir unser Beispielproblem durchgehen. Ein Beispiel für maschinelles Lernen in Aktion wäre Ihr E-Mail-Spam-Filter, der überwachtes Lernen (wenn Sie Elemente als Spam kennzeichnen oder nicht) verwendet, um Spam im Laufe der Zeit besser zu filtern. Das Modell des maschinellen Lernens codiert all dieses Wissen über vergangene Ergebnisse und stellt es dem Algorithmus zur effizienten Verwendung zur Laufzeit zur Verfügung.
Es mag zunächst alles etwas überwältigend klingen, ist aber nicht kompliziert, und wir werden Sie in Kürze durch die Erstellung eines trainierten Modells führen. Sobald Sie ein trainiertes Modell über einen Algorithmus entwickelt haben, konvertieren Sie es in ein Modell, das dank Core ML von iOS verwendet werden kann.
Core ML ist neu in Apples SDK-Familie, die als Teil von iOS 11 eingeführt wurde, damit Entwickler eine Vielzahl von Modi für maschinelles Lernen und vertiefte Lernen-Ebenentypen implementieren können.



Natural Language Processing (NLP) befindet sich logischerweise innerhalb des Core ML-Frameworks neben zwei weiteren leistungsstarken Bibliotheken, Vision und GameplayKit. Vision bietet Entwicklern die Möglichkeit, maschinelles Lernen in Computer Vision zu implementieren, um beispielsweise Gesichter, Orientierungspunkte oder andere Objekte zu erkennen, während GameplayKit Spielentwicklern Werkzeugs zum Erstellen von Spielen und bestimmten Gameplay-Funktionen bietet.
Die Vorteile von CoreML im Vergleich zu anderen Lösungen bestehen darin, dass Apple das maschinelle Lernen für die Ausführung auf dem Gerät optimiert hat, was einen geringeren Speicherstromverbrauch und eine geringere Latenz bedeutet. Dadurch werden auch Benutzerinformationen im Gerät zusammengefasst, wodurch die Privatsphäre verbessert wird.



Lassen Sie uns die Theorie mit einem Überblick über maschinelles Lernen und Modelle aus der Praxis in die Praxis umsetzen, indem Sie Ihr erstes Trainingsmodell erstellen.
Trainieren Sie Ihr Modell
Damit ein Modell nützlich ist, muss es trainiert werden, um 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:



Je mehr Daten Sie haben, desto besser wird Ihr Modell trainiert 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 werden, und insbesondere auf die Beispieldaten.
Beispiel-App: Las Vegas Hotel Score Predictor
Für dieses Tutorial verwenden wir einen Open-Source-Datensatz zu Hotelbewertungen im Las Vegas Strip, den wir von UCI bezogen haben, um zu veranschaulichen, wie ein Modell trainiert und Korrelationen berechnet werden. Sie können sich den vollständigen Satz der durch Kommas getrennten CSV-Dateien ansehen, die wir in unserer App verwenden werden. Die Struktur der Daten ist wie folgt:
1 |
Nr. reviews, Nr. hotel reviews, Score, Hotel name, Hotel stars |
2 |
11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 |
3 |
119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3 |
4 |
... |
Wir werden daran interessiert sein, die Sternebewertung des 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 ausgeklügeltes Beispiel, aber einfach genug, um das Konzept der einfachen Schulung eines Modells zu veranschaulichen 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 nun mit Python die Hände schmutzig machen, um Folgendes zu erreichen:
- Importieren der erforderlichen Bibliotheken, einschließlich der Python CoreML-Bibliotheken
- Importieren unserer Beispieldaten
- Anwenden eines linearen Regressionsalgorithmus auf unsere Daten unter Verwendung einer Bibliothek namens SciKit
- Identifizieren der Spalten in den Daten, an deren Modellierung wir interessiert sind (Nr. reviews, Nr. hotel reviews, Hotel stars)
- Identifizieren der Spalte, die möglicherweise beeinflusst wird (Score)
- Konvertieren des trainierten Modells in ein CoreML-Modell
Es mag scheinen, 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, wird ungeachtet Ihrer Erfahrung mit der Sprache nicht schwer zu befolgen sein.
Zunächst richten wir unsere erforderlichen Module und Abhängigkeiten ein, darunter SciKit, coremltools Apples offizielle CoreML-Werkzeugs für Python und pandas, ein leistungsstarkes 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 --ignore-installed coremltools scikit-learn pandas
Erstellen Sie als Nächstes mit einem Editor Ihrer Wahl eine neue .py-Datei und nennen Sie sie so etwas wie convert_reviews.py. Fügen Sie die folgenden Zeilen hinzu, um die von Ihnen verwendeten Bibliotheken zu importieren:
1 |
from sklearn.linear_model import LinearRegression |
2 |
import pandas |
3 |
import coremltools |
Fügen Sie direkt nach den Importanweisungen Folgendes hinzu:
1 |
data = pandas.read_csv("LasVegas-Trip-Dataset.csv") #(1) Import CSV file |
2 |
model = LinearRegression() #(2) Apply linear regression |
3 |
print(data) |
4 |
model.fit( |
5 |
data[["Nr. reviews", "Nr. hotel reviews", "Hotel stars"]], data["Score"]) #(3) Data to extrapolate |
Bisher importieren wir einfach die CSV mithilfe des pandas-Frameworks, drucken die importierten Daten auf dem Bildschirm aus und verwenden dann das SciKit-Framework, um einen linearen Regressionsalgorithmus zu erstellen, der auf die Spalten angewendet werden soll, die wir extrapolieren möchten. Machen Sie sich nicht zu viele Gedanken darüber, was ein linearer Regressionsalgorithmus bedeutet, sondern wissen Sie nur, dass wir eine einfache Modellierungsalgorithmus-Technik verwenden, um Vorhersagen zu treffen. In diesem Projekt interessiert uns, wie sich dies auf die Punktzahl unseres Hotels auswirkt, die wir gerade mit der Funktion model.fit
ermittelt haben.
Wir haben jetzt unser geschultes Modell, müssen es jedoch noch in ein Modell konvertieren, das Core ML verwenden kann. Hier kommt coremltools ins Spiel. Fügen Sie die folgenden Codezeilen ein:
1 |
coreml_model = coremltools.converters.sklearn.convert( |
2 |
model, ["Nr. reviews", "Nr. hotel reviews", "Hotel stars"], "Score") #(4) Convert |
3 |
coreml_model.save("Vegas_Reviews.mlmodel") #(5) Export to a CoreML model object |
In den letzten beiden Zeilen wird Ihr Modell in ein Core ML-kompatibles Modell konvertiert, bevor das Ergebnis als .mlmodel-Objekt gespeichert wird, 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, wird die Datei Vegas_Reviews.mlmodel generiert und Ihr trainiertes Modell für den Import in Xcode vorbereitet.
Das trainierte Modell integrieren
Im zweiten Teil dieses Tutorials erstellen Sie eine einfache App mit einem einzelnen Ansichts-Controller, einigen Schiebereglern und einem Segment-Steuerelement, mit dem Benutzer verschiedene Werte umschalten und verschiedene Core ML-Vorhersagen beobachten können. Die endgültige App sieht ungefähr so aus:



Erstellen Sie in Xcode ein neues Single View App Swift-Projekt und geben Sie ihm einen Namen.



Stellen Sie als Nächstes sicher, dass Sie die generierte Datei Vegas_Reviews.mlmodel in Ihr Projekt aufgenommen haben, indem Sie sie in den Bereich Ihres Navigationsprojekts ziehen.



Öffnen Sie nun die Datei ViewController.swift und fügen Sie Folgendes hinzu:
1 |
class ViewController: UIViewController{ |
2 |
let reviews = Vegas_Reviews() |
3 |
|
4 |
@IBOutlet weak var stackView: UIStackView! |
5 |
|
6 |
@IBOutlet weak var scoreValue: UILabel! |
7 |
|
8 |
@IBOutlet weak var nrReviews: UISlider! |
9 |
|
10 |
@IBOutlet weak var nrHotelReviews: UISlider! |
11 |
|
12 |
@IBOutlet weak var stars: 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 im Storyboard verkabeln werden und die den einzelnen Modelleigenschaften zugeordnet sind, mit denen wir herumspielen möchten.
Wechseln Sie zu Storyboard und fügen Sie die entsprechenden Steuerelemente hinzu, die wir in Ihrem Ansichts-Controller deklariert haben. Stellen Sie dabei sicher, dass Sie jedes Steuerelement mit dem Ansichts-Controller verbinden:



Wechseln Sie zurück zur Datei ViewController.swift und fügen Sie die folgende @IBAction
-Methode hinzu:
1 |
@IBAction func makePrediction(_ sender: Any){ |
2 |
let nrReviewsSelected = Double(nrReviews.value) |
3 |
let nrHotelReviewsSelected = Double(nrHotelReviews.value) |
4 |
var starsSelected: Double{ |
5 |
switch stars.selectedSegmentIndex { |
6 |
case 0: |
7 |
return 3.0 |
8 |
case 1: |
9 |
return 4.0 |
10 |
case 2: |
11 |
return 5.0 |
12 |
default: |
13 |
return 5.0 |
14 |
} |
15 |
} |
16 |
|
17 |
if let predictions = try? self.reviews.prediction(Nr__reviews: nrReviewsSelected, Nr__hotel_reviews: nrHotelReviewsSelected, Hotel_stars: starsSelected){ |
18 |
|
19 |
let scoreFormatter = NumberFormatter() |
20 |
scoreFormatter.numberStyle = .decimal |
21 |
scoreFormatter.maximumFractionDigits = 1 |
22 |
self.scoreValue.text = scoreFormatter.string(for: predictions.Score) |
23 |
}else{ |
24 |
print("Error") |
25 |
} |
26 |
} |
Dies ist der primäre Funktionscode unserer Vorhersage-Engine. Lassen Sie uns diese Methode Schritt für Schritt analysieren. Wir wandeln zuerst die verschiedenen Steuerelemente in den Double
-Typ um, der als Argumente übergeben wird, wenn wir unsere Vorhersagemethode aufrufen. Innerhalb eines try
? Block, rufen Sie self.reviews.prediction()
auf, eine automatisch generierte Methode, die zu unserem Modell gehört, zusammen mit den erwarteten Eigenschaften, die wir beim Importieren unseres trainierten Modells definiert hatten.
Das Ergebnis des Vorhersageblocks wird dann an das Label ScoreValue
übergeben, um es in Ihrer App anzuzeigen. Wir sind fast fertig. Wechseln Sie einfach noch einmal zum Storyboard und ordnen Sie die valueChanged:
-Eigenschaft jedes Steuerelements der im View-Controller erstellten @IBAction
-Methode zu. Sie möchten, dass diese Methode jedes Mal aufgerufen wird, wenn Sie einen Schieberegler oder Segmentwert ändern. Und zum guten Teil können Sie auch sicherstellen, dass Sie diese Methode auch automatisch in Ihrer viewDidLoad()
-Methode aufrufen, damit sie von Anfang an aktualisiert wird:
1 |
override func viewDidLoad() { |
2 |
super.viewDidLoad() |
3 |
self.makePrediction(self) |
4 |
} |
Erstellen und führen Sie die App in Xcode aus und schalten Sie im Simulator die verschiedenen Schieberegler um und beobachten Sie die Vorhersage des Score-Werts, wenn sie sich basierend auf den anderen Attributionsfaktoren für die Anzahl der Hotelbewertungen und Bewertungen im Allgemeinen ändert. Wie bereits erwähnt, ist dies in der Tat ein erfundenes Beispiel, aber es gibt Ihnen eine Vorstellung davon, wie Sie Ihre eigenen Experimente erstellen können, um zu korrelieren, und vor allem, wie einfach es ist, trainierte Modelle in iOS zu implementieren.
Abschluss
Dank Core ML in iOS 11 hat Apple es alltäglichen Entwicklern ohne fundierten Hintergrund leicht gemacht, ihren Apps Intelligenz hinzuzufügen. Die gesamte Verarbeitung erfolgt auf dem Gerät, wodurch eine höhere Leistung ohne die Datenschutzbedenken beim Speichern von Daten in der Cloud sichergestellt wird. Da Apple zuvor seine Implementierung für maschinelles Lernen in integrierten Apps wie Fotos und E-Mail als 'Hundefutter' bezeichnet hat, haben Entwickler von Drittanbietern jetzt die Möglichkeit, Muster, Bilder und Textabsichten mit nur wenigen Codezeilen zu erkennen.
Dies ist zweifellos nur der Beginn der Core ML-Bewegung von Apple, aber es ist eine großartige Gelegenheit für Entwickler, ganzheitlicher über Daten nachzudenken. Mit Core ML können wir Benutzern eine bessere Benutzererfahrung bieten und Produktmanagern bessere geschäftliche Einblicke in das Benutzerverhalten bieten.
Während Sie hier sind, lesen Sie einige unserer anderen Beiträge zur Entwicklung von iOS-Apps und zum maschinellen Lernen!