iOS 文字分類指南

文字分類工作可讓您將文字分類到一組已定義的類別、 例如正面或負面情緒類別是依據 以及您所使用的模型及訓練方式這些操作說明 如何在 iOS 應用程式中使用文字分類器。在這些容器中 如需操作說明,請前往 GitHub

如要查看這項工作的實際運作情形,請參閱這個網頁 示範。適用對象 進一步瞭解 請參閱 總覽

程式碼範例

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

你可以將這個應用程式做為起點,開始使用 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 範例的重要程式碼 應用程式:

設定

本節說明設定開發環境的重要步驟,以及 程式碼專案使用 Text Classifier。如需設定 使用 MediaPipe 工作 (包括平台版本) 的開發環境 規定,請參閱 iOS 設定指南

依附元件

文字分類器使用 MediaPipeTasksText 程式庫 (必須安裝) 開發應用程式這個程式庫同時與 Swift 和 Objective-C 應用程式相容 且不需要額外設定任何特定語言

如需在 macOS 上安裝 CocoaPods 的操作說明,請參閱 CocoaPods 安裝指南。 有關如何建立包含所需 Pod 的 Podfile 的操作說明 請參閱使用 CocoaPods

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

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

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

型號

MediaPipe 文字分類器工作需要經過訓練且彼此相容的模型 透過這項工作如要進一步瞭解 Text Classifier,請參閱工作總覽模型 專區

選取並下載模型,然後用 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 的背景執行緒 調度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 ,示範如何顯示偵測結果 從工作傳回的字串