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

1. Omówienie

klasyfikacji_wyników_ekranu.png

Witamy w codelab do klasyfikacji tekstu za pomocą TensorFlow Lite i Firebase. 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ą. Jest to jedno z podstawowych zadań przetwarzania języka naturalnego (NLP) z szeroko zakrojonymi zastosowaniami, takimi jak analiza nastawienia, etykietowanie tematów, wykrywanie spamu i wykrywanie zamiaru.

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.

W tym samouczku dowiesz się, jak tworzyć model systemów uczących się do analizy nastawienia, a w szczególności do klasyfikowania 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 modelu analizy nastroju 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
  • Wybierz, który z kilku wdrożonych modeli ma być wczytany przez Zdalną konfigurację
  • Eksperymentowanie z różnymi modelami za pomocą testów A/B Firebase

Czego potrzebujesz

  • Xcode 11 (lub nowsza)
  • CocoaPods w wersji 1.9.1 (lub nowszej)

Jak będziesz korzystać z tego samouczka?

Tylko przeczytać Przeczytać i wykonać ćwiczenia

Jak oceniasz tworzenie aplikacji na Androida?

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

2. Utwórz projekt konsoli Firebase

Dodawanie Firebase do projektu

  1. Otwórz konsolę Firebase.
  2. Wybierz Utwórz nowy projekt i nazwij swój projekt „Ćwiczenie z programowania w Firebase ML na iOS”.

3. Pobierz przykładowy projekt

Pobierz kod

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 zainstalowanej aplikacji git, możesz też pobrać przykładowy projekt ze strony GitHuba lub kliknąć ten link. Gdy pobierzesz projekt, uruchom go w Xcode i przetestuj klasyfikację tekstu, aby zobaczyć, jak to działa.

Skonfiguruj Firebase

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

9efb62a92f27e939.png

Dodaj Firebase do pliku Podfile i uruchom instalację poda.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

W metodzie AppDelegate didFinishLaunchingWithOptions zaimportuj Firebase na początku pliku.

import FirebaseCore

Dodaj też wywołanie do konfiguracji Firebase.

FirebaseApp.configure()

Uruchom projekt jeszcze raz, aby upewnić się, że aplikacja jest prawidłowo skonfigurowana i nie ulega awarii przy uruchamianiu.

4. Trenowanie modelu analizy nastroju

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.

Otwórz w Colab

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

5. Wdrażanie modelu w Firebase ML

Wdrożenie modelu w Firebase ML jest przydatne z 2 głównych powodów:

  1. możemy zachować niewielki rozmiar aplikacji i pobierać model tylko w razie potrzeby;
  2. Model można aktualizować regularnie i z innym cyklem niż cała aplikacja.

Model można wdrożyć za pomocą konsoli lub automatycznie przy użyciu pakietu Firebase Admin SDK. W tym kroku wdrożymy usługę za pomocą konsoli.

Najpierw otwórz konsolę Firebase i w panelu użytkownika po lewej stronie kliknij Systemy uczące się. Jeśli otwierasz tę stronę po raz pierwszy, kliknij „Rozpocznij”. Następnie przejdź do sekcji „Niestandardowe” i kliknij przycisk „Dodaj model”.

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

3c3c50e6ef12b3b.png

6. Pobieranie modelu 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, np. pobieranie tylko modeli po połączeniu z Wi-Fi. Jeśli chcesz mieć pewność, że model będzie dostępny nawet bez połączenia z internetem, ważne jest, aby spakować go również bez aplikacji jako kopii zapasowej.

Ze względu na prostotę usuniemy domyślny model w pakiecie i zawsze będziemy pobierać model z Firebase przy pierwszym uruchomieniu aplikacji. Dzięki temu podczas analizy nastroju możesz mieć pewność, że wnioskowanie jest wykonywane za pomocą modelu dostarczonego przez Firebase.

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

import FirebaseCore
import FirebaseMLModelDownloader

Następnie zastosuj podane niżej 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 narzędziu viewDidLoad aplikacji 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
}

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

7. Integracja modelu w aplikacji

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 sklasyfikowania tekstu wpisywanego przez użytkowników aplikacji i wyświetlimy wynik w interfejsie.

Dodawanie zależności

Otwórz plik Podfile aplikacji i w zależnych plikach aplikacji dodaj bibliotekę zadań TensorFlow Lite (Text). Dodaj zależność 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 nastroju pobrany z Firebase za pomocą NLClassifier w Task Library.

ViewController.swift

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

import TensorFlowLiteTaskText

Znajdź ten komentarz nad metodą zmodyfikowaną w ostatnim kroku:

// TODO: Add a TFLNLClassifier property.

Zastąp pole TODO tym kodem:

private var classifier: TFLNLClassifier?

Zainicjuj zmienną textClassifier za pomocą modelu analizy sentymentu 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)

Klasyfikacja tekstu

Po skonfigurowaniu instancji classifier możesz przeprowadzić analizę nastroju 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. Uruchom ostateczną wersję 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 (Wykonaj.png).

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

klasyfikacji_wyników_ekranu.png

9. Zwiększ możliwości aplikacji dzięki większej liczbie funkcji Firebase

Oprócz hostingu modeli TFLite Firebase udostępnia też kilka innych funkcji, które ułatwiają stosowanie 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 do testowania 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.

Więcej informacji o wykorzystywaniu tych funkcji w aplikacji znajdziesz w tych laboratoriach programistycznych:

10. 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 kodu TFLite oraz z przewodnikami na temat korzystania z Firebase.

Omówione zagadnienia

  • TensorFlow Lite
  • Firebase ML

Następne kroki

  • Zmierz szybkość wnioskowania modelu za pomocą Monitorowania wydajności Firebase.
  • Wdróż model z Colab bezpośrednio w 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 modelu średniego wektora słownego i modelu MobileBERT.

Więcej informacji

Masz pytanie?

Zgłaszanie problemów