TensorFlow Lite と Firebase を使用してオンデバイス テキスト分類をアプリに追加する - iOS Codelab

1。概要

分類結果画面.png

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

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

感情分析は、テキスト分析技術を使用して、テキスト データ内の感情 (肯定的、否定的、中立的) を解釈および分類することです。センチメント分析を使用すると、企業はオンラインでの会話やフィードバックから、製品、ブランド、サービスに対する顧客のセンチメントを特定できます。

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

学べること

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

必要なもの

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

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

あくまで通読してくださいそれを読んで演習を完了してください

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

初心者中級熟練した

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

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

  1. Firebase コンソールに移動します。
  2. [新しいプロジェクトの作成]を選択し、プロジェクトに「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 ノートブックとして表示されます。

コラボで開く

このステップを完了すると、モバイル アプリにデプロイする準備ができた TensorFlow Lite センチメント分析モデルが完成します。

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

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

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

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

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

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

依存関係を追加する

アプリの Podfile に移動し、アプリの依存関係に TensorFlow Lite タスク ライブラリ (テキスト) を追加します。 target 'TextClassification'宣言の下に依存関係を必ず追加してください。

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

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

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

ViewController.swift

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

import TensorFlowLiteTaskText

最後のステップで変更したメソッドの上にあるこのコメントを見つけてください。

// TODO: Add a 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 デバイスを接続し、「実行」( 実行.png ) Xcode ツールバーにあります。

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

分類結果画面.png

9. Firebase 機能を追加してアプリをパワーアップする

TFLite モデルをホストするだけでなく、Firebase は機械学習のユースケースを強化するための他の機能をいくつか提供します。

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

アプリでこれらの機能を活用する方法の詳細については、以下のコードラボを確認してください。

10. おめでとうございます!

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

私たちがカバーした内容

  • TensorFlow Lite
  • Firebase ML

次のステップ

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

もっと詳しく知る

質問があります?

問題を報告する