Dodawanie klasyfikacji tekstu na urządzeniu za pomocą TensorFlow Lite i Firebase – ćwiczenia z programowania na Androida

1. Omówienie

text-classification-result.png

Witamy w codelab do klasyfikacji tekstu za pomocą TensorFlow Lite i Firebase. Z tego ćwiczenia w Codelabs dowiesz się, jak za pomocą TensorFlow Lite i Firebase wytrenować i wdrożyć w aplikacji model klasyfikacji tekstu. To ćwiczenie w Codelabs opiera się na tym przykładzie TensorFlow Lite.

Klasyfikacja tekstu to proces przypisywania tagów lub kategorii do tekstu na podstawie jego treści. To jedno z podstawowych zadań przetwarzania języka naturalnego (NLP), które ma szerokie zastosowania, takie jak analiza nastawienia, oznaczanie tematów, wykrywanie spamu i wykrywanie intencji.

Analiza nastawienia polega na interpretacji i klasyfikacji emocji (pozytywnych, negatywnych i neutralnych) w danych tekstowych za pomocą technik analizy tekstu. Analiza sentymentu pozwala firmom identyfikować nastroje klientów wobec produktów, marek lub usług w konwersacjach i opiniach online.

Z tego samouczka dowiesz się, jak utworzyć model systemów uczących się do analizy nastawienia, a w szczególności na klasyfikowanie tekstu jako pozytywnego lub negatywnego. To przykład klasyfikacji binarnej (czyli dwuklasowej), która jest ważnym i powszechnie stosowanym rodzajem problemu uczenia maszynowego.

Czego się nauczysz

  • Trenowanie modeli analizy nastroju TF Lite za pomocą narzędzia TF Lite Model Maker
  • Wdrażanie modeli TF Lite w Firebase ML i uzyskiwanie do nich dostępu z aplikacji
  • Integrowanie modeli analizy sentymentu TF Lite z aplikacją za pomocą biblioteki zadań TF Lite

Czego potrzebujesz

  • Najnowsza wersja Android Studio.
  • Przykładowy kod.
  • urządzenie testowe z Androidem w wersji 5.0 lub nowszej i Usługami Google Play w wersji 9.8 lub nowszej albo emulator z Usługami Google Play w wersji 9.8 lub nowszej;
  • Jeśli używasz urządzenia, potrzebny będzie kabel.

Jak będziesz korzystać z tego samouczka?

Tylko do przeczytania Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz tworzenie aplikacji na Androida?

Początkujący Średnio zaawansowany Zaawansowany

2. Pobieranie przykładowego kodu

Sklonuj repozytorium GitHub z poziomu wiersza poleceń.

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

Jeśli nie masz zainstalowanego git, możesz też pobrać przykładowy projekt ze strony GitHuba lub kliknąć ten link.

3. Zaimportuj aplikację startową

W Android Studio wybierz katalog codelab-textclassification-android-master (android_studio_folder.png) z pobierania przykładowego kodu (Plik > Otwórz > .../codelab-textclassification-android-master/start).

Projekt startowy powinien być teraz otwarty w Android Studio.

4. Uruchom aplikację startową

Po zaimportowaniu projektu do Android Studio możesz uruchomić aplikację po raz pierwszy. Podłącz urządzenie z Androidem i kliknij Uruchom ( Wykonaj.png) na pasku narzędzi Android Studio.

Aplikacja powinna się uruchomić na urządzeniu. Zawiera ono tylko prosty interfejs, który ułatwia integrację i testowanie modeli klasyfikacji tekstu w kolejnych krokach. Jeśli w tym momencie spróbujesz przewidzieć nastroje, aplikacja zwróci tylko kilka pustych wyników.

2fb4e69fafb2e3ed.png

5. Utwórz projekt konsoli Firebase

Dodaj Firebase do projektu

  1. Otwórz konsolę Firebase.
  2. Kliknij Dodaj projekt.
  3. Wybierz lub wpisz nazwę projektu.
  4. Wykonaj pozostałe kroki konfiguracji w konsoli Firebase, a następnie kliknij Utwórz projekt (lub Dodaj Firebase, jeśli używasz istniejącego projektu Google).

6. Dodaj Firebase do aplikacji

  1. Na ekranie podglądu nowego projektu kliknij ikonę Androida, aby uruchomić proces konfiguracji.
  2. Wpisz nazwę pakietu ćwiczeń z programowania: org.tensorflow.lite.codelabs.textclassification

Dodawanie do aplikacji pliku google-services.json

