1. 概要
「TensorFlow Lite と Firebase によるテキスト分類」Codelab にようこそ。この Codelab では、TensorFlow Lite と Firebase を使用してテキスト分類モデルをトレーニングし、アプリにデプロイする方法を学びます。この Codelab は、こちらの TensorFlow Lite の例に基づいています。
テキスト分類とは、内容に応じてタグやカテゴリをテキストに割り当てるプロセスです。自然言語処理(NLP)の基本タスクの一つで、感情分析、トピックのラベル付け、スパム検出、インテント検出などの幅広い用途に応用されています。
感情分析とは、テキスト分析技術を使用して、テキストデータ内の感情(ポジティブ、ネガティブ、ニュートラル)を解釈して分類することです。感情分析を使用すると、企業はオンラインでの会話やフィードバックから、製品、ブランド、サービスに対する顧客の感情を特定できます。
このチュートリアルでは、感情分析、特にテキストを肯定的または否定的に分類するための ML モデルを構築する方法について説明します。これは ML の問題で広く適用できる重要で、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 アプリの作成に関するご経験について、満足度をお知らせください。
<ph type="x-smartling-placeholder">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 プロジェクトを作成します。プロジェクトを取得したら、Firebase コンソールからプロジェクトの GoogleService-Info.plist
ファイルをダウンロードして、Xcode プロジェクトのルートにドラッグします。
Firebase を Podfile に追加し、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 コンソールを開き、左側のナビゲーション パネルで [ML] をクリックします。[使ってみる] をクリックします選択します[カスタム]を選択します[モデルを追加]をクリックします] ボタンを離します。
プロンプトが表示されたら、モデルに 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 タスク ライブラリ(Text)を追加します。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
インスタンスを設定したら、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 モデルのホスティング以外にも、ML のユースケースを強化するための機能がいくつか用意されています。
- Firebase Performance Monitoring を使用して、ユーザーのデバイスで実行されているモデルの推論速度を測定ダウンロードします
- Firebase Analytics を使用して、ユーザーの反応を測定することで、本番環境でのモデルのパフォーマンスを測定します。
- Firebase A/B Testing を使用してモデルの複数のバージョンをテストする
- 先ほど TFLite モデルの 2 つのバージョンをトレーニングしたことを覚えていますか?A/B テストは、本番環境でのパフォーマンスが優れているバージョンを調べるのに適しています。
これらの機能をアプリで活用する方法について詳しくは、以下の Codelab をご覧ください。
10. 完了
この Codelab では、Firebase を使用して感情分析の TFLite モデルをトレーニングし、モバイルアプリにデプロイする方法を学習しました。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 ML のドキュメント
- TensorFlow Lite のドキュメント
- Firebase でアプリのパフォーマンスを測定する
- Firebase を使用した A/B Testing モデル