Android の言語検出ガイド

MediaPipe 言語検出タスクを使用すると、テキストの言語を識別できます。ここでは、Android アプリで Language Detector を使用する方法について説明します。この手順で説明されているコードサンプルは、GitHub で入手できます。

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

サンプルコード

言語検出ツールのサンプルコードは、このタスクの簡単な実装を示しています。このコードは、このタスクをテストし、独自の言語検出機能の構築を始めるのに役立ちます。GitHub で Language Detector のサンプルコードを参照できます。

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

次の手順では、git バージョン管理コマンドライン ツールを使用して、サンプルコードのローカルコピーを作成する方法を示します。

サンプルコードをダウンロードするには:

  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/languagedetector/android
    

Android Studio でサンプルをセットアップして実行する手順については、Android 向けセットアップ ガイドのサンプルコードのセットアップ手順をご覧ください。

主要コンポーネント

次のファイルには、テキスト分類サンプルアプリの重要なコードが含まれています。

  • LanguageDetectorHelper.kt - 言語検出機能を初期化し、モデルの選択を処理します。
  • ResultsAdapter.kt - 検出結果を処理し、フォーマットします。
  • MainActivity.kt - アプリを実装します(LanguageDetectorHelperResultsAdapter の呼び出しなど)。

セットアップ

このセクションでは、言語検出ツールを使用するように開発環境とコード プロジェクトを設定する際の主な手順について説明します。プラットフォームのバージョン要件など、MediaPipe タスクを使用するための開発環境の設定に関する一般的な情報については、Android の設定ガイドをご覧ください。

依存関係

言語検出ツールは、com.google.mediapipe:tasks-text ライブラリを使用します。この依存関係を Android アプリ開発プロジェクトの build.gradle ファイルに追加します。必要な依存関係は次のコードでインポートできます。

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

モデル

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

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

<dev-project-root>/src/main/assets

ModelName パラメータ内にモデルのパスを指定します。

タスクを作成する

タスクを作成するには、createFrom...() 関数のいずれかを使用します。createFromOptions() 関数は、言語検出器の構成オプションを受け入れます。createFromFile() ファクトリ関数を使用してタスクを初期化することもできます。createFromFile() 関数には、トレーニング済みモデルファイルへの相対パスまたは絶対パスを指定できます。タスクの構成の詳細については、構成オプションをご覧ください。

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

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

タスクの作成方法については、コードサンプルの LanguageDetectorHelper クラスの initDetector() 関数をご覧ください。

構成オプション

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

オプション名 説明 値の範囲 デフォルト値
maxResults スコアが上位の言語予測を返す場合の最大数を設定します(省略可)。この値が 0 未満の場合、利用可能なすべての結果が返されます。 任意の正の数 -1
scoreThreshold モデル メタデータ(存在する場合)で指定された値をオーバーライドする予測スコアのしきい値を設定します。この値を下回る結果は拒否されます。 任意の浮動小数点数 未設定
categoryAllowlist 使用できる言語コードのオプション リストを設定します。空でない場合、言語コードがこのセットにない言語予測は除外されます。このオプションは categoryDenylist と相互に排他的であり、両方を使用するとエラーになります。 任意の文字列 未設定
categoryDenylist 使用できない言語コードのオプション リストを設定します。空でない場合、言語コードがこのセット内にある言語予測は除外されます。このオプションは categoryAllowlist と相互に排他的であり、両方を使用するとエラーになります。 任意の文字列 未設定

データの準備

言語検出機能はテキスト(String)データを扱います。このタスクは、トークン化やテンソルの前処理などのデータ入力の前処理を処理します。すべての前処理は detect() 関数内で処理されます。入力テキストを事前に追加で前処理する必要はありません。

String inputText = "Some input text for the language detector";

タスクを実行する

言語検出機能は、LanguageDetector.detect() メソッドを使用して入力テキストを処理し、テキストの言語を予測します。アプリで Android ユーザー インターフェース スレッドがブロックされないように、検出の実行には別の実行スレッドを使用する必要があります。

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

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

タスクを実行する方法の例については、LanguageDetectorHelper クラスの detect() 関数のコード例をご覧ください。

結果を処理して表示する

言語検出機能は、言語予測のリストと予測の確率で構成される LanguageDetectorResult を出力します。言語カテゴリはモデルで定義されます。使用するモデルの詳細については、タスクの概要のモデル セクションをご覧ください。

このタスクからの出力データの例を次に示します。

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

この結果は、入力テキスト("Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.")に対してモデルを実行することで取得されています。

結果を表示する方法の例については、ResultsAdapter クラスと ViewHolder 内部クラスのコード例をご覧ください。