TensorFlowLiteとFirebaseを使用してデバイス上のテキスト分類をアプリに追加する-iOSCodelab

1。概要

classification_result_screen.png

TensorFlow Lite と Firebase Codelab を使用したテキスト分類へようこそ。この Codelab では、TensorFlow Lite と Firebase を使用してテキスト分類モデルをトレーニングし、アプリにデプロイする方法を学びます。この Codelab は、この TensorFlow Lite のに基づいています。

テキスト分類は、その内容に従ってテキストにタグまたはカテゴリを割り当てるプロセスです。これは、自然言語処理 (NLP) の基本的なタスクの 1 つであり、感情分析、トピックのラベル付け、スパム検出、意図検出などの幅広い用途に使用されます。

感情分析とは、テキスト分析手法を使用して、テキスト データ内の感情 (ポジティブ、ネガティブ、ニュートラル) を解釈および分類することです。感情分析により、企業はオンラインでの会話やフィードバックから、製品、ブランド、またはサービスに対する顧客の感情を特定できます。

このチュートリアルでは、感情分析用の機械学習モデルを構築する方法、特にテキストをポジティブまたはネガティブに分類する方法を示します。これは、2 値 (2 クラス) 分類の例であり、重要かつ広く適用可能な種類の機械学習の問題です。

学習内容

  • TF Lite Model Maker を使用して TF Lite 感情分析モデルをトレーニングする
  • TF Lite モデルを Firebase ML にデプロイし、アプリからアクセスする
  • ユーザー フィードバックを追跡して、Firebase Analytics でモデルの精度を測定する
  • Firebase Performance Monitoring によるモデル パフォーマンスのプロファイリング
  • 複数のデプロイされたモデルのどれを Remote Config を介してロードするかを選択します
  • Firebase A/B Testing でさまざまなモデルを試す

必要なもの

  • Xcode 11 (またはそれ以上)
  • CocoaPods 1.9.1 (またはそれ以降)

このチュートリアルをどのように使用しますか?

読み通すだけそれを読んで演習を完了してください

Android アプリの構築に関するあなたの経験をどのように評価しますか?

初心者中級熟練した

2. Firebase コンソール プロジェクトを作成する

プロジェクトに Firebase を追加する

  1. Firebase コンソールに移動します。
  2. [ Create New Project ] を選択し、プロジェクトに「Firebase ML iOS Codelab」という名前を付けます。

3. サンプル プロジェクトを入手する

コードをダウンロード

サンプル プロジェクトのクローンを作成し、プロジェクト ディレクトリでpod updateを実行することから始めます。

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

git がインストールされていない場合は、GitHub ページから、またはこのリンクをクリックして、サンプル プロジェクトをダウンロードすることもできます。プロジェクトをダウンロードしたら、Xcode で実行し、テキスト分類をいじってみて、どのように機能するかを感じてください。

Firebase をセットアップする

ドキュメントに従って、新しい Firebase プロジェクトを作成します。プロジェクトを取得したら、プロジェクトのGoogleService-Info.plistファイルをFirebase コンソールからダウンロードし、Xcode プロジェクトのルートにドラッグします。

9efb62a92f27e939.png

Firebase を Podfile に追加し、pod install を実行します。

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

AppDelegatedidFinishLaunchingWithOptionsメソッドで、ファイルの先頭にある Firebase をインポートします

import FirebaseCore

そして、Firebase を構成するための呼び出しを追加します。

FirebaseApp.configure()

プロジェクトを再度実行して、アプリが正しく構成され、起動時にクラッシュしないことを確認します。

4. 感情分析モデルをトレーニングする

TensorFlow Lite Model Maker を使用してテキスト分類モデルをトレーニングし、特定のテキストのセンチメントを予測します。

このステップは、Google Colab で開くことができる Python ノートブックとして表示されます。

Colab で開く

このステップを完了すると、TensorFlow Lite 感情分析モデルが作成され、モバイル アプリにデプロイする準備が整います。

5. モデルを Firebase ML にデプロイする

モデルを Firebase ML にデプロイすると、次の 2 つの主な理由で役立ちます。

  1. アプリのインストール サイズを小さく保ち、必要な場合にのみモデルをダウンロードできます
  2. モデルは、アプリ全体とは異なるリリース サイクルで定期的に更新できます。

モデルは、コンソールを介してデプロイするか、Firebase Admin SDK を使用してプログラムでデプロイできます。このステップでは、コンソールからデプロイします。

まず、 Firebase コンソールを開き、左側のナビゲーション パネルで [機械学習] をクリックします。初めて開く場合は、[Get Started] をクリックします。次に、[カスタム] に移動し、[モデルの追加] ボタンをクリックします。

プロンプトが表示されたら、モデルに「 sentiment_analysis 」という名前を付け、前の手順で Colab からダウンロードしたファイルをアップロードします。

3c3c50e6ef12b3b.png

6. Firebase ML からモデルをダウンロードする

