Добавьте классификацию текста на устройстве в свое приложение с помощью TensorFlow Lite и Firebase — iOS Codelab

1. Обзор

classification_result_screen.png

Добро пожаловать на практическое занятие по классификации текста с использованием TensorFlow Lite и Firebase. В этом практическом занятии вы узнаете, как использовать TensorFlow Lite и Firebase для обучения и развертывания модели классификации текста в вашем приложении. Практикум основан на этом примере TensorFlow Lite.

Классификация текста — это процесс присвоения тексту тегов или категорий в соответствии с его содержанием. Это одна из фундаментальных задач обработки естественного языка (NLP), имеющая широкое применение, например, анализ тональности текста, маркировка тем, обнаружение спама и определение намерений.

Анализ тональности — это интерпретация и классификация эмоций (положительных, отрицательных и нейтральных) в текстовых данных с использованием методов анализа текста. Анализ тональности позволяет компаниям определять отношение клиентов к продуктам, брендам или услугам в онлайн-общении и отзывах.

В этом руководстве показано, как построить модель машинного обучения для анализа тональности текста, в частности, для классификации текста на позитивный и негативный. Это пример бинарной (или двухклассовой) классификации — важной и широко применяемой задачи машинного обучения.

Чему вы научитесь

  • Обучите модель анализа настроений TF Lite с помощью TF Lite Model Maker
  • Развертывайте модели TF Lite в Firebase ML и получайте к ним доступ из своего приложения
  • Отслеживайте отзывы пользователей для измерения точности модели с помощью Firebase Analytics
  • Производительность модели профиля с помощью Firebase Performance Monitoring
  • Выберите, какая из нескольких развернутых моделей будет загружена через Remote Config.
  • Экспериментируйте с различными моделями с помощью A/B-тестирования Firebase

Что вам понадобится

  • Xcode 11 (или выше)
  • CocoaPods 1.9.1 (или выше)

Как вы будете использовать это руководство?

Прочитайте это только до конца Прочитайте и выполните упражнения.

Как бы вы оценили свой опыт создания приложений для Android?

Новичок Средний Опытный

2. Создайте консольный проект Firebase.

Добавить Firebase в проект

  1. Перейдите в консоль Firebase .
  2. Выберите «Создать новый проект» и назовите свой проект «Firebase ML iOS Codelab».

3. Получите пример проекта

Загрузить код

Начните с клонирования примера проекта и запуска pod update в каталоге проекта:

git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git
cd codelab-textclassification-ios
pod install --repo-update

Если у вас не установлен Git, вы также можете скачать пример проекта со страницы GitHub или по этой ссылке . После загрузки проекта запустите его в Xcode и поэкспериментируйте с классификацией текста, чтобы понять, как это работает.

Настройте Firebase

Следуйте документации , чтобы создать новый проект Firebase. После этого скачайте файл GoogleService-Info.plist из консоли Firebase и перетащите его в корень проекта Xcode.

9efb62a92f27e939.png

Добавьте Firebase в свой Podfile и запустите pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

В методе didFinishLaunchingWithOptions вашего AppDelegate импортируйте Firebase в начало файла.

import FirebaseCore

И добавьте вызов для настройки Firebase.

FirebaseApp.configure()

Запустите проект еще раз, чтобы убедиться, что приложение настроено правильно и не дает сбоев при запуске.

4. Обучите модель анализа настроений

Мы будем использовать TensorFlow Lite Model Maker для обучения модели классификации текста с целью прогнозирования тональности заданного текста.

Этот шаг представлен в виде блокнота Python, который можно открыть в Google Colab.

Открыть в Colab

После завершения этого шага у вас будет модель анализа настроений TensorFlow Lite, готовая к развертыванию в мобильном приложении.

5. Развертывание модели в Firebase ML

Развертывание модели в Firebase ML полезно по двум основным причинам:

  1. Мы можем сохранить небольшой размер устанавливаемого приложения и загружать модель только при необходимости.
  2. Модель может обновляться регулярно и с другим циклом выпуска, чем все приложение.

Модель можно развернуть как через консоль, так и программно, используя Firebase Admin SDK. На этом этапе мы развернём её через консоль.

Сначала откройте консоль Firebase и выберите «Машинное обучение» на левой навигационной панели. Если вы открываете её впервые, нажмите «Начать». Затем перейдите в раздел «Пользовательская настройка» и нажмите кнопку «Добавить модель».

При появлении запроса назовите модель sentiment_analysis и загрузите файл, который вы скачали из Colab на предыдущем шаге.

3c3c50e6ef12b3b.png

6. Загрузите модель из Firebase ML

Выбор момента загрузки удалённой модели из Firebase в ваше приложение может быть сложным, поскольку модели TFLite могут стать относительно большими. В идеале мы хотим избежать загрузки модели сразу после запуска приложения, поскольку если наша модель используется только для одной функции, и пользователь никогда ею не пользуется, мы загрузим значительный объём данных без причины. Мы также можем настроить параметры загрузки, например, загружать модели только при подключении к Wi-Fi. Если вы хотите, чтобы модель была доступна даже без подключения к сети, важно также включить её в пакет без приложения в качестве резервной копии.

