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

1. Обзор

текст-классификация-результат.png

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

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

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

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

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

  • Обучайте модели анализа настроений TF Lite с помощью TF Lite Model Maker
  • Развертывайте модели TF Lite в Firebase ML и получайте к ним доступ из своего приложения
  • Интегрируйте модели анализа настроений TF Lite в свое приложение с помощью библиотеки задач TF Lite

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

  • Последняя версия Android Studio .
  • Пример кода.
  • Тестовое устройство с Android 5.0+ и сервисами Google Play 9.8 или более поздней версии или эмулятор с сервисами Google Play 9.8 или более поздней версии
  • При использовании устройства — соединительный кабель.

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

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

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

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

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

Клонируйте репозиторий GitHub из командной строки.

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

Если у вас не установлен git, вы также можете загрузить пример проекта со страницы GitHub или перейдя по этой ссылке .

3. Импортируйте стартовое приложение.

В Android Studio выберите каталог codelab-textclassification-android-master ( android_studio_folder.png ) из примера загрузки кода ( Файл > Открыть > .../codelab-textclassification-android-master/start).

Теперь у вас должен быть открыт стартовый проект в Android Studio.

4. Запустите стартовое приложение.

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

Приложение должно запуститься на вашем устройстве. Оно содержит только простой пользовательский интерфейс, который упрощает интеграцию и тестирование моделей классификации текста на следующих этапах. На этом этапе, если вы попытаетесь предсказать тональность текста, приложение выдаст лишь некоторые фиктивные результаты.

2fb4e69fafb2e3ed.png

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

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

  1. Перейдите в консоль Firebase .
  2. Выберите Добавить проект .
  3. Выберите или введите название проекта.
  4. Выполните оставшиеся шаги по настройке в консоли Firebase, затем нажмите «Создать проект» (или «Добавить Firebase», если вы используете существующий проект Google).

6. Добавьте Firebase в приложение.

  1. На обзорном экране нового проекта щелкните значок Android, чтобы запустить рабочий процесс настройки.
  2. Введите имя пакета лабораторной работы: org.tensorflow.lite.codelabs.textclassification

Добавьте файл google-services.json в свое приложение

После добавления имени пакета и выбора Register** нажмите Download google-services.json**, чтобы получить файл конфигурации Firebase Android, затем скопируйте файл google-services.json в каталог * app * вашего проекта.

Добавьте плагин google-services в свое приложение

Следуйте инструкциям в консоли Firebase по обновлению файлов build.gradle.kts , чтобы добавить Firebase в свое приложение.

Плагин google-services использует файл google-services.json для настройки вашего приложения для использования Firebase.

Синхронизируйте свой проект с файлами Gradle

Чтобы убедиться, что все зависимости доступны вашему приложению, на этом этапе необходимо синхронизировать проект с файлами Gradle. Выберите «Файл» > «Синхронизировать проект с файлами Gradle» на панели инструментов Android Studio.

7. Запустите приложение с помощью Firebase.

Теперь, когда вы настроили плагин google-services с помощью JSON-файла, вы готовы запустить приложение в Firebase. Подключите устройство Android и нажмите «Запустить» ( выполнить.png ) на панели инструментов Android Studio.

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

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

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

Этот шаг представлен в виде блокнота Python, который можно открыть в Google Colab. Чтобы выполнить все блокноты одновременно, выберите «Среда выполнения» > «Запустить все» .

Открыть в Colab

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

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

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

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

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

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

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

3c3c50e6ef12b3b.png

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

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

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

В файле app/build.gradle.kts добавьте зависимость Firebase Machine Learning.

app/build.gradle.kts

Найдите этот комментарий:

// TODO 1: Add Firebase ML dependency

Затем добавьте:

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

Когда Android Studio предложит синхронизировать ваш проект, выберите Синхронизировать сейчас .

Затем давайте добавим код для загрузки модели из Firebase.

MainActivity.java

Найдите этот комментарий:

// TODO 2: Implement a method to download TFLite model from Firebase

Затем добавьте:

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

Затем вызовите метод downloadModel в методе onCreate действия.

MainActivity.java

Найдите этот комментарий:

// TODO 3: Call the method to download TFLite model

Затем добавьте:

downloadModel("sentiment_analysis");

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

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

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

Перейдите в файл Gradle приложения и добавьте библиотеку задач TensorFlow Lite (текст) в зависимости приложения.

приложение/build.gradle

Найдите этот комментарий:

// TODO 4: Add TFLite Task API (Text) dependency

Затем добавьте:

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

Когда Android Studio предложит синхронизировать ваш проект, выберите Синхронизировать сейчас .

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

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

MainActivity.java

Давайте объявим переменную экземпляра NLClassifier. Найдите этот комментарий:

// TODO 5: Define a NLClassifier variable

Затем добавьте:

private NLClassifier textClassifier;

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

// TODO 6: Initialize a TextClassifier with the downloaded model

Затем добавьте:

textClassifier = NLClassifier.createFromFile(model.getFile());

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

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

MainActivity.java

Найдите этот комментарий:

// TODO 7: Run sentiment analysis on the input text

Затем добавьте:

List<Category> results = textClassifier.classify(text);

Реализовать постобработку

Наконец, мы преобразуем выходные данные модели в описательный текст для отображения на экране.

MainActivity.java

Найдите этот комментарий:

// TODO 8: Convert the result to a human-readable text

Удалите код, который генерирует фиктивный текст результата:

String textToShow = "Dummy classification result.\n";

Затем добавьте:

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

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

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

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

img/text-classification-result.png

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

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

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

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

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

В этой практической работе вы узнали, как обучить модель анализа тональности 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.

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

Есть вопрос?

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