Po dodaniu nazwy pakietu i wybraniu opcji Zarejestruj** kliknij Pobierz plik google-services.json**, aby pobrać plik konfiguracji Firebase na Androida, a następnie skopiuj plik google-services.json do katalogu *app* w projekcie.

Dodaj wtyczkę google-services do swojej aplikacji

Postępuj zgodnie z instrukcjami w konsoli Firebase, aby zaktualizować pliki build.gradle.kts, aby dodać Firebase do swojej aplikacji.

Wtyczka google-services wykorzystuje plik google-services.json do skonfigurowania aplikacji pod kątem użycia Firebase.

Synchronizowanie projektu z plikami Gradle

Aby mieć pewność, że wszystkie zależności są dostępne dla aplikacji, na tym etapie zsynchronizuj projekt z plikami Gradle. Na pasku narzędzi Android Studio kliknij Plik > Synchronizuj projekt z plikami Gradle.

7. Uruchamianie aplikacji za pomocą Firebase

Po skonfigurowaniu wtyczki google-services w pliku JSON możesz uruchomić aplikację za pomocą Firebase. Podłącz urządzenie z Androidem i kliknij Uruchom ( Wykonaj.png) na pasku narzędzi Android Studio.

Aplikacja powinna się uruchomić na urządzeniu. W tej chwili kompilacja aplikacji powinna się udać.

8. Trenowanie modelu analizy nastroju

Za pomocą Kreatora modeli TensorFlow Lite wytrenujemy model klasyfikacji tekstu do prognozowania nastawienia dotyczącego danego tekstu.

Ten krok jest prezentowany w postaci notatnika w języku Python, który możesz otworzyć w Google Colab. Jako Środowisko wykonawcze > Uruchom wszystko, aby uruchomić wszystkie notatniki jednocześnie.

Otwórz w Colab

Po ukończeniu tego kroku otrzymasz model analizy nastawienia TensorFlow Lite, który możesz wdrożyć w aplikacji mobilnej.

9. Wdrażanie modelu w Firebase ML

Wdrożenie modelu w Firebase ML jest przydatne z 2 głównych powodów:

  1. Rozmiar instalowany aplikacji może być niewielki i pobieramy model tylko w razie potrzeby.
  2. Model można aktualizować regularnie i z innym cyklem niż cała aplikacja.

Model można wdrożyć w konsoli lub programowo za pomocą pakietu Firebase Admin SDK. W tym kroku przeprowadzimy wdrożenie za pomocą konsoli.

Najpierw otwórz konsolę Firebase i w panelu użytkownika po lewej stronie kliknij Systemy uczące się. Kliknij „Rozpocznij”. jeśli otwierasz tę aplikację po raz pierwszy. Następnie przejdź do sekcji „Niestandardowe” i kliknij przycisk „Dodaj model”.

Gdy pojawi się prośba, nadaj modelowi nazwę sentiment_analysis i prześlij plik pobrany z Colab w poprzednim kroku.

3c3c50e6ef12b3b.png

10. Pobieranie modelu z Firebase ML

Podjęcie decyzji o tym, kiedy pobrać model zdalny z Firebase do aplikacji, może być trudne, ponieważ modele TFLite mogą rosnąć stosunkowo duże. W idealnej sytuacji nie chcemy wczytywać modelu od razu po uruchomieniu aplikacji, ponieważ jeśli model jest używany tylko do jednej funkcji, a użytkownik nigdy z niej nie korzysta, bez powodu pobieramy znaczną ilość danych. Możemy też ustawić opcje pobierania, np. pobieranie tylko modeli po połączeniu z Wi-Fi. Jeśli chcesz mieć pewność, że model będzie dostępny nawet bez połączenia z internetem, ważne jest, aby spakować go również bez aplikacji jako kopii zapasowej.

Dla uproszczenia usuniemy domyślny model z pakietu i zawsze pobieramy model z Firebase przy pierwszym uruchomieniu aplikacji. Dzięki temu podczas przeprowadzania analizy nastawienia możesz mieć pewność, że wnioskowanie działa z użyciem modelu dostarczonego z Firebase.

W pliku app/build.gradle.kts dodaj zależność od systemu uczącego się Firebase.

app/build.gradle.kts

Znajdź ten komentarz:

// TODO 1: Add Firebase ML dependency

Następnie dodaj:

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

Gdy Android Studio poprosi o synchronizację projektu, kliknij Synchronizacja teraz.

Teraz dodamy kod, który pobiera model z Firebase.

MainActivity.java

Znajdź ten komentarz:

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

