Dodaj klasyfikację tekstu na urządzeniu do swojej aplikacji za pomocą TensorFlow Lite i Firebase — Android Codelab

1. Przegląd

wynik-klasyfikacji tekstu.png

Witamy w Klasyfikacji tekstu za pomocą ćwiczeń z programowania TensorFlow Lite i Firebase. W tym laboratorium z programowania dowiesz się, jak używać TensorFlow Lite i Firebase do uczenia i wdrażania modelu klasyfikacji tekstu w swojej aplikacji. To ćwiczenie z programowania opiera się na przykładzie TensorFlow Lite.

Klasyfikacja tekstu to proces przypisywania znaczników lub kategorii do tekstu zgodnie z jego zawartością. Jest to jedno z podstawowych zadań przetwarzania języka naturalnego (NLP) o szerokim zastosowaniu, takim jak analiza nastrojów, oznaczanie tematów, wykrywanie spamu i wykrywanie zamiarów.

Analiza sentymentów to interpretacja i klasyfikacja emocji (pozytywnych, negatywnych i neutralnych) w danych tekstowych przy użyciu technik analizy tekstu. Analiza nastrojów umożliwia firmom identyfikację nastrojów klientów w stosunku do produktów, marek lub usług w rozmowach online i informacjach zwrotnych.

W tym samouczku pokazano, jak zbudować model uczenia maszynowego na potrzeby analizy tonacji, w szczególności klasyfikując tekst jako pozytywny lub negatywny. To jest przykład klasyfikacji binarnej – lub dwuklasowej – ważnego i szeroko stosowanego rodzaju problemu uczenia maszynowego.

Czego się dowiesz

  • Trenuj modele analizy nastrojów TF Lite za pomocą TF Lite Model Maker
  • Wdrażaj modele TF Lite w Firebase ML i uzyskuj do nich dostęp ze swojej aplikacji
  • Zintegruj modele analizy nastrojów TF Lite ze swoją aplikacją za pomocą biblioteki zadań TF Lite

Co będziesz potrzebował

  • Najnowsza wersja Androida Studio .
  • Przykładowy kod.
  • Urządzenie testowe z Androidem 5.0 lub nowszym i usługami Google Play 9.8 lub nowszymi lub Emulator z usługami Google Play 9.8 lub nowszymi
  • Jeśli używasz urządzenia, kabel połączeniowy.

Jak będziesz korzystać z tego samouczka?

Przeczytaj tylko i wyłącznie Przeczytaj i wykonaj ćwiczenia

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

Nowicjusz Mediator Biegły

2. Pobierz przykładowy kod

Sklonuj repozytorium GitHub z wiersza poleceń.

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

Jeśli nie masz zainstalowanego gita, możesz także pobrać przykładowy projekt ze strony GitHub lub klikając ten link .

3. Zaimportuj aplikację startową

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

Powinieneś teraz mieć otwarty projekt startowy w Android Studio.

4. Uruchom aplikację startową

Teraz, gdy zaimportowałeś projekt 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 Twoim urządzeniu. Zawiera jedynie prosty interfejs użytkownika, który ułatwia integrację i testowanie modeli klasyfikacji tekstu w kolejnych krokach. W tym momencie, jeśli spróbujesz przewidzieć nastroje, aplikacja zwróci tylko niektóre fikcyjne wyniki.

2fb4e69fafb2e3ed.png

5. Utwórz projekt konsoli Firebase

Dodaj Firebase do projektu

  1. Przejdź do konsoli Firebase .
  2. Wybierz opcję Dodaj projekt .
  3. Wybierz lub wprowadź 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 przeglądu nowego projektu kliknij ikonę Androida, aby uruchomić proces konfiguracji.
  2. Wprowadź nazwę pakietu codelab: org.tensorflow.lite.codelabs.textclassification

Dodaj plik google-services.json do swojej aplikacji

Po dodaniu nazwy pakietu i wybraniu opcji Zarejestruj** kliknij Pobierz plik google-services.json**, aby uzyskać plik konfiguracyjny Firebase dla systemu Android, a następnie skopiuj plik google-services.json do katalogu * app * w swoim projekcie.

Dodaj wtyczkę usług Google do swojej aplikacji

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

Wtyczka google-services używa pliku google-services.json do skonfigurowania aplikacji do korzystania z Firebase.

Zsynchronizuj swój projekt z plikami gradle

Aby mieć pewność, że wszystkie zależności są dostępne dla Twojej aplikacji, powinieneś w tym momencie zsynchronizować swój projekt z plikami gradle. Wybierz opcję Plik > Synchronizuj projekt z plikami Gradle z paska narzędzi Android Studio.

7. Uruchom aplikację za pomocą Firebase

Teraz, gdy skonfigurowałeś wtyczkę google-services za pomocą pliku JSON, możesz uruchomić aplikację w Firebase. Podłącz urządzenie z Androidem i kliknij Uruchom ( wykonaj.png ) na pasku narzędzi Android Studio.

Aplikacja powinna uruchomić się na Twoim urządzeniu. W tym momencie Twoja aplikacja powinna nadal pomyślnie się kompilować.

8. Wytrenuj model analizy nastrojów

Będziemy używać TensorFlow Lite Model Maker do uczenia modelu klasyfikacji tekstu w celu przewidywania tonacji danego tekstu.

