Машинное обучение прекрасно, но его трудно реализовать в мобильных приложениях. Это особенно верно для людей без степени науки данных. Однако с Core ML Apple позволяет легко добавить машинное обучение в существующее приложение iOS. Узнайте, как использовать совершенно новую платформу Create ML для обучения легких, настраиваемых нейронных сетей.
С одного взгляда
Что такое машинное обучение?
Машинное обучение — это использование статистического анализа, чтобы помочь компьютерам принимать решения и делать прогнозы на основе характеристик, найденных в этих данных. Другими словами, это тот факт, что компьютер анализирует поток данных, чтобы сформировать абстрактное понимание (называемое «моделью»), и использует эту модель для сравнения с более новыми данными.
Как это используется?
Многие из ваших любимых приложений на вашем телефоне, вероятно, используют машинное обучение. Например, когда вы печатаете сообщение, автозамена предсказывает, что вы собираетесь набирать дальше, используя модель машинного обучения, которая постоянно обновляется по мере ввода. Кроме того, виртуальные помощники, такие как Siri, Alexa и Google Assistant, полностью зависят от машинного обучения, чтобы имитировать поведение человека.
Начиная
Давайте поэкспериментируем с машинным обучением, построив модель! Вам нужно убедиться, что у вас установлен Xcode 10, а также MacOS Mojave, работающий на вашем Mac. Кроме того, я предполагаю, что у вас уже есть опыт разработки Swift, Xcode и iOS в целом.
Распознавание изображений
Если вы еще этого не сделали, ознакомьтесь с моим другим учебником, в котором вы шаг за шагом проведете обучение модели классификации изображений для использования в вашем приложении. После этого урока вы сможете обучить модель, которая может различать различные сорта растений и породы собак, и которая может точно идентифицировать объекты. Вы можете посмотреть здесь:
1. Набор данных и JSON
Вы можете задаться вопросом: каким будет набор данных в модели классификации текста? Ответ на этот вопрос лежит в вашей цели. Например, если вы хотите обучить модель, которая сообщает вам, является ли строка текста спамом или нет, у вас будет целый набор строк, которые предварительно классифицированы.
Скачивание файла
Чтобы избавить нас от необходимости вручную создавать данные обучения для нашей модели анализа настроений, наши друзья из Университета Карнеги-Мелон предоставили нам замечательный бесплатный набор данных. Я нашел время, чтобы преобразовать его в JSON для вас, чтобы использовать. (Конечно, вы всегда можете использовать свой собственный набор данных, если хотите создать его самостоятельно.)
Загрузите файл JSON с тренировочными данными из нашего репозитория GitHub. Нажмите «Загрузить» и сохраните файл на свой компьютер. (Обратите внимание, что мы отредактировали некоторые оскорбительные выражения в нашей версии этого набора данных. Однако, если вы тренируетесь в системе машинного обучения на производстве, вам нужно будет использовать весь корпус, включая, возможно, оскорбительные комментарии.)
Большой! Теперь, когда он находится на вашем компьютере, давайте внимательнее посмотрим на то, что файл показывает вам.
Рассекая JSON
Если вы еще не знакомы с JSON, это просто. JSON — это аббревиатура для обозначения J ava S cript O bject, и, как следует из названия, он полезен для представления объектов и их соответствующих свойств.
В файле, который вы только что загрузили, вы увидите, что у каждого элемента есть два свойства:
-
label
сообщает вам, является ли указанное предложение или фраза положительным или отрицательным. -
text
— это строка текста, с которой должен быть выполнен анализ.
На некоторых этикетках предметов написано « Pos» , а на некоторых « Neg» . Как вы, возможно, уже догадались, они означают Позитивный и Негативный соответственно.
2. Подготовка данных
Итак, давайте углубимся и на самом деле создадим модель. Вы можете быть удивлены, узнав, что большая часть вашей работы уже выполнена! Теперь все, что нам осталось сделать, это написать некоторый код и заставить Swift и Xcode работать, чтобы творить чудеса для нас.
Создание новой игровой площадки
Хотя большинство из нас привыкли создавать настоящие приложения для iOS, на этот раз мы отправимся на игровую площадку, чтобы создать наши модели машинного обучения. Интересно, не правда ли? Если вы думаете об этом, это действительно имеет смысл — вам не нужны все эти дополнительные файлы, но вместо этого вам просто нужен чистый лист, чтобы сообщить Swift, как создать вашу модель. Начните с создания игровой площадки MacOS.
Сначала откройте Xcode.
Затем создайте новую игровую площадку.
И дать ему полезное имя.
Импорт рамок
Конечно, прежде чем мы начнем, нам нужно импортировать соответствующие фреймворки. Если вы видели мое предыдущее руководство по обучению модели классификации изображений, вы увидите, что наши операторы импорта будут немного отличаться. Почему? Потому что у нас нет пользовательского интерфейса для работы с этим временем — просто чистый код!
Удалите весь стартовый код на детской площадке и введите следующее:
1
2
|
import CreateML
import Foundation
|
Причина, по которой нам понадобится и то и другое, заключается в том, что мы будем использовать URL
чтобы сообщить Create ML, где находится наш набор данных и где мы хотим, чтобы наша результирующая модель была сохранена, а URL
доступен в платформе Foundation
.
Настройка набора данных
Теперь пришло время настроить все данные и подготовить их к обучению модели.
Преобразование JSON в MLDataTable
Прежде всего, нам нужно сообщить Create ML, где он может найти наш файл JSON. В этом примере мой находится в моей папке загрузок , и ваш, вероятно, тоже.
Введите следующую строку кода:
1
|
let dataset = try MLDataTable(contentsOf: URL(fileURLWithPath: «/Users/vardhanagrawal/Downloads/sentiment_analysis.json»))
|
Однако вам нужно убедиться, что ваш параметр fileURLWithPath
установлен там, где живет ваш файл JSON, а не там, где мой. Здесь мы создаем таблицу данных, используя информацию, содержащуюся в предоставленном файле JSON, и сохраняем ее в константе, называемой dataset
.
Разделение данных
Как я уже упоминал в Обучении модели классификации изображений с помощью Create ML , хорошей практикой является разделение ваших наборов данных на две категории: одну для обучения модели и одну для тестирования. Поскольку вы хотите уделять больше внимания своей фактической модели, 80% вашего набора данных следует использовать для обучения, а остальные 20% вы должны сэкономить, чтобы убедиться, что все работает как надо. В конце концов, это тоже важно!
Если вы видели предыдущий учебник, вам может показаться, что эта концепция знакома. Это просто включено сюда на случай, если вы этого не сделали. По сути, мы будем randomSplit(by:seed:)
данные с помощью randomSplit(by:seed:)
из MLDataTable
.
Вставьте следующую строку кода на игровую площадку:
1
|
let (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 5)
|
Просматривая документацию, randomSplit(by:seed:)
возвращает кортеж, который содержит две MLDataTables
. Мы будем хранить их как (trainingData, testingData)
, поместив 80% набора данных в trainingData
и 20% в testingData
.
3. Обучение и тестирование
Теперь, когда все ваши данные настроены и готовы, пришло время, наконец, обучить их и протестировать полученную модель.
Метаданные
Хотите верьте, хотите нет, но обучение — это самая легкая часть всего процесса. Во-первых, вам нужно определить метаданные, используя MLModelMetadata
. Вы можете сделать это, написав следующую строку кода:
1
|
let metadata = MLModelMetadata(author: «Vardhan Agrawal», shortDescription: «This model analyzes the sentiment of a given string.», version: «1.0»)
|
Здесь вы можете указать свое имя как author
, полезное description
, а также номер version
. Эти данные будут показаны при предварительном просмотре модели в Xcode.
Обучение и написание
Теперь вам нужно создать классификатор из набора данных. Вам нужно будет ввести следующую строку кода:
1
|
let sentimentAnalysisClassifier = try MLTextClassifier(trainingData: trainingData, textColumn: «text», labelColumn: «label»)
|
Это использует ключевое слово try
чтобы попытаться создать экземпляр MLTextClassifier
и сообщает ему, что текстовый столбец называется "text"
а столбец метки — "label"
. Это относится к именам полей, присутствующим в нашем файле JSON.
Наконец, вам нужно написать классификатор в папку на вашем компьютере. Место, которое вы выберете для этого шага, — это место, где вы найдете файл .mlmodel, если все пройдет гладко. Введите следующие строки кода:
1
2
3
4
5
6
7
|
do {
try sentimentAnalysisClassifier.write(to: URL(fileURLWithPath:
«/Users/vardhanagrawal/Desktop/SpamDetector.mlmodel»),
metadata: metadata)
} catch {
print(«Something went wrong, please try again!»)
}
|
Мы упаковываем метод write(to:)
в блок do-catch, чтобы знать, если что-то пойдет не так. В качестве альтернативы, вы можете просто сказать try
и затем вызвать этот метод, поскольку оба способа работают. Не забывайте, что на вашем компьютере, скорее всего, нет пользователя с именем vardhanagrawal
, поэтому обязательно измените путь к файлу в том месте, куда вы хотите сохранить свою модель машинного обучения.
Тестирование модели
После того, как вы закончите тренировку, вы увидите некоторые результаты в консоли вашей игровой площадки. Это будет выглядеть примерно так:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
Parsing JSON records from /Users/vardhanagrawal/Downloads/sentiment_analysis.json
Successfully parsed 479 elements from the JSON file /Users/vardhanagrawal/Downloads/sentiment_analysis.json
Automatically generating validation set from 5% of the data.
Tokenizing data and extracting features
50% complete
100% complete
Starting MaxEnt training with 360 samples
Iteration 1 training accuracy 0.341667
Iteration 2 training accuracy 0.858333
Iteration 3 training accuracy 0.991667
Iteration 4 training accuracy 0.994444
Finished MaxEnt training in 0.01 seconds
Trained model successfully saved at /Users/vardhanagrawal/Desktop/SpamDetector.mlmodel.
|
По сути, это говорит о том, что он проанализировал данные из вашего файла JSON, обучил их с определенной точностью и сохранил вашу модель в указанном месте. Так как вы уже отдали часть набора данных для обучения ранее, модель уже сообщает вам точность в этом фрагменте консоли.
В проекте Xcode все, что вам нужно сделать, это перетащить модель и ввести следующие строки кода, чтобы получить выходные данные из вашей модели:
1
2
3
4
5
6
|
import NaturalLanguage
let sentimentAnalysisClassifier = try NLModel(mlModel:
SentimentClassifier().model)
sentimentAnalysisClassifier.predictedLabel(for:
«It was the best I’ve ever seen!»)
|
Это позволит вам протестировать вашу модель и использовать ее в своих приложениях.
Вывод
В этом руководстве вы узнали, как импортировать файл JSON, создать собственный классификатор текста, а затем использовать его в проектах Xcode. Чтобы узнать больше об этой теме и просмотреть то, что вы узнали здесь, я рекомендую ознакомиться с документацией Apple .
И пока вы здесь, ознакомьтесь с другими нашими замечательными материалами по машинному обучению здесь, на Envato Tuts +!