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

1. Przegląd

text-classification-result.png

Witamy w samouczku dotyczącym klasyfikacji tekstu za pomocą TensorFlow Lite i Firebase. Z tych ćwiczeń z programowania dowiesz się, jak używać TensorFlow Lite i Firebase do trenowania i wdrażania w aplikacji modelu klasyfikacji tekstu. Te ćwiczenia z programowania są oparte na tym przykładzie TensorFlow Lite.

Klasyfikacja tekstu to proces przypisywania tagów lub kategorii do tekstu na podstawie jego treści. Jest to jedno z podstawowych zadań w przetwarzaniu języka naturalnego (NLP) o szerokim zastosowaniu, np. w analizie nastawienia, etykietowaniu tematów, wykrywaniu spamu i wykrywaniu intencji.

Analiza nastawienia to interpretacja i klasyfikacja emocji (pozytywnych, negatywnych i neutralnych) w danych tekstowych przy użyciu technik analizy tekstu. Analiza sentymentu umożliwia firmom określanie nastawienia klientów do produktów, marek lub usług w rozmowach i opiniach online.

Z tego samouczka dowiesz się, jak utworzyć model uczenia maszynowego do analizy nastawienia, a w szczególności do klasyfikowania tekstu jako pozytywnego lub negatywnego. Jest 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 nastawienia 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, kabel połączeniowy.

Jak zamierzasz wykorzystać ten samouczek?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenie w tworzeniu aplikacji na Androida?

Początkujący Średnio zaawansowany Zaawansowany

2. Pobieranie przykładowego kodu

Sklonuj repozytorium GitHub z wiersza poleceń.

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

Jeśli nie masz zainstalowanego narzędzia git, możesz też pobrać przykładowy projekt ze strony GitHub lub klikając ten link.

3. Importowanie aplikacji startowej

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

Projekt początkowy powinien być teraz otwarty w Android Studio.

4. Uruchamianie aplikacji wyjściowej

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

Aplikacja powinna się uruchomić na urządzeniu. Zawiera 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 przykładowe wyniki.

2fb4e69fafb2e3ed.png

5. Tworzenie projektu w konsoli Firebase

Dodawanie 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 potem kliknij Utwórz projekt (lub Dodaj Firebase, jeśli używasz istniejącego projektu Google).

6. Dodawanie Firebase do aplikacji

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

Dodawanie pliku google-services.json do aplikacji

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

Dodawanie wtyczki google-services do aplikacji

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

Wtyczka google-services używa pliku google-services.json do konfigurowania aplikacji pod kątem korzystania z Firebase.

Synchronizowanie projektu z plikami Gradle

Aby mieć pewność, że wszystkie zależności są dostępne dla aplikacji, w tym momencie zsynchronizuj projekt z plikami Gradle. Na pasku narzędzi Android Studio wybierz File > Sync Project with Gradle Files (Plik > Synchronizuj projekt z plikami Gradle).

7. Uruchamianie aplikacji za pomocą Firebase

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

Aplikacja powinna się uruchomić na urządzeniu. Na tym etapie aplikacja powinna nadal być kompilowana.

8. Trenowanie modelu analizy nastawienia

Użyjemy narzędzia TensorFlow Lite Model Maker, aby wytrenować model klasyfikacji tekstu, który będzie prognozować nastawienie w danym tekście.

Ten krok jest przedstawiony jako notatnik w Pythonie, który możesz otworzyć w Google Colab. Możesz wybrać Środowisko wykonawcze > Uruchom wszystko, aby wykonać wszystkie komórki notatnika naraz.

Otwórz w Colab

Po wykonaniu tego kroku będziesz mieć model analizy sentymentu TensorFlow Lite gotowy do wdrożenia w aplikacji mobilnej.

9. Wdrażanie modelu w Firebase ML

Wdrażanie modelu w Firebase ML jest przydatne z 2 głównych powodów:

  1. Możemy zmniejszyć rozmiar instalacji aplikacji i pobierać model tylko w razie potrzeby.
  2. Model można regularnie aktualizować w innym cyklu wydawniczym niż cała aplikacja.

Model można wdrożyć w konsoli lub automatycznie za pomocą pakietu Firebase Admin SDK. W tym kroku wdrożymy aplikację za pomocą konsoli.

Najpierw otwórz konsolę Firebase i w panelu nawigacyjnym po lewej stronie kliknij Machine Learning. Jeśli otwierasz tę sekcję po raz pierwszy, kliknij „Rozpocznij”. Następnie przejdź do sekcji „Niestandardowe” i kliknij przycisk „Dodaj model”.

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

3c3c50e6ef12b3b.png

10. Pobieranie modelu z Firebase ML

