Dodawanie klasyfikacji tekstu na urządzeniu za pomocą TensorFlow Lite i Firebase – iOS Codelabs

1. Przegląd

classification_result_screen.png

Witamy w ćwiczeniu w Codelabs dotyczącym klasyfikacji tekstu za pomocą TensorFlow Lite i Firebase. W tym ćwiczeniu dowiesz się, jak używać TensorFlow Lite i Firebase do trenowania i wdrażania modelu klasyfikacji tekstu w aplikacji. To ćwiczenie w Codelabs jest oparte na tym przykładzie TensorFlow Lite example.

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, oznaczaniu tematów, wykrywaniu spamu i wykrywaniu intencji.

Analiza nastawienia to interpretacja i klasyfikacja emocji (pozytywnych, negatywnych i neutralnych) w danych tekstowych za pomocą technik analizy tekstu. Analiza nastawienia pozwala firmom określić nastawienie klientów do produktów, marek lub usług w rozmowach i opiniach online.

W tym samouczku pokazujemy, jak utworzyć model uczenia maszynowego do analizy nastawienia, w szczególności do klasyfikowania tekstu jako pozytywnego lub negatywnego. Jest to przykład klasyfikacji binarnej lub dwuklasowej, która jest ważnym i szeroko stosowanym rodzajem problemu uczenia maszynowego.

Czego się nauczysz

  • Trenowanie modelu analizy nastawienia TF Lite za pomocą TF Lite Model Maker
  • Wdrażanie modeli TF Lite w Firebase ML i uzyskiwanie do nich dostępu z aplikacji
  • Śledzenie opinii użytkowników w celu pomiaru dokładności modelu za pomocą Firebase Analytics
  • Profilowanie wydajności modelu za pomocą monitorowania skuteczności w Firebase
  • Wybieranie, który z wielu wdrożonych modeli ma być wczytywany za pomocą Zdalnej konfiguracji
  • Eksperymentowanie z różnymi modelami za pomocą Testów A/B Firebase

Czego potrzebujesz

  • Xcode 11 (lub nowszy)
  • CocoaPods 1.9.1 (lub nowszy)

Jak będziesz korzystać z tego samouczka?

Tylko przeczytam Przeczytam i wykonam ćwiczenia

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

Początkujący Średnio zaawansowany Zaawansowany

2. Tworzenie projektu w konsoli Firebase

Dodawanie Firebase do projektu

  1. Otwórz konsolę Firebase.
  2. Kliknij Utwórz nowy projekt i nadaj mu nazwę „Firebase ML iOS Codelab”.

3. Pobieranie przykładowego projektu

Pobieranie kodu

Zacznij od sklonowania przykładowego projektu i uruchomienia polecenia pod update w katalogu projektu:

git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git
cd codelab-textclassification-ios
pod install --repo-update

Jeśli nie masz zainstalowanego Gita, możesz też pobrać przykładowy projekt ze strony GitHub lub klikając na ten link. Po pobraniu projektu uruchom go w Xcode i wypróbuj klasyfikację tekstu, aby zobaczyć, jak działa.

Konfigurowanie Firebase

Postępuj zgodnie z dokumentacją, aby utworzyć nowy projekt w Firebase. Gdy projekt będzie gotowy, pobierz plik GoogleService-Info.plist z konsoli Firebase i przeciągnij go do głównego katalogu projektu Xcode.

9efb62a92f27e939.png

Dodaj Firebase do pliku Podfile i uruchom polecenie pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

W metodzie didFinishLaunchingWithOptions pliku AppDelegate zaimportuj Firebase u góry pliku.

import FirebaseCore

Dodaj wywołanie, aby skonfigurować Firebase.

FirebaseApp.configure()

Uruchom ponownie projekt, aby upewnić się, że aplikacja jest prawidłowo skonfigurowana i nie ulega awarii podczas uruchamiania.

4. Trenowanie modelu analizy nastawienia

Do trenowania modelu klasyfikacji tekstu, który będzie przewidywać nastawienie danego tekstu, użyjemy TensorFlow Lite Model Maker.

Ten krok jest przedstawiony jako notatnik Pythona, który możesz otworzyć w Google Colab.

Otwórz w Colab

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

5. 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 pobrać model tylko w razie potrzeby.
  2. Model można regularnie aktualizować w innym cyklu wydawania niż cała aplikacja.

Model można wdrożyć za pomocą konsoli lub programowo, używając pakietu Firebase Admin SDK. W tym kroku wdrożymy model za pomocą konsoli.

Najpierw otwórz konsolę Firebase i w panelu użytkownika po lewej stronie kliknij Machine Learning. Jeśli otwierasz tę stronę po raz pierwszy, kliknij „Rozpocznij”. Następnie kliknij „Niestandardowy” i przycisk „Dodaj model”.

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

3c3c50e6ef12b3b.png

6. 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 unikać wczytywania modelu natychmiast po uruchomieniu aplikacji, ponieważ jeśli 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 jest dostępny nawet bez połączenia z siecią, ważne jest, aby dołączyć go do aplikacji jako kopię zapasową.

