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

1. Обзор

текст-классификация-result.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 в свое приложение.

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

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

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

Открыть в Колабе

После завершения этого шага у вас будет модель анализа настроений 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.

приложение/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 позволяет оценить, насколько хорошо ваша модель работает в рабочей среде, путем измерения реакции пользователя.
  • Firebase A/B-тестирование для тестирования нескольких версий вашей модели.
  • Помните, ранее мы обучали две версии нашей модели TFLite? A/B-тестирование — хороший способ узнать, какая версия лучше работает в рабочей среде!

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

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

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

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

  • ТензорФлоу Лайт
  • Firebase ML

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

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

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

Есть вопрос?

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