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

1. Przegląd

classification_result_screen.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 modelu 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
  • Śledzenie opinii użytkowników w celu pomiaru dokładności modelu za pomocą Firebase Analytics
  • Profilowanie wydajności modelu za pomocą Monitorowania wydajności 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 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. 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 narzędzia git, możesz też pobrać projekt przykładowy ze strony GitHub lub klikając ten link. Po pobraniu projektu uruchom go w Xcode i pobaw się klasyfikacją tekstu, aby zobaczyć, jak to działa.

Konfigurowanie Firebase

Aby utworzyć nowy projekt Firebase, postępuj zgodnie z dokumentacją. Po utworzeniu projektu pobierz z konsoli Firebase plik GoogleService-Info.plist projektu i przeciągnij go do katalogu głównego projektu Xcode.

9efb62a92f27e939.png

Dodaj Firebase do pliku Podfile i uruchom polecenie pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

W metodzie AppDelegatedidFinishLaunchingWithOptions zaimportuj Firebase na początku pliku.

import FirebaseCore

Dodaj wywołanie, aby skonfigurować Firebase.

FirebaseApp.configure()

Uruchom projekt ponownie, aby sprawdzić, czy aplikacja jest prawidłowo skonfigurowana i nie ulega awarii podczas uruchamiania.

4. 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.

Otwórz w Colab

Po wykonaniu tego kroku będziesz mieć model analizy sentymentu TensorFlow Lite 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 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

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 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.

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

import FirebaseCore
import FirebaseMLModelDownloader

Następnie zastosuj 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))
          }
  }
}

ViewController.swift viewDidLoad 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
}

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

7. Zintegruj model 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 go do klasyfikowania tekstu wprowadzanego przez użytkowników aplikacji i wyświetlania wyniku w interfejsie.

Dodawanie zależności

Otwórz plik Podfile aplikacji i dodaj do zależności aplikacji bibliotekę zadań TensorFlow Lite (tekst). Upewnij się, że zależność została dodana w deklaracji target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

Inicjowanie klasyfikatora tekstu

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

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 komentarz TODO tym kodem:

private var classifier: TFLNLClassifier?

Zainicjuj zmienną textClassifier za pomocą modelu analizy sentymentu pobranego z Firebase. Znajdź ten komentarz dodany w ostatnim kroku:

// TODO: Initialize an NLClassifier from the downloaded model

Zastąp komentarz TODO tym kodem:

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

Klasyfikowanie tekstu

Po skonfigurowaniu instancji classifier możesz uruchomić analizę sentymentu 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 w opinii o filmie, którą wpiszesz.

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 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:

10. 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