Android の言語検出ガイド

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

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

サンプルコード

言語検出機能のサンプルコードは、上記のコードを タスクを参照してください。このコードでは、このタスクをテストして、 独自の言語検出機能を構築できます。詳しくは、 言語検出機能のサンプルコード ご覧ください。

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

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

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

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

  1. 次のコマンドを使用して Git リポジトリのクローンを作成します。
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 必要に応じて、スパース チェックアウトを使用するように Git インスタンスを構成します。 これで、Language Detector サンプルアプリのファイルのみが存在することになります。
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Android Studio でサンプルをセットアップして実行する方法については、 コードの設定手順の例については、このモジュールの Android 向けセットアップ ガイド

主要コンポーネント

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

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

セットアップ

このセクションでは、開発環境をセットアップする主な手順と Language Detector を使用するコード プロジェクトを作成することにしました。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Android の設定ガイド

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

依存関係

言語検出機能は、com.google.mediapipe:tasks-text ライブラリを使用します。こちらの 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 内部クラスがあります。