Dla uproszczenia usuniemy domyślny model dołączony do aplikacji i zawsze będziemy pobierać model z Firebase, gdy aplikacja zostanie uruchomiona po raz pierwszy. Dzięki temu podczas analizy nastawienia możesz mieć pewność, że wnioskowanie jest wykonywane na podstawie modelu dostarczonego przez Firebase.

U góry pliku ModelLoader.swift zaimportuj moduł Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Następnie zaimplementuj te metody.

static func downloadModel(named name: String,
                          completion: @escaping (CustomModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }
  let conditions = ModelDownloadConditions(allowsCellularAccess: false)
  ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
          switch (result) {
          case .success(let customModel):
                  // Download complete.
                  // The CustomModel object contains the local path of the model file,
                  // which you can use to instantiate a TensorFlow Lite classifier.
                  return completion(customModel, nil)
          case .failure(let error):
              // Download was unsuccessful. Notify error message.
            completion(nil, .downloadFailed(underlyingError: error))
          }
  }
}

W metodzie viewDidLoad pliku ViewController.swift zastąp wywołanie loadModel() naszą nową metodą pobierania modelu.

// Download the model from Firebase
print("Fetching model...")
ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in
  guard let customModel = customModel else {
    if let error = error {
      print(error)
    }
    return
  }

  print("Model download complete")

  // TODO: Initialize an NLClassifier from the downloaded model
}

Uruchom ponownie aplikację. Po kilku sekundach w Xcode powinien pojawić się log wskazujący, że model zdalny został pobrany. Spróbuj wpisać tekst i sprawdź, czy działanie aplikacji się nie zmieniło.

7. Integracja modelu z aplikacją

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

Dodawanie zależności

Otwórz plik Podfile aplikacji i dodaj bibliotekę zadań TensorFlow Lite (tekst) do zależności aplikacji. Upewnij się, że dodajesz zależność pod deklaracją target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

Uruchom polecenie pod install, aby zainstalować nową zależność.

Inicjowanie klasyfikatora tekstu

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

ViewController.swift

Zadeklarujmy zmienną instancji TFLNLClassifier. U góry pliku zaimportuj nową zależność:

import TensorFlowLiteTaskText

Znajdź ten komentarz nad metodą, którą zmodyfikowaliśmy w ostatnim kroku:

// TODO: Add a TFLNLClassifier property.

Zastąp TODO tym kodem:

private var classifier: TFLNLClassifier?

Zainicjuj zmienną textClassifier za pomocą modelu analizy nastawienia pobranego z Firebase. Znajdź ten komentarz, który dodaliśmy w ostatnim kroku:

// TODO: Initialize an NLClassifier from the downloaded model

Zastąp TODO tym kodem:

let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)

Klasyfikowanie tekstu

Gdy instancja classifier zostanie skonfigurowana, możesz uruchomić analizę nastawienia za pomocą jednego wywołania metody.

ViewController.swift

W metodzie classify(text:) znajdź komentarz TODO:

// TODO: Run sentiment analysis on the input text

Zastąp komentarz tym kodem:

guard let classifier = self.classifier else { return }

// Classify the text
let classifierResults = classifier.classify(text: text)

// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)

8. Uruchamianie gotowej aplikacji

Model analizy nastawienia został zintegrowany z aplikacją, więc przetestujmy go. Podłącz urządzenie z iOS i na pasku narzędzi Xcode kliknij Uruchom ( execute.png).

Aplikacja powinna prawidłowo przewidywać nastawienie wpisanej przez Ciebie recenzji filmu.

classification_result_screen.png

9. Ulepszanie aplikacji za pomocą dodatkowych funkcji Firebase

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

  • Monitorowanie skuteczności w Firebase umożliwia pomiar szybkości wnioskowania modelu na urządzeniu użytkownika.
  • Firebase Analytics umożliwia pomiar skuteczności modelu w środowisku produkcyjnym na podstawie reakcji użytkowników.
  • Testy A/B Firebase umożliwiają testowanie 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 działa lepiej w środowisku produkcyjnym.

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

10. Gratulacje!

W tym ćwiczeniu w Codelabs dowiedzieliśmy się, jak wytrenować model analizy nastawienia TFLite 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 dla początkujących dotyczącymi Firebase.

Omówione zagadnienia

  • TensorFlow Lite
  • Firebase ML

Następne kroki

  • Mierzenie szybkości wnioskowania modelu za pomocą monitorowania skuteczności w Firebase.
  • Wdrażanie modelu z Colab bezpośrednio w Firebase za pomocą interfejsu Firebase ML Model Management API.
  • Dodawanie mechanizmu, który umożliwia użytkownikom przekazywanie opinii o wyniku prognozy, oraz używanie Firebase Analytics do śledzenia opinii użytkowników.
  • Testowanie A/B modelu Average Word Vector i modelu MobileBERT za pomocą Testów A/B Firebase.

Więcej informacji

Masz pytanie?

Zgłoś problemy