「文字分類器」工作可讓您將文字歸類到一組已定義的類別,例如正面或負面情緒。類別取決於您使用的模型及模型的訓練方式。這些操作說明將說明如何在 iOS 應用程式中使用文字分類器。您可以前往 GitHub 取得這些操作說明中提及的程式碼範例。
如要查看這項工作的實際運作情形,請參閱此網路示範。如要進一步瞭解這項工作的功能、模型和設定選項,請參閱總覽。
程式碼範例
MediaPipe Tasks 範例程式碼是 iOS 文字分類器應用程式的基本實作。
您可以將該應用程式做為建立自己的 iOS 應用程式的基礎,或在修改現有應用程式時參照。您可以參考 GitHub 上的文字分類器範例程式碼。
下載程式碼
以下操作說明說明如何使用 git 指令列工具建立範例程式碼的本機副本。
如要下載範例程式碼,請按照下列步驟操作:
使用下列指令複製 Git 存放區:
git clone https://github.com/google-ai-edge/mediapipe-samples
您可以選擇設定 git 執行個體以使用稀疏檢查,如此一來,您只有 Text Classifier 範例應用程式的檔案:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/ios/
建立範例程式碼的本機版本後,您可以安裝 MediaPipe 工作程式庫,使用 Xcode 開啟專案,然後執行應用程式。如需操作說明,請參閱 iOS 設定指南。
重要元件
下列檔案包含 Text Classifier 範例應用程式的重要程式碼:
- TextClassifierHelper.swift:初始化文字分類器並處理模型選取作業。
- ViewController.swift:實作 UI 並將結果格式化。
設定
本節說明設定開發環境及程式碼專案以使用文字分類器的重要步驟。如需瞭解如何設定開發環境以使用 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 Dispatch 或 NSOperation 架構在背景執行緒中執行處理作業。
處理並顯示結果
執行推論時,文字分類器工作會傳回 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 檔案示範如何顯示工作傳回的偵測結果。