Ten krok jest przedstawiany jako notatnik w języku Python, który możesz otworzyć w Google Colab. Możesz wybrać opcję Środowisko wykonawcze > Uruchom wszystko , aby uruchomić cały notatnik jednocześnie.

Otwórz w Colab

Po zakończeniu tego kroku będziesz mieć model analizy nastrojów TensorFlow Lite, który będzie gotowy do wdrożenia w aplikacji mobilnej.

9. Wdróż model w Firebase ML

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

  1. Możemy zachować niewielki rozmiar instalacji aplikacji i pobrać model tylko w razie potrzeby
  2. Model może być regularnie aktualizowany i mieć inny cykl wydawniczy niż cała aplikacja

Model można wdrożyć za pośrednictwem konsoli lub programowo przy użyciu pakietu Firebase Admin SDK. W tym kroku będziemy wdrażać za pośrednictwem konsoli.

Najpierw otwórz konsolę Firebase i kliknij Uczenie maszynowe w lewym panelu nawigacyjnym. Kliknij „Rozpocznij”, jeśli otwierasz po raz pierwszy. Następnie przejdź do „Niestandardowy” i kliknij przycisk „Dodaj model”.

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

3c3c50e6ef12b3b.png

10. Pobierz model z Firebase ML

Wybór momentu pobrania zdalnego modelu z Firebase do aplikacji może być trudny, ponieważ modele TFLite mogą rosnąć stosunkowo duże. W idealnym przypadku chcielibyśmy uniknąć ładowania modelu natychmiast po uruchomieniu aplikacji, ponieważ jeśli nasz model będzie używany tylko do jednej funkcji, a użytkownik nigdy z niej nie skorzysta, pobierzemy znaczną ilość danych bez powodu. Możemy również ustawić opcje pobierania, takie jak pobieranie modeli tylko po podłączeniu do Wi-Fi. Jeśli chcesz mieć pewność, że model będzie dostępny nawet bez połączenia sieciowego, ważne jest, aby zapakować go również bez aplikacji jako kopię zapasową.

Dla uproszczenia usuniemy domyślny model w pakiecie i zawsze będziemy pobierać model z Firebase przy pierwszym uruchomieniu aplikacji. W ten sposób podczas przeprowadzania analizy nastrojów możesz mieć pewność, że wnioskowanie działa na podstawie modelu dostarczonego z 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 Cię o zsynchronizowanie projektu, wybierz opcję Synchronizuj teraz .

Następnie dodajmy trochę kodu, aby 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 działania.

MainActivity.java

Znajdź ten komentarz:

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

Następnie dodaj:

downloadModel("sentiment_analysis");

11. Zintegruj model ze swoją aplikacją

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

Dodaj zależność

Przejdź do pliku Gradle aplikacji i dodaj bibliotekę zadań TensorFlow Lite (tekst) 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 Cię o zsynchronizowanie projektu, wybierz opcję Synchronizuj teraz .

Zainicjuj klasyfikator tekstu

Następnie załadujemy model analizy tonacji pobrany z Firebase za pomocą 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 tonacji pobranego z Firebase. Znajdź ten komentarz:

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

Następnie dodaj:

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

Klasyfikuj tekst

Po skonfigurowaniu instancji textClassifier można uruchomić analizę tonacji 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żaj przetwarzanie końcowe

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 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ą aplikację

Zintegrowałeś model analizy nastrojów 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 przewidzieć nastroje zawarte w recenzji filmu.

img/text-classification-result.png

13. Wzbogać aplikację o więcej funkcji Firebase

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

  • Monitorowanie wydajności Firebase do pomiaru szybkości wnioskowania modelu działającego na urządzeniu użytkownika.
  • Firebase Analytics do pomiaru skuteczności Twojego modelu w środowisku produkcyjnym poprzez pomiar reakcji użytkowników.
  • Testowanie A/B Firebase w celu przetestowania wielu wersji modelu
  • Czy pamiętasz, że wcześniej trenowaliśmy dwie wersje naszego modelu TFLite? Testy A/B to dobry sposób, aby dowiedzieć się, która wersja sprawdza się lepiej w środowisku produkcyjnym!

Aby dowiedzieć się więcej o tym, jak wykorzystać te funkcje w swojej aplikacji, zapoznaj się z poniższymi ćwiczeniami z programowania:

14. Gratulacje!

Podczas tych ćwiczeń z programowania nauczyłeś się wytrenować model TFLite do analizy tonacji i wdrożyć go w aplikacji mobilnej przy użyciu Firebase. Aby dowiedzieć się więcej o TFLite i Firebase, zapoznaj się z innymi przykładami TFLite i przewodnikami wprowadzającymi do Firebase.

Co omówiliśmy

  • TensorFlow Lite
  • Baza Firebase ML

Następne kroki

  • Zmierz szybkość wnioskowania modelu za pomocą narzędzia Firebase Performance Monitoring.
  • Wdróż model z Colab bezpośrednio w Firebase za pośrednictwem interfejsu API zarządzania modelami Firebase ML.
  • Dodaj mechanizm umożliwiający użytkownikom przesyłanie informacji zwrotnych na temat wyniku prognozy i korzystaj z Firebase Analytics do śledzenia opinii użytkowników.
  • Test A/B modelu wektora średniego słowa i modelu MobileBERT za pomocą testów A/B Firebase.

Ucz się więcej

Mam pytanie?

Zgłoś problemy