TFLite モデルは比較的大きくなる可能性があるため、Firebase からアプリにリモート モデルをダウンロードするタイミングを選択するのは難しい場合があります。理想的には、アプリの起動時にモデルをすぐにロードすることは避けたいと考えています。モデルが 1 つの機能だけに使用され、ユーザーがその機能をまったく使用しない場合、理由もなく大量のデータをダウンロードしてしまうからです。また、Wi-Fi に接続しているときにのみモデルを取得するなどのダウンロード オプションを設定することもできます。ネットワークに接続していなくてもモデルを利用できるようにしたい場合は、バックアップとしてアプリなしでモデルをバンドルすることも重要です。

簡単にするために、デフォルトのバンドル モデルを削除し、アプリの初回起動時に常に Firebase からモデルをダウンロードします。このようにして、感情分析を実行するときに、Firebase から提供されたモデルで推論が実行されていることを確認できます。

ModelLoader.swiftの上部で、Firebase モジュールをインポートします。

import FirebaseCore
import FirebaseMLModelDownloader

次に、以下のメソッドを実装します。

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.swiftviewDidLoadで、 loadModel()への呼び出しを新しいモデル ダウンロード メソッドに置き換えます。

// 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
}

アプリを再実行します。数秒後、リモート モデルが正常にダウンロードされたことを示すログが Xcode に表示されます。テキストを入力してみて、アプリの動作が変わっていないことを確認してください。

7. モデルをアプリに統合する

TensorFlow Lite Task Library を使用すると、わずか数行のコードで TensorFlow Lite モデルをアプリに統合できます。 Firebase からダウンロードした TensorFlow Lite モデルを使用してTFLNLClassifierインスタンスを初期化します。次に、それを使用してアプリ ユーザーからのテキスト入力を分類し、結果を UI に表示します。

依存関係を追加する

アプリの Podfile に移動し、アプリの依存関係に TensorFlow Lite Task Library (Text) を追加します。 target 'TextClassification'宣言の下に依存関係を追加してください。

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

pod installを実行して、新しい依存関係をインストールします。

テキスト分類器を初期化する

次に、タスク ライブラリのNLClassifierを使用して、Firebase からダウンロードした感情分析モデルを読み込みます。

ViewController.swift

TFLNLClassifier インスタンス変数を宣言しましょう。ファイルの先頭で、新しい依存関係をインポートします。

import TensorFlowLiteTaskText

最後のステップで変更したメソッドの上にある次のコメントを見つけます。

// TODO: Add an TFLNLClassifier property.

TODO を次のコードに置き換えます。

private var classifier: TFLNLClassifier?

Firebase からダウンロードした感情分析モデルでtextClassifier変数を初期化します。最後のステップで追加した次のコメントを見つけます。

// TODO: Initialize an NLClassifier from the downloaded model

TODO を次のコードに置き換えます。

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

テキストを分類する

classifierインスタンスが設定されたら、単一のメソッド呼び出しで感情分析を実行できます。

ViewController.swift

classify(text:)メソッドで、TODO コメントを見つけます。

// TODO: Run sentiment analysis on the input text

コメントを次のコードに置き換えます。

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.最終的なアプリを実行する

感情分析モデルをアプリに統合したので、テストしてみましょう。 iOS デバイスを接続し、[実行] ( execute.png ) Xcode ツールバーで。

アプリは、入力した映画レビューの感情を正しく予測できる必要があります。

classification_result_screen.png

9. Firebase の機能を追加してアプリを強化する

TFLite モデルをホストするだけでなく、Firebase には、機械学習のユースケースを強化するためのいくつかの機能が用意されています。

  • Firebase Performance Monitoring を使用して、ユーザーのデバイスで実行されているモデルの推論速度を測定します。
  • ユーザーの反応を測定することで、本番環境でのモデルのパフォーマンスを測定するための Firebase Analytics。
  • モデルの複数のバージョンをテストするための Firebase A/B Testing
  • 以前に TFLite モデルの 2 つのバージョンをトレーニングしたことを覚えていますか? A/B テストは、本番環境でどのバージョンのパフォーマンスが優れているかを調べる良い方法です。

アプリでこれらの機能を活用する方法について詳しくは、以下の Codelab をご覧ください。

10.おめでとう!

この Codelab では、感情分析 TFLite モデルをトレーニングし、Firebase を使用してモバイルアプリにデプロイする方法を学びました。 TFLite と Firebase の詳細については、他のTFLiteサンプルと Firebase 入門ガイドをご覧ください。

カバーした内容

  • TensorFlow ライト
  • ファイアベース ML

次のステップ

  • Firebase Performance Monitoring でモデルの推論速度を測定します。
  • Firebase ML Model Management API を使用して、モデルを Colab から Firebase に直接デプロイします。
  • ユーザーが予測結果についてフィードバックできるメカニズムを追加し、Firebase Analytics を使用してユーザー フィードバックを追跡します。
  • Firebase A/B テストを使用して、Average Word Vector モデルと MobileBERT モデルの A/B テストを行います。

もっと詳しく知る

質問があります?

問題を報告する