Wybór momentu pobrania modelu zdalnego z Firebase do aplikacji może być trudny, ponieważ modele TFLite mogą być stosunkowo duże. Najlepiej byłoby uniknąć wczytywania modelu od razu po uruchomieniu aplikacji, ponieważ jeśli nasz model jest używany tylko w jednej funkcji, a użytkownik nigdy z niej nie korzysta, pobierzemy znaczną ilość danych bez powodu. Możemy też ustawić opcje pobierania, np. pobieranie modeli tylko wtedy, gdy urządzenie jest połączone z Wi-Fi. Jeśli chcesz mieć pewność, że model będzie dostępny nawet bez połączenia z siecią, warto też dołączyć go bez aplikacji jako kopię zapasową.

Dla uproszczenia usuniemy domyślny model dołączony do pakietu i zawsze będziemy pobierać model z Firebase, gdy aplikacja zostanie uruchomiona po raz pierwszy. Dzięki temu podczas przeprowadzania analizy sentymentu możesz mieć pewność, że wnioskowanie jest przeprowadzane za pomocą modelu udostępnionego przez Firebase.

W pliku app/build.gradle.kts dodaj zależność Firebase Machine Learning.

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 zsynchronizowanie projektu, kliknij Synchronizuj.

Następnie dodajmy kod, który pobierze 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 metodzie onCreate aktywności.

MainActivity.java

Znajdź ten komentarz:

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

Następnie dodaj:

downloadModel("sentiment_analysis");

11. Zintegruj model z aplikacją

Biblioteka zadań TensorFlow Lite pomaga zintegrować modele TensorFlow Lite z aplikacją za pomocą zaledwie kilku wierszy kodu. Zainicjujemy instancję NLClassifier za pomocą modelu TensorFlow Lite pobranego z Firebase. Następnie użyjemy go do klasyfikowania tekstu wprowadzanego przez użytkowników aplikacji i wyświetlania wyniku w interfejsie.

Dodawanie zależności

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

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, kliknij Synchronizuj.

Inicjowanie klasyfikatora tekstu

Następnie wczytamy model analizy nastawienia pobrany z Firebase za pomocą funkcji NLClassifier biblioteki zadań.

MainActivity.java

Zadeklarujmy 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 sentymentu 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 uruchomić analizę sentymentu 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);

Wdrażanie przetwarzania końcowego

Na koniec przekonwertujemy dane wyjściowe modelu na tekst opisowy, który będzie wyświetlany na ekranie.

MainActivity.java

Znajdź ten komentarz:

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

Usuń kod, który generuje tekst z wynikiem testowym:

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

Model analizy nastawienia został zintegrowany 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 prawidłowo przewidywać nastawienie w opinii o filmie, którą wpiszesz.

img/text-classification-result.png

13. Ulepszanie aplikacji za pomocą dodatkowych funkcji Firebase

Oprócz hostowania modeli TFLite Firebase udostępnia kilka innych funkcji, które usprawniają przypadki użycia uczenia maszynowego:

  • Monitorowanie wydajności Firebase, aby mierzyć szybkość wnioskowania modelu na urządzeniach użytkowników.
  • Firebase Analytics do pomiaru skuteczności modelu w środowisku produkcyjnym na podstawie reakcji użytkowników.
  • Testy A/B Firebase do testowania wielu wersji modelu
  • Pamiętasz, że wcześniej wytrenowaliśmy 2 wersje naszego modelu TFLite? Testy A/B to dobry sposób na sprawdzenie, która wersja jest skuteczniejsza w środowisku produkcyjnym.

Więcej informacji o tym, jak korzystać z tych funkcji w aplikacji, znajdziesz w tych samouczkach:

14. Gratulacje!

Z tych ćwiczeń z programowania dowiesz się, jak wytrenować model TFLite do analizy sentymentu i wdrożyć go w aplikacji mobilnej za pomocą Firebase. Więcej informacji o TFLite i Firebase znajdziesz w innych przykładach TFLite i w przewodnikach dla początkujących dotyczących Firebase.

Omówione zagadnienia

  • TensorFlow Lite
  • Firebase ML

Następne kroki

  • Mierz szybkość wnioskowania modelu za pomocą Monitorowania wydajności Firebase.
  • wdrażać model z Colab bezpośrednio w Firebase za pomocą interfejsu Firebase ML Model Management API;
  • Dodaj mechanizm, który umożliwi użytkownikom przekazywanie opinii o wynikach prognozowania, i używaj Firebase Analytics do śledzenia opinii użytkowników.
  • Przeprowadź test A/B modelu Average Word Vector i modelu MobileBERT za pomocą Testów A/B Firebase.

Więcej informacji

Masz pytanie?

Zgłaszanie problemów