Статьи

Обучите модель классификации текста с помощью Create ML

Машинное обучение прекрасно, но его трудно реализовать в мобильных приложениях. Это особенно верно для людей без степени науки данных. Однако с Core ML Apple позволяет легко добавить машинное обучение в существующее приложение iOS. Узнайте, как использовать совершенно новую платформу Create ML для обучения легких, настраиваемых нейронных сетей.

Машинное обучение — это использование статистического анализа, чтобы помочь компьютерам принимать решения и делать прогнозы на основе характеристик, найденных в этих данных. Другими словами, это тот факт, что компьютер анализирует поток данных, чтобы сформировать абстрактное понимание (называемое «моделью»), и использует эту модель для сравнения с более новыми данными.

Многие из ваших любимых приложений на вашем телефоне, вероятно, используют машинное обучение. Например, когда вы печатаете сообщение, автозамена предсказывает, что вы собираетесь набирать дальше, используя модель машинного обучения, которая постоянно обновляется по мере ввода. Кроме того, виртуальные помощники, такие как Siri, Alexa и Google Assistant, полностью зависят от машинного обучения, чтобы имитировать поведение человека.

Давайте поэкспериментируем с машинным обучением, построив модель! Вам нужно убедиться, что у вас установлен Xcode 10, а также MacOS Mojave, работающий на вашем Mac. Кроме того, я предполагаю, что у вас уже есть опыт разработки Swift, Xcode и iOS в целом.

Если вы еще этого не сделали, ознакомьтесь с моим другим учебником, в котором вы шаг за шагом проведете обучение модели классификации изображений для использования в вашем приложении. После этого урока вы сможете обучить модель, которая может различать различные сорта растений и породы собак, и которая может точно идентифицировать объекты. Вы можете посмотреть здесь:

  • Обучение модели классификации изображений с помощью Create ML

Вы можете задаться вопросом: каким будет набор данных в модели классификации текста? Ответ на этот вопрос лежит в вашей цели. Например, если вы хотите обучить модель, которая сообщает вам, является ли строка текста спамом или нет, у вас будет целый набор строк, которые предварительно классифицированы.

Чтобы избавить нас от необходимости вручную создавать данные обучения для нашей модели анализа настроений, наши друзья из Университета Карнеги-Мелон предоставили нам замечательный бесплатный набор данных. Я нашел время, чтобы преобразовать его в JSON для вас, чтобы использовать. (Конечно, вы всегда можете использовать свой собственный набор данных, если хотите создать его самостоятельно.)

Загрузите файл JSON с тренировочными данными из нашего репозитория GitHub. Нажмите «Загрузить» и сохраните файл на свой компьютер. (Обратите внимание, что мы отредактировали некоторые оскорбительные выражения в нашей версии этого набора данных. Однако, если вы тренируетесь в системе машинного обучения на производстве, вам нужно будет использовать весь корпус, включая, возможно, оскорбительные комментарии.)

Большой! Теперь, когда он находится на вашем компьютере, давайте внимательнее посмотрим на то, что файл показывает вам.

Если вы еще не знакомы с JSON, это просто. JSON — это аббревиатура для обозначения J ava S cript O bject, и, как следует из названия, он полезен для представления объектов и их соответствующих свойств.

В файле, который вы только что загрузили, вы увидите, что у каждого элемента есть два свойства:

  • label сообщает вам, является ли указанное предложение или фраза положительным или отрицательным.
  • text — это строка текста, с которой должен быть выполнен анализ.

На некоторых этикетках предметов написано « Pos» , а на некоторых « Neg» . Как вы, возможно, уже догадались, они означают Позитивный и Негативный соответственно.

Итак, давайте углубимся и на самом деле создадим модель. Вы можете быть удивлены, узнав, что большая часть вашей работы уже выполнена! Теперь все, что нам осталось сделать, это написать некоторый код и заставить Swift и Xcode работать, чтобы творить чудеса для нас.

Хотя большинство из нас привыкли создавать настоящие приложения для iOS, на этот раз мы отправимся на игровую площадку, чтобы создать наши модели машинного обучения. Интересно, не правда ли? Если вы думаете об этом, это действительно имеет смысл — вам не нужны все эти дополнительные файлы, но вместо этого вам просто нужен чистый лист, чтобы сообщить Swift, как создать вашу модель. Начните с создания игровой площадки MacOS.

Сначала откройте Xcode.

Рисунок 2 Откройте Xcode

Затем создайте новую игровую площадку.

Рисунок 3 Создание игровой площадки

И дать ему полезное имя.

Рисунок 4: Наименование игровой площадки

Конечно, прежде чем мы начнем, нам нужно импортировать соответствующие фреймворки. Если вы видели мое предыдущее руководство по обучению модели классификации изображений, вы увидите, что наши операторы импорта будут немного отличаться. Почему? Потому что у нас нет пользовательского интерфейса для работы с этим временем — просто чистый код!

Удалите весь стартовый код на детской площадке и введите следующее:

1
2
import CreateML
import Foundation

Причина, по которой нам понадобится и то и другое, заключается в том, что мы будем использовать URL чтобы сообщить Create ML, где находится наш набор данных и где мы хотим, чтобы наша результирующая модель была сохранена, а URL доступен в платформе Foundation .

Теперь пришло время настроить все данные и подготовить их к обучению модели.

Прежде всего, нам нужно сообщить 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 .

Теперь, когда все ваши данные настроены и готовы, пришло время, наконец, обучить их и протестировать полученную модель.

Хотите верьте, хотите нет, но обучение — это самая легкая часть всего процесса. Во-первых, вам нужно определить метаданные, используя 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 +!