Następnie dodaj:

  /** 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();

                      }
              );

}

Następnie wywołaj metodę downloadModel w ramach metody onCreate aktywności.

MainActivity.java

Znajdź ten komentarz:

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

Następnie dodaj:

downloadModel("sentiment_analysis");

11. Integracja modelu w aplikacji

Biblioteka zadań Tensorflow Lite ułatwia integrowanie modeli TensorFlow Lite w aplikacji za pomocą zaledwie kilku linii kodu. Zainicjujemy instancję NLClassifier za pomocą modelu TensorFlow Lite pobranego z Firebase. Następnie użyjemy go do sklasyfikowania tekstu wpisywanego przez użytkowników aplikacji i wyświetlimy wynik w interfejsie.

Dodawanie zależności

Otwórz plik Gradle aplikacji i w sekcji zależności dodaj bibliotekę zadań TensorFlow Lite (Text).

app/build.gradle

Znajdź ten komentarz:

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

Następnie dodaj:

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

Gdy Android Studio poprosi o zsynchronizowanie projektu, wybierz Synchronizuj teraz.

Inicjowanie klasyfikatora tekstu

Następnie wczytamy model analizy nastroju pobrany z Firebase za pomocą NLClassifier w Task Library.

MainActivity.java

Zadeklaruj zmienną instancji NLClassifier. Znajdź ten komentarz:

// TODO 5: Define a NLClassifier variable

Następnie dodaj:

private NLClassifier textClassifier;

Zainicjuj zmienną textClassifier za pomocą modelu analizy nastawienia pobranego z Firebase. Znajdź ten komentarz:

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

Następnie dodaj:

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

Klasyfikowanie tekstu

Po skonfigurowaniu instancji textClassifier możesz przeprowadzić analizę nastroju za pomocą jednego wywołania metody.

MainActivity.java

Znajdź ten komentarz:

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

Następnie dodaj:

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

Zaimplementuj przetwarzanie końcowe

Na koniec przekształcimy dane wyjściowe modelu w tekst opisowy, który wyświetli się na ekranie.

MainActivity.java

Znajdź ten komentarz:

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

Usuń kod generujący fikcyjny tekst wyniku:

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

Następnie dodaj:

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. Uruchamianie gotowej aplikacji

Udało Ci się zintegrować model analizy nastawienia z aplikacją, więc przetestujmy go. Podłącz urządzenie z Androidem i na pasku narzędzi Android Studio kliknij Uruchom (execute.png).

Aplikacja powinna być w stanie poprawnie przewidzieć nastawienie recenzji filmu, którą wpisujesz.

img/text-classification-result.png

13. Ulepsz aplikację, korzystając z większej liczby funkcji Firebase

Oprócz hostowania modeli TFLite Firebase udostępnia kilka innych funkcji, które usprawniają zastosowania systemów uczących się:

  • Monitorowania wydajności Firebase do pomiaru szybkości wnioskowania modelu działającego na urządzeniach użytkowników urządzenia.
  • Firebase Analytics, aby mierzyć skuteczność modelu w środowisku produkcyjnym za pomocą pomiaru reakcji użytkowników.
  • Testy A/B Firebase umożliwiające testowanie wielu wersji modelu.
  • Pamiętasz, że trenowaliśmy wcześniej 2 wersje naszego modelu TFLite? Testy A/B to dobry sposób na sprawdzenie, która wersja działa lepiej w środowisku produkcyjnym.

Aby dowiedzieć się więcej o korzystaniu z tych funkcji w aplikacji, zapoznaj się z poniższymi ćwiczeniami z programowania:

14. Gratulacje!

Dzięki tym ćwiczeniom w Codelabs omówiliśmy, jak wytrenować model TFLite do analizy nastawienia i wdrożyć go w aplikacji mobilnej za pomocą Firebase. Aby dowiedzieć się więcej o TFLite i Firebase, zapoznaj się z innymi przykładami kodu TFLite oraz z przewodnikami na temat korzystania z Firebase.

Omówione zagadnienia

  • TensorFlow Lite
  • Firebase ML

Następne kroki

  • Zmierz szybkość wnioskowania modelu za pomocą Monitorowania wydajności Firebase.
  • Wdróż model z Colab bezpośrednio w Firebase za pomocą interfejsu Firebase ML Model Management API.
  • Dodaj mechanizm, aby umożliwić użytkownikom przekazywanie opinii na temat wyniku prognozy, i używaj Firebase Analytics do śledzenia opinii użytkowników.
  • Za pomocą Testów A/B Firebase przeprowadzaj testy A/B modelu średniego wektora słownego i modelu MobileBERT.

Więcej informacji

Masz pytanie?

Zgłaszanie problemów