Python のテキスト分類ガイド

MediaPipe テキスト分類タスクを使用すると、肯定的な感情や否定的な感情など、定義された一連のカテゴリにテキストを分類できます。カテゴリは使用するモデルと モデルのトレーニング方法によって決まりますここでは、Python でテキスト分類器を使用する方法について説明します。

このタスクの実際の動作は、ウェブデモで確認できます。このタスクの機能、モデル、構成オプションの詳細については、概要をご覧ください。

サンプルコード

参考までに、テキスト分類器のサンプルコードには、このタスクの完全な実装が Python で用意されています。このコードは、このタスクをテストして独自のテキスト分類アプリの作成を開始する際に役立ちます。テキスト分類器のサンプルコードをウェブブラウザだけで表示、実行、編集できます。

Raspberry Pi 用のテキスト分類器を実装する場合は、Raspberry Pi サンプルアプリをご覧ください。

セットアップ

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

パッケージ

テキスト分類器は mediapipe pip パッケージを使用します。これらの依存関係は、次のコマンドでインストールできます。

$ python -m pip install mediapipe

インポート

テキスト分類タスク関数にアクセスするには、次のクラスをインポートします。

from mediapipe.tasks import python
from mediapipe.tasks.python import text

モデル

MediaPipe テキスト分類タスクには、このタスクと互換性のあるトレーニング済みモデルが必要です。テキスト分類器で利用可能なトレーニング済みモデルの詳細については、タスクの概要のモデル セクションをご覧ください。

モデルを選択してダウンロードし、ローカル ディレクトリに保存します。

model_path = '/absolute/path/to/text_classifier.tflite'

次のように、BaseOptions オブジェクトの model_asset_path パラメータを使用してモデルのパスを指定します。

base_options = BaseOptions(model_asset_path=model_path)

タスクを作成する

MediaPipe テキスト分類タスクは、create_from_options 関数を使用してタスクをセットアップします。create_from_options 関数は、分類オプションを設定するための構成オプションの値を受け入れます。create_from_model_path ファクトリ関数を使用してタスクを初期化することもできます。create_from_model_path 関数は、トレーニング済みモデルファイルへの相対パスまたは絶対パスを受け入れます。構成オプションの詳細については、構成オプションをご覧ください。

次のコードは、このタスクをビルドして構成する方法を示しています。

base_options = python.BaseOptions(model_asset_path=model_path)
options = text.TextClassifierOptions(base_options=base_options)

with python.text.TextClassifier.create_from_options(options) as classifier:
  classification_result = classifier.classify(text)

構成オプション

このタスクには、Android アプリ用に次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
display_names_locale タスクのモデルのメタデータで提供される表示名に使用するラベルの言語を設定します(利用可能な場合)。英語の場合、デフォルトは en です。TensorFlow Lite Metadata Writer API を使用して、カスタムモデルのメタデータにローカライズされたラベルを追加できます。言語 / 地域コード en
max_results 返されるトップスコアの分類結果の最大数を設定します(省略可)。0 未満の場合、利用可能なすべての結果が返されます。 任意の正の数 -1
score_threshold モデル メタデータ(存在する場合)で指定された値をオーバーライドする予測スコアのしきい値を設定します。この値を下回る結果は拒否されます。 任意の浮動小数点数 未設定
category_allowlist 許可されるカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットにない分類結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。 このオプションは category_denylist と相互に排他的であり、両方を使用するとエラーが発生します。 任意の文字列 未設定
category_denylist 使用できないカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットに含まれる分類結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。このオプションは category_allowlist と相互に排他的であり、両方を使用するとエラーになります。 任意の文字列 未設定

データの準備

テキスト分類器はテキスト(str)データを処理します。このタスクは、トークン化やテンソルの前処理などのデータ入力の前処理を処理します。

すべての前処理は classify 関数内で処理されます。入力テキストを事前に追加で前処理する必要はありません。

input_text = 'The input text to be classified.'

タスクを実行する

テキスト分類器は、classify 関数を使用して推論をトリガーします。テキスト分類の場合、これは入力テキストに該当するカテゴリを返します。

次のコードは、タスクモデルで処理を実行する方法を示しています。

with python.text.TextClassifier.create_from_options(options) as classifier:
  classification_result = classifier.classify(text)

結果を処理して表示する

テキスト分類器は、入力テキストに考えられるカテゴリのリストを含む 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

この結果は、入力テキスト "an imperfect but overall entertaining mystery" に対して BERT 分類器を実行して取得されています。