iOS 文字分類指南

「文字分類器」工作可讓您將文字歸類到一組已定義的類別,例如正面或負面情緒。類別取決於您使用的模型及模型的訓練方式。這些操作說明將說明如何在 iOS 應用程式中使用文字分類器。您可以前往 GitHub 取得這些操作說明中提及的程式碼範例。

如要查看這項工作的實際運作情形,請參閱此網路示範。如要進一步瞭解這項工作的功能、模型和設定選項,請參閱總覽

程式碼範例

MediaPipe Tasks 範例程式碼是 iOS 文字分類器應用程式的基本實作。

您可以將該應用程式做為建立自己的 iOS 應用程式的基礎,或在修改現有應用程式時參照。您可以參考 GitHub 上的文字分類器範例程式碼。

下載程式碼

以下操作說明說明如何使用 git 指令列工具建立範例程式碼的本機副本。

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

  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/ios/
    

建立範例程式碼的本機版本後,您可以安裝 MediaPipe 工作程式庫,使用 Xcode 開啟專案,然後執行應用程式。如需操作說明,請參閱 iOS 設定指南

重要元件

下列檔案包含 Text Classifier 範例應用程式的重要程式碼:

設定

本節說明設定開發環境及程式碼專案以使用文字分類器的重要步驟。如需瞭解如何設定開發環境以使用 MediaPipe 工作 (包括平台版本需求),請參閱「iOS 設定指南」。

依附元件

文字分類器會使用 MediaPipeTasksText 程式庫,而此程式庫必須使用 CocoaPods 安裝。這個程式庫與 Swift 和 Objective-C 應用程式相容,不需要任何其他語言的特定設定。

如需在 macOS 上安裝 CocoaPods 的操作說明,請參閱 CocoaPods 安裝指南。 如要瞭解如何建立具有應用程式必要 Pod 的 Podfile,請參閱「使用 CocoaPods」。

使用下列程式碼,在 Podfile 中新增 MediaPipeTasksText Pod:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

如果您的應用程式含有單元測試目標,請參閱 iOS 設定指南,進一步瞭解如何設定 Podfile

型號

MediaPipe 文字分類器工作需要使用與這項工作相容的已訓練模型。如要進一步瞭解文字分類器的可用已訓練模型,請參閱工作總覽「模型」一節

選取並下載模型,然後使用 Xcode 將其新增至專案目錄。 如需將檔案新增至 Xcode 專案的操作說明,請參閱「管理 Xcode 專案中的檔案和資料夾」。

使用 BaseOptions.modelAssetPath 屬性指定應用程式套件中的模型路徑。如需程式碼範例,請參閱下一節。

建立工作

如要建立文字分類器工作,請呼叫其中一個初始化器。TextClassifier(options:) 初始化器會設定設定選項的值。

如果您不需要使用自訂設定選項初始化的文字分類器,可以使用 TextClassifier(modelPath:) 初始化器,以預設選項建立文字分類器。如要進一步瞭解設定選項,請參閱「設定總覽」。

下列程式碼示範如何建構及設定這項工作。

Swift

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

設定選項

這項工作的 iOS 應用程式設定選項如下:

選項名稱 說明 值範圍 預設值
displayNamesLocale 設定標籤語言,用於工作模型中繼資料內的顯示名稱 (如有)。英文的預設值是 en。您可以使用 TensorFlow Lite Metadata Writer API,在自訂模型的中繼資料中加入本地化標籤。語言代碼 en
maxResults 設定要傳回的最高評分分類結果數量上限 (選用)。如果小於 0,系統會傳回所有可用的結果。 任何正數 -1
scoreThreshold 設定預測分數門檻,覆寫模型中繼資料 (如有) 中提供的分數門檻。這個值下方的結果遭到拒絕。 不限浮點值 未設定
categoryAllowlist 設定允許的類別名稱 (選用)。如果不是空白,系統會篩除類別名稱不在這個組合中的分類結果。系統會忽略重複或不明的類別名稱。這個選項與 categoryDenylist 互斥,且同時使用兩者會導致錯誤。 任何字串 未設定
categoryDenylist 設定不允許使用的類別名稱清單。如果不是空白,系統會篩除類別名稱在此集合中的分類結果。系統會忽略重複或不明的類別名稱。這個選項與 categoryAllowlist 互斥,且同時使用兩者會導致錯誤。 任何字串 未設定

準備資料

文字分類器適用於文字資料,這項工作會處理資料輸入預先處理作業,包括代碼化和張量預先處理。

所有預先處理作業都會在 classify(text:) 函式中處理。不需要事先對輸入文字進行額外的預先處理。

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

執行工作

如要執行文字分類器,請使用 classify(text:) 方法。文字分類器會傳回輸入文字的可能類別。

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

注意:工作會封鎖目前的執行緒,直到其完成文字推論作業為止。為避免封鎖目前的執行緒,請使用 iOS DispatchNSOperation 架構在背景執行緒中執行處理作業。

處理並顯示結果

執行推論時,文字分類器工作會傳回 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"

範例程式碼中的 ViewController.swift 檔案示範如何顯示工作傳回的偵測結果。