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

1. Przegląd

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

  • Wytrenuj model analizy nastrojów TF Lite za pomocą narzędzia TF Lite Model Maker
  • Wdrażaj modele TF Lite w Firebase ML i uzyskuj do nich dostęp ze swojej aplikacji
  • Śledź opinie użytkowników, aby mierzyć dokładność modelu za pomocą Firebase Analytics
  • Wydajność modelu profilu poprzez monitorowanie wydajności Firebase
  • Wybierz, który z wielu wdrożonych modeli ma zostać załadowany poprzez Zdalną konfigurację
  • Eksperymentuj z różnymi modelami za pomocą testów A/B Firebase

Co będziesz potrzebował

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

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. Utwórz projekt konsoli Firebase

Dodaj Firebase do projektu

  1. Przejdź do konsoli Firebase .
  2. Wybierz opcję Utwórz nowy projekt i nazwij swój projekt „Firebase ML iOS Codelab”.

3. Pobierz przykładowy projekt

Pobierz kod

Rozpocznij od sklonowania przykładowego projektu i uruchomienia 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 także pobrać przykładowy projekt ze strony GitHub lub klikając ten link . Po pobraniu projektu uruchom go w Xcode i pobaw się klasyfikacją tekstu, aby przekonać się, jak to działa.

Skonfiguruj Firebase

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

9efb62a92f27e939.png

Dodaj Firebase do swojego Podfile i uruchom instalację pod.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

W metodzie didFinishLaunchingWithOptions aplikacji AppDelegate zaimportuj Firebase na górze pliku

import FirebaseCore

I dodaj wywołanie, aby skonfigurować Firebase.

FirebaseApp.configure()

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

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

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.

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

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

Na górze ModelLoader.swift zaimportuj moduł Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Następnie zaimplementuj następujące 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 viewDidLoad pliku ViewController.swift zastąp wywołanie metody 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 powinieneś zobaczyć log w Xcode wskazujący, że zdalny model został pomyślnie pobrany. Spróbuj wpisać tekst i potwierdź, że zachowanie aplikacji się nie zmieniło.

7. Zintegruj model ze swoją aplikacją

Biblioteka zadań Tensorflow Lite pomaga zintegrować modele TensorFlow Lite z aplikacją za pomocą zaledwie kilku wierszy kodu. Zainicjujemy instancję TFLNLClassifier 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 Podfile aplikacji i dodaj bibliotekę zadań TensorFlow Lite (tekst) w zależnościach aplikacji. Upewnij się, że dodałeś zależność w target 'TextClassification' .

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

Zainicjuj klasyfikator tekstu

Następnie załadujemy model analizy tonacji pobrany z Firebase za pomocą NLClassifier biblioteki zadań.

ViewController.swift

Zadeklarujmy zmienną instancji TFLNLClassifier. Na górze 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 następującym kodem:

private var classifier: TFLNLClassifier?

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

// TODO: Initialize an NLClassifier from the downloaded model

Zastąp TODO następującym kodem:

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

Klasyfikuj tekst

Po skonfigurowaniu instancji classifier można uruchomić analizę tonacji 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 następującym 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ą aplikację

Zintegrowałeś model analizy nastrojów z aplikacją, więc przetestujmy go. Podłącz urządzenie iOS i kliknij Uruchom ( wykonaj.png ) na pasku narzędzi Xcode.

Aplikacja powinna być w stanie poprawnie przewidzieć nastroje zawarte w recenzji filmu.

classification_result_screen.png

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

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