Android 文字分類指南

MediaPipe 文字分類器工作可讓您將文字分類到一組定義的類別, 例如正面或負面情緒類別是由模型決定 以及訓練模型的方式以下說明 文字分類器與 Android 應用程式搭配使用

您可以前往 demo」。 如要進一步瞭解功能、模型 請參閱總覽一文。

程式碼範例

Text Classifier 的範例程式碼提供了這種簡單的實作方式 做為參考的任務這個程式碼可協助您測試這項工作並開始進行 建立自己的文字分類應用程式您可以瀏覽 文字分類器程式碼範例

下載程式碼

以下說明如何建立範例的本機副本 編寫程式碼。

如要下載範例程式碼,請按照下列步驟操作:

  1. 使用下列指令複製 git 存放區:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 您也可以選擇設定 Git 執行個體,以使用稀疏結帳功能。 所以您只擁有 Text Classifier 範例應用程式的檔案:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

如需使用 Android Studio 設定及執行範例的操作說明, 請參閱「 Android 設定指南

重要元件

以下檔案包含有關文字分類的重要程式碼 範例應用程式:

設定

本節說明設定開發環境的重要步驟,以及 專門使用 Text Classifier 編寫程式碼專案。如需 設定使用 MediaPipe Tasks 的開發環境,包括 平台版本需求,請參閱 Android 設定指南

依附元件

文字分類器使用 com.google.mediapipe:tasks-text 程式庫。新增此項目 Android 應用程式開發專案的 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 可能符合輸入文字的類別這些類別是由 您要使用的模型,如果想不同的類別,請選擇其他模式 也能重新訓練現有素材資源

以下範例顯示這項工作的輸出資料範例:

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-classifier 取得: "an imperfect but overall entertaining mystery"

您可以在程式碼範例中查看如何顯示結果的範例 ResultsAdapter 類別和 ViewHolder 內部類別。