Для простоты мы удалим стандартную встроенную модель и всегда будем загружать модель из Firebase при первом запуске приложения. Таким образом, при анализе тональности вы будете уверены, что вывод выполняется с использованием модели, предоставленной Firebase.

В верхней части ModelLoader.swift импортируйте модуль Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Затем реализуйте следующие методы.

static func downloadModel(named name: String,
                          completion: @escaping (CustomModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }
  let conditions = ModelDownloadConditions(allowsCellularAccess: false)
  ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
          switch (result) {
          case .success(let customModel):
                  // Download complete.
                  // The CustomModel object contains the local path of the model file,
                  // which you can use to instantiate a TensorFlow Lite classifier.
                  return completion(customModel, nil)
          case .failure(let error):
              // Download was unsuccessful. Notify error message.
            completion(nil, .downloadFailed(underlyingError: error))
          }
  }
}

В viewDidLoad ViewController.swift замените вызов loadModel() нашим новым методом загрузки модели.

// Download the model from Firebase
print("Fetching model...")
ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in
  guard let customModel = customModel else {
    if let error = error {
      print(error)
    }
    return
  }

  print("Model download complete")

  // TODO: Initialize an NLClassifier from the downloaded model
}

Перезапустите приложение. Через несколько секунд вы увидите сообщение в Xcode, подтверждающее успешную загрузку удалённой модели. Попробуйте ввести текст и убедитесь, что поведение приложения не изменилось.

7. Интегрируйте модель в свое приложение.

Библиотека задач Tensorflow Lite позволяет интегрировать модели TensorFlow Lite в ваше приложение всего несколькими строками кода. Мы инициализируем экземпляр TFLNLClassifier , используя модель TensorFlow Lite, загруженную из Firebase. Затем мы используем её для классификации текста, вводимого пользователями приложения, и отображения результата в пользовательском интерфейсе.

Добавить зависимость

Перейдите в Podfile приложения и добавьте библиотеку задач TensorFlow Lite (Text) в зависимости приложения. Убедитесь, что вы добавили зависимость под объявлением target 'TextClassification' .

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

Запустите pod install , чтобы установить новую зависимость.

Инициализировать текстовый классификатор

Затем мы загрузим модель анализа настроений, загруженную из Firebase, с помощью NLClassifier из библиотеки задач.

ViewController.swift

Давайте объявим переменную экземпляра TFLNLClassifier. В начале файла импортируем новую зависимость:

import TensorFlowLiteTaskText

Найдите этот комментарий над методом, который мы изменили на последнем шаге:

// TODO: Add a TFLNLClassifier property.

Замените TODO следующим кодом:

private var classifier: TFLNLClassifier?

Инициализируйте переменную textClassifier , используя модель анализа тональности, скачанную из Firebase. Найдите этот комментарий, который мы добавили на предыдущем шаге:

// TODO: Initialize an NLClassifier from the downloaded model

Замените TODO следующим кодом:

let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)

Классифицировать текст

После настройки экземпляра classifier вы можете запустить анализ настроений с помощью одного вызова метода.

ViewController.swift

В методе classify(text:) найдите комментарий TODO:

// TODO: Run sentiment analysis on the input text

Замените комментарий следующим кодом:

guard let classifier = self.classifier else { return }

// Classify the text
let classifierResults = classifier.classify(text: text)

// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)

8. Запустите финальное приложение.

Вы интегрировали модель анализа настроений в приложение, теперь давайте протестируем её. Подключите устройство iOS и нажмите « Запустить» ( выполнить.png ) на панели инструментов Xcode.

Приложение должно уметь правильно предсказывать тон введенной вами рецензии на фильм.

classification_result_screen.png

9. Расширьте возможности приложения, добавив больше функций Firebase

Помимо размещения моделей TFLite, Firebase предоставляет ряд других функций для расширения возможностей использования машинного обучения:

  • Мониторинг производительности Firebase для измерения скорости вывода модели, работающей на устройстве пользователя.
  • Firebase Analytics для оценки эффективности вашей модели в производственной среде путем измерения реакции пользователей.
  • A/B-тестирование Firebase для проверки нескольких версий вашей модели
  • Помните, мы ранее обучили две версии нашей модели TFLite? A/B-тестирование — хороший способ выяснить, какая версия работает лучше в продакшене!

Чтобы узнать больше о том, как использовать эти функции в своем приложении, ознакомьтесь с приведенными ниже практическими занятиями:

10. Поздравляем!

В этой практической работе вы узнали, как обучить модель анализа тональности TFLite и развернуть её в мобильном приложении с помощью Firebase. Чтобы узнать больше о TFLite и Firebase, ознакомьтесь с другими примерами TFLite и руководствами по началу работы с Firebase.

Что мы рассмотрели

  • TensorFlow Lite
  • Firebase ML

Следующие шаги

  • Измерьте скорость вывода модели с помощью Firebase Performance Monitoring.
  • Разверните модель из Colab непосредственно в Firebase через API управления моделями Firebase ML.
  • Добавьте механизм, позволяющий пользователям оставлять отзывы о результатах прогнозирования, и используйте Firebase Analytics для отслеживания отзывов пользователей.
  • A/B-тестирование модели Average Word Vector и модели MobileBERT с помощью A/B-тестирования Firebase.

Узнать больше

Есть вопрос?

Сообщить о проблемах