Android 向けテキスト分類ガイド

MediaPipe テキスト分類タスクを使用すると、テキストを一連の定義済みのカテゴリに分類できます。 否定的な感情などですカテゴリはモデルによって そのモデルのトレーニング方法が含まれますここでは、Google Chat で Android アプリでのテキスト分類器です。

このタスクの動作を確認するには、 demo。 機能、モデル、サービスについて詳しくは、 構成オプションの詳細については、概要をご覧ください。

サンプルコード

テキスト分類器のサンプルコードでは、このシンプルな実装を提供しています。 タスクを参照してください。このコードでは、このタスクをテストして、 独自のテキスト分類アプリを構築しました。詳しくは、 テキスト分類器のコード例 ご覧ください。

コードをダウンロードする

次の手順では、サンプルのローカルコピーを作成する方法を示します。 git バージョン管理コマンドライン ツールでコードを作成できます。

<ph type="x-smartling-placeholder">

サンプルコードをダウンロードするには:

  1. 次のコマンドを使用して Git リポジトリのクローンを作成します。
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 必要に応じて、スパース チェックアウトを使用するように Git インスタンスを構成します。 そのため、テキスト分類サンプルアプリのファイルのみになります。
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

Android Studio でサンプルをセットアップして実行する方法については、 コードの設定手順の例については、このモジュールの Android 向けセットアップ ガイド

主要コンポーネント

次のファイルには、テキスト分類に不可欠なコードが含まれています。 サンプルアプリ:

  • TextClassifierHelper.kt - テキスト分類器を初期化し、モデルの選択を処理します。
  • MainActivity.kt - アプリを実装します(TextClassifierHelper の呼び出しなど)と、 ResultsAdapter
  • ResultsAdapter.kt - 結果を処理し、フォーマットします。

セットアップ

このセクションでは、開発環境をセットアップする主な手順と テキスト分類器を使用するコード プロジェクトです。一般的な情報については、 MediaPipe Tasks を使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Android の設定ガイド

<ph type="x-smartling-placeholder">

依存関係

テキスト分類器は com.google.mediapipe:tasks-text ライブラリを使用します。こちらの build.gradle ファイルに依存関係を追加します。 次のコードを使用すると、必要な依存関係をインポートできます。

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

モデル

MediaPipe テキスト分類器タスクには、これと互換性のあるトレーニング済みモデルが必要です タスクを実行します。テキスト分類器で使用可能なトレーニング済みモデルについて詳しくは、以下をご覧ください。 タスクの概要のモデル セクションをご覧ください。

モデルを選択してダウンロードして、プロジェクト assets に保存します ディレクトリ:

<dev-project-root>/src/main/assets

BaseOptions.Builder.setModelAssetPath() メソッドを使用してパスを指定する モデルを定義します。コード例については、次のセクションをご覧ください。

タスクを作成する

テキスト分類器の TextClassifier.createFrom...() 関数のいずれかを使用して、次のことを行います。 タスクを準備します。createFromFile() を使用できます。 トレーニング済みモデルファイルの相対パスまたは絶対パスで関数を呼び出します。コード 以下の例は TextClassifier.createFromOptions() の使用方法を示しています。 使用します。使用可能な構成オプションの詳細については、このモジュールの 構成オプション

次のコードは、このタスクをビルドして構成する方法を示しています。

// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";

fun initClassifier() {
    val baseOptionsBuilder = BaseOptions.builder()
        .setModelAssetPath(currentModel)
    try {
        val baseOptions = baseOptionsBuilder.build()
        val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
            .setBaseOptions(baseOptions)
        val options = optionsBuilder.build()
        textClassifier = TextClassifier.createFromOptions(context, options)
    } catch (e: IllegalStateException) { // exception handling
    }
}

タスクの作成方法の例については、次のコードサンプルをご覧ください。 TextClassifierHelper クラス initClassifier() 関数を使用します。

構成オプション

このタスクには、Android アプリ用に次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
displayNamesLocale 指定された表示名に使うラベルの言語を設定します。 タスクのモデルのメタデータ(利用可能な場合)。デフォルトは en です。 英語。カスタムモデルのメタデータにローカライズされたラベルを追加できます。 TensorFlow Lite Metadata Writer API を使用 言語 / 地域コード en
maxResults オプションの上位スコアの分類結果の最大数を設定します。 戻ります。<0 の場合、利用可能な結果がすべて返されます。 正の数 -1
scoreThreshold 予測スコアのしきい値を設定します。このしきい値は、 モデル メタデータ(存在する場合)この値を下回る結果は拒否されます。 任意の浮動小数点数 未設定
categoryAllowlist 許可するカテゴリ名のオプション リストを設定します。空でない場合、 カテゴリ名がこのセットにない分類結果は、 フィルタで除外されます重複または不明なカテゴリ名は無視されます。 このオプションは categoryDenylist とは相互に排他的であり、 どちらの結果もエラーになります 任意の文字列 未設定
categoryDenylist 許可されていないカテゴリ名のオプション リストを設定します。条件 空でない場合、カテゴリ名がこのセットに含まれている分類結果はフィルタされます できます。重複または不明なカテゴリ名は無視されます。このオプションは categoryAllowlist と排他的であり、両方を使用するとエラーになります。 任意の文字列 未設定

データの準備

テキスト分類器はテキスト(String)データを処理します。タスクはデータ入力を処理し、 これにはトークン化やテンソルの前処理が含まれます。

すべての前処理は classify() 関数内で処理されます。データ アナリストが を使用して、入力テキストを事前に追加前処理します。

String inputText = "The input text to be classified.";

タスクを実行する

テキスト分類器は、TextClassifier.classify() 関数を使用して次を実行します。 説明します。分類の実行に別の実行スレッドを使用する を使用して Android ユーザー インターフェース スレッドをアプリでブロックしないようにします。

次のコードは、タスクで処理を実行する方法を示しています。 別の実行スレッドでモデルを作成します。

    fun classify(text: String) {
        executor = ScheduledThreadPoolExecutor(1)

        executor.execute {
            val results = textClassifier.classify(text)
            listener.onResult(results)
        }
    }

タスクの実行方法の例については、次のコードサンプルをご覧ください。 TextClassifierHelper クラス classify() 関数を使用します。

結果の処理と表示

テキスト分類器は、リストを含む TextClassifierResult を出力します。 カテゴリ候補のセットです。カテゴリは UDM イベントで ですから、異なるカテゴリが必要な場合は、別のモデルを選択します。 既存の画像を再トレーニングできます

このタスクからの出力データの例を次に示します。

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

この結果は、入力テキストに対して BERT 分類器を実行することで取得されました。 "an imperfect but overall entertaining mystery"

コードサンプルで結果を表示する方法の例については、 ResultsAdapter クラスと ViewHolder 内部クラスがあります。