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

1. Opis

text-classification-result.png

Witamy na szkoleniu z ćwiczeń z programowania w TensorFlow Lite i Firebase na temat klasyfikacji tekstu. 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 zgodnie z 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 to interpretacja i klasyfikacja emocji (pozytywnych, negatywnych i neutralnych) w danych tekstowych przy użyciu technik analizy tekstu. Analiza nastawienia umożliwia firmom określenie nastawienia klientów do produktów, marek lub usług w rozmowach 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 lub dwuklasowej – ważnego i powszechnie stosowanego problemu systemów uczących się.

Czego się nauczysz

  • Trenowanie modeli analizy nastawienia w TF Lite za pomocą Kreatora modeli TF Lite
  • Wdrażanie modeli TF Lite w Firebase ML i uzyskiwanie do nich dostępu z aplikacji
  • Zintegruj z aplikacją modele analizy nastawienia TF Lite za pomocą biblioteki zadań TF Lite

Czego potrzebujesz

  • Najnowsza wersja Android Studio.
  • Przykładowy kod.
  • urządzenia testowego z Androidem 5.0 lub nowszym 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 do łączenia.

Jak wykorzystasz ten samouczek?

Tylko do przeczytania Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenia z tworzeniem aplikacji na Androida?

Początkujący Poziom średnio zaawansowany Biegły
.

2. Pobieranie przykładowego kodu

Skopiuj 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 pobranego 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 uruchomić się na urządzeniu. Zawiera tylko prosty interfejs, który ułatwia integrację i testowanie modeli klasyfikacji tekstu w kolejnych krokach. Jeśli spróbujesz przewidzieć odczucia, aplikacja zwróci tylko niektóre fikcyjne wyniki.

2fb4e69fafb2e3ed.png

5. Utwórz projekt konsoli Firebase

Dodaj Firebase do projektu

  1. Otwórz konsolę Firebase.
  2. Wybierz 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. Dodaj Firebase do aplikacji

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

Dodawanie pliku google-services.json do aplikacji

Po dodaniu nazwy pakietu i wybraniu Zarejestruj się** kliknij Pobierz google-services.json**, aby uzyskać plik konfiguracyjny Firebase na Androida, a następnie skopiuj plik google-services.json do katalogu *app* w swoim 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 w przypadku aplikacji dostępne są wszystkie zależności, zsynchronizuj projekt z plikami Gradle. Wybierz Plik > Synchronizowanie projektu z plikami Gradle na pasku narzędzi Android Studio.

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 uruchomić się na urządzeniu. Na tym etapie aplikacja powinna nadal się udać.

8. Trenowanie modelu analizy nastawienia

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że być regularnie aktualizowany i zawierać inny cykl wydawania wersji niż cała aplikacja.

Model można wdrożyć za pomocą konsoli lub automatycznie przy użyciu 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 go po raz pierwszy. Następnie przejdź do sekcji „Niestandardowe”. i kliknij „Dodaj model”, Przycisk

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

3c3c50e6ef12b3b.png

10. Pobierz model 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. Najlepiej unikać wczytywania modelu od razu po uruchomieniu aplikacji, ponieważ jeśli jest on używany tylko z jedną funkcją, a użytkownik nigdy z niej nie korzysta, pobierzemy znaczącą ilość danych bez powodu. Możemy też ustawić opcje pobierania, na przykład pobieranie modeli tylko przez sieć Wi-Fi. Jeśli chcesz mieć pewność, że model będzie dostępny nawet bez połączenia sieciowego, musisz utworzyć pakiet 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ść Systemów uczących 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 zsynchronizowanie projektu, wybierz Synchronizuj teraz.

Następnie dodajmy kod, który pozwoli pobrać 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ą kilku wierszy kodu. Zainicjujemy instancję NLClassifier za pomocą modelu TensorFlow Lite pobranego z Firebase. Następnie użyjemy go, aby sklasyfikować tekst wpisany przez użytkowników aplikacji i wyświetlić wynik w interfejsie.

Dodaj zależność

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

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 nastawienia pobrany z Firebase za pomocą elementu NLClassifier z Biblioteki zadań.

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 uruchomić analizę nastawienia za pomocą wywołania pojedynczej 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 opis, 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. Uruchom ostateczną wersję aplikacji

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

Aplikacja powinna być w stanie poprawnie przewidywać nastrój w danej recenzji filmu.

img/text-classification-result.png

13. Zwiększ możliwości aplikacji dzięki większej liczbie 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 TFLite i przewodnikami na wprowadzenie w Firebase.

Omówione zagadnienia

  • TensorFlow Lite
  • Firebase ML

Następne kroki

  • Mierz szybkość wnioskowania modelu za pomocą Monitorowania wydajności Firebase.
  • Wdróż model z Colab bezpośrednio do 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, aby przetestować model Wektora średniej słownej i model MobileBERT.

Więcej informacji

Masz pytanie?

Zgłaszanie problemów