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

1. Opis

klasyfikacji_wyników_ekranu.png

Witamy na szkoleniu z ćwiczeń z programowania w TensorFlow Lite i Firebase na temat klasyfikacji tekstu. 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ą. To jedno z podstawowych zadań przetwarzania języka naturalnego (NLP), które ma szerokie zastosowania, takie jak analiza nastawienia, oznaczanie tematów, wykrywanie spamu i wykrywanie intencji.

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.

Z tego samouczka dowiesz się, jak utworzyć model systemów uczących się do analizy nastawienia, a w szczególności na klasyfikowanie 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 nastawienia w TF Lite za pomocą Kreatora modeli TF Lite
  • Wdrażanie modeli TF Lite w Firebase ML i uzyskiwanie do nich dostępu z aplikacji
  • Śledź opinie użytkowników, aby mierzyć dokładność modelu za pomocą Firebase Analytics
  • Profiluj wydajność modelu za pomocą Monitorowania wydajności Firebase
  • Wybierz, który z wielu wdrożonych modeli ma być ładowany przez Zdalną konfigurację
  • Eksperymentuj z różnymi modelami za pomocą Testów A/B Firebase

Czego potrzebujesz

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

Jak wykorzystasz ten samouczek?

Tylko do przeczytania Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenia z tworzeniem aplikacji na Androida?

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

2. Utwórz projekt konsoli Firebase

Dodaj 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 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 didFinishLaunchingWithOptions w swoim urządzeniu AppDelegate zaimportuj Firebase na początku pliku

import FirebaseCore

Dodaj wywołanie, aby skonfigurować 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 nastawienia

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 ukończeniu tego kroku otrzymasz model analizy nastawienia TensorFlow Lite, który możesz wdrożyć 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. Rozmiar instalowany aplikacji może być niewielki i pobieramy model tylko w razie potrzeby.
  2. Model może być regularnie aktualizowany i zawierać inny cykl wydawania wersji niż cała aplikacja.

Model można wdrożyć za pomocą konsoli lub automatycznie przy użyciu pakietu Firebase Admin SDK. W tym kroku przeprowadzimy wdrożenie za pomocą konsoli.

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

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

3c3c50e6ef12b3b.png

6. Pobierz model 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, na przykład pobieranie modeli tylko przez sieć Wi-Fi. Jeśli chcesz mieć pewność, że model będzie dostępny nawet bez połączenia sieciowego, musisz utworzyć pakiet bez aplikacji jako kopii zapasowej.

Dla uproszczenia usuniemy domyślny model z pakietu i zawsze pobieramy model z Firebase przy pierwszym uruchomieniu aplikacji. Dzięki temu podczas przeprowadzania analizy nastawienia możesz mieć pewność, że wnioskowanie działa z użyciem modelu dostarczonego z Firebase.

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

import FirebaseCore
import FirebaseMLModelDownloader

Następnie zaimplementuj poniższe 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. Zintegruj model z aplikacją

Biblioteka zadań Tensorflow Lite pomaga zintegrować modele TensorFlow Lite z aplikacją za pomocą kilku wierszy kodu. Zainicjujemy instancję TFLNLClassifier za pomocą modelu TensorFlow Lite pobranego z Firebase. Następnie użyjemy go, aby sklasyfikować tekst wpisany przez użytkowników aplikacji i wyświetlić wynik w interfejsie.

Dodaj zależność

Otwórz plik Podfile aplikacji i dodaj bibliotekę zadań TensorFlow Lite (Text) w zależnościach aplikacji. 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 nastawienia pobrany z Firebase za pomocą elementu NLClassifier z Biblioteki zadań.

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 nastawienia pobranego z Firebase. Znajdź ten komentarz, który dodaliśmy w ostatnim kroku:

// TODO: Initialize an NLClassifier from the downloaded model

Zastąp pole 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ę nastawienia za pomocą wywołania pojedynczej 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

Udało Ci się zintegrować model analizy nastawienia z aplikacją, więc przetestujmy go. Podłącz urządzenie z iOS i kliknij Uruchom ( Wykonaj.png) na pasku narzędzi Xcode.

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 hostowania modeli TFLite Firebase udostępnia kilka innych funkcji, które usprawniają zastosowania 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 umożliwiające testowanie 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.

Aby dowiedzieć się więcej o korzystaniu z tych funkcji w aplikacji, zapoznaj się z poniższymi ćwiczeniami z programowania:

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 TFLite i przewodnikami na wprowadzenie w Firebase.

Omówione zagadnienia

  • TensorFlow Lite
  • Firebase ML

Następne kroki

  • Mierz szybkość wnioskowania modelu za pomocą Monitorowania wydajności Firebase.
  • Wdróż model z Colab bezpośrednio do 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, aby przetestować model Wektora średniej słownej i model MobileBERT.

Więcej informacji

Masz pytanie?

Zgłaszanie problemów