1. 概要

TensorFlow Lite と Firebase を使用したテキスト分類の Codelab へようこそ。この Codelab では、TensorFlow Lite と Firebase を使用してテキスト分類モデルをトレーニングし、アプリにデプロイする方法を学びます。この Codelab は、こちらの TensorFlow Lite の サンプルに基づいています。
テキスト分類とは、テキストの内容に応じてタグやカテゴリを割り当てるプロセスです。感情分析、トピック ラベル付け、スパム検出、インテント検出など、幅広い用途で活用できる自然言語処理(NLP)の基本的なタスクの 1 つです。
感情分析とは、テキスト分析の手法を使用して、テキスト データ内の感情(肯定的、否定的、中立的)を解釈して分類することです。感情分析により、企業はオンラインでの会話やフィードバックで、プロダクト、ブランド、サービスに対する顧客の感情を把握できます。
このチュートリアルでは、感情分析用の機械学習モデルを構築する方法、特にテキストを肯定的または否定的に分類する方法について説明します。これは、バイナリ分類(2 クラス分類)の例です。バイナリ分類は、重要かつ幅広い用途で適用できる機械学習の問題です。
学習内容
- TF Lite Model Maker を使用して TF Lite 感情分析モデルをトレーニングする
- TF Lite モデルを Firebase ML にデプロイし、アプリからアクセスする
- Firebase 向け Google アナリティクスでユーザー フィードバックを追跡してモデルの精度を測定する
- Firebase Performance Monitoring でモデルのパフォーマンスをプロファイリングする
- Remote Config を使用して、デプロイされた複数のモデルのうち、どれを読み込むかを選択する
- Firebase A/B Testing を使用してさまざまなモデルをテストする
必要なもの
- Xcode 11 以降
- CocoaPods 1.9.1 以降
このチュートリアルをどのように使用されますか?
Android アプリ作成のご経験についてお答えください。
2. Firebase コンソール プロジェクトを作成する
プロジェクトに Firebase を追加する
- Firebase コンソールに移動します。
- [新しいプロジェクトを作成] を選択し、プロジェクトに「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 プロジェクトのルートにドラッグします。

Podfile に Firebase を追加して、pod install を実行します。
pod 'FirebaseMLModelDownloader', '9.3.0-beta'
AppDelegate の didFinishLaunchingWithOptions メソッドで、ファイルの先頭に Firebase をインポートします。
import FirebaseCore
Firebase を構成する呼び出しを追加します。
FirebaseApp.configure()
プロジェクトをもう一度実行して、アプリが正しく構成され、起動時にクラッシュしないことを確認します。
4. 感情分析モデルをトレーニングする
TensorFlow Lite Model Maker を使用して、指定されたテキストの感情を予測するテキスト分類モデルをトレーニングします。
このステップは、Google Colab で開くことができる Python ノートブックとして提供されます。
Colab で開く
このステップを完了すると、モバイルアプリにデプロイできる TensorFlow Lite 感情分析モデルが作成されます。
5. Firebase ML にモデルをデプロイする
Firebase ML にモデルをデプロイする主な理由は 2 つあります。
- アプリのインストール サイズを小さく保ち、必要な場合にのみモデルをダウンロードできる
- モデルを定期的に更新でき、アプリ全体とは異なるリリース サイクルで更新できる
モデルは、コンソールまたは Firebase Admin SDK を使用してプログラムでデプロイできます。このステップでは、コンソールを使用してデプロイします。
まず、[Firebase Console] を開き、左側のナビゲーション パネルで [Machine Learning] をクリックします。初めて開く場合は、[使ってみる] をクリックします。[カスタム] に移動し、[モデルを追加] ボタンをクリックします。
プロンプトが表示されたら、モデルに sentiment_analysis という名前を付け、前のステップで Colab からダウンロードしたファイルをアップロードします。

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.swift の viewDidLoad で、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 を実行して、新しい依存関係をインストールします。
テキスト分類器を初期化する
次に、Task Library の 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 インスタンスを設定したら、1 回のメソッド呼び出しで感情分析を実行できます。
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 デバイスを接続し、Xcode ツールバーの [実行](
)をクリックします。
入力した映画レビューの感情を正しく予測できるはずです。

9. Firebase のその他の機能でアプリを強化する
Firebase には、TFLite モデルのホスティング以外にも、機械学習のユースケースを強化するための機能がいくつか用意されています。
- Firebase Performance Monitoring: ユーザーのデバイスで実行されているモデルの推論速度を測定します。
- Firebase 向け Google アナリティクス: ユーザーの反応を測定して、本番環境でのモデルのパフォーマンスを測定します。
- Firebase A/B Testing: モデルの複数のバージョンをテストします。
- 以前に TFLite モデルの 2 つのバージョンをトレーニングしたことを覚えていますか?A/B テストは、本番環境でどちらのバージョンがより優れたパフォーマンスを発揮するかを確認するのに適しています。
アプリでこれらの機能を活用する方法について詳しくは、以下の Codelab をご覧ください。
10. 完了
この Codelab では、感情分析 TFLite モデルをトレーニングし、Firebase を使用してモバイルアプリにデプロイする方法を学びました。TFLite と Firebase の詳細については、他の TFLite サンプルと Firebase スタートガイドをご覧ください。
学習した内容
- TensorFlow Lite
- Firebase ML
次のステップ
- Firebase Performance Monitoring でモデルの推論速度を測定する。
- Firebase ML Model Management API を使用して、Colab から Firebase にモデルを直接デプロイする。
- ユーザーが予測結果についてフィードバックできるようにするメカニズムを追加し、Firebase 向け Google アナリティクスを使用してユーザー フィードバックを追跡する。
- Firebase A/B Testing を使用して、Average Word Vector モデルと MobileBERT モデルの A/B テストを行う。
詳細
- Firebase Machine Learning のドキュメント
- TensorFlow Lite のドキュメント
- Firebase でアプリのパフォーマンスを測定する
- Firebase でモデルの A/B テストを行う