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

テキスト分類タスクを使用すると、一連の定義済みのカテゴリに分類し、 否定的な感情などですカテゴリは 使用するモデルとそのモデルのトレーニング方法によって異なります。これらの手順では、 テキスト分類器を使用する方法ここで説明するコードサンプルは、 手順は GitHub

このタスクの動作を確認するには、こちらのウェブ デモをご覧ください。対象 Google Cloud インフラストラクチャの機能、モデル、構成オプションについて 詳細については、 概要

サンプルコード

MediaPipe Tasks のサンプルコードは、テキスト分類器の基本的な実装です。 アプリ

独自の iOS アプリの出発点としてアプリを使用することも、アプリ自体に言及することもできます。 変更する際の注意点があります。テキスト分類器のサンプルコードについては、 オン GitHub

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

次の手順では、サンプルのローカルコピーを作成する方法を示します。 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/ios/
    

ローカル バージョンのサンプルコードを作成したら、 MediaPipe タスク ライブラリ] に移動し、Xcode を使用してプロジェクトを開き、アプリを実行します。対象 手順については、iOS の設定ガイドをご覧ください。

主要コンポーネント

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

セットアップ

このセクションでは、開発環境をセットアップする主な手順と テキスト分類器を使用するコード プロジェクトです。設定に関する一般的な情報については、 MediaPipe タスクを使用するための開発環境(プラットフォーム バージョンを含む) iOS の設定ガイドをご覧ください。

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

依存関係

テキスト分類器は MediaPipeTasksText ライブラリを使用します。このライブラリはインストールする必要があります。 構築しましたこのライブラリは Swift アプリと Objective-C アプリの両方と互換性がある 言語固有の追加の設定は不要です

macOS に CocoaPods をインストールする手順については、CocoaPods インストール ガイドをご覧ください。 必要な Pod を使用して Podfile を作成する方法については、 詳しくは、 CocoaPods

次のコードを使用して、MediaPipeTasksText Pod を Podfile に追加します。

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 分類器を実行することで取得されました。 "an imperfect but overall entertaining mystery"

ViewController.swift サンプルコードのファイルは、検出結果を表示する方法を示しています。 返されます。