Android 向けテキスト埋め込みガイド

MediaPipe Text Embedder タスクを使用すると、テキストデータの数値表現を作成して、 意味を取得します。ここでは、 Android アプリでのテキスト埋め込み。

機能、モデル、構成オプションの詳細については、 概要をご覧ください。

サンプルコード

MediaPipe Tasks のサンプルコードはテキスト埋め込みの単純な実装です アプリこの例では、2 つの単語間の意味的類似性を評価します。 テキストで構成されており、実際の Android デバイスまたは Android ダウンロードします。

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

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

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

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

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

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

サンプルコードのローカル バージョンを作成したら、プロジェクトをインポートできます。 アプリを実行します。手順については、セットアップ ガイド: Android

主要コンポーネント

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

  • TextEmbedderHelper.kt テキスト埋め込みを初期化し、モデルとデリゲートの選択を処理します。
  • MainActivity.kt: アプリを実装し、ユーザー インターフェース コンポーネントを組み立てます。

セットアップ

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

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

依存関係

テキスト エンベディングでは、com.google.mediapipe:tasks-text ライブラリを使用します。こちらの build.gradle ファイルに依存関係を追加します。 次のコードを使用すると、必要な依存関係をインポートできます。

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

モデル

MediaPipe Text Embedder タスクには、この変換と互換性のあるトレーニング済みモデルが必要です タスクを実行します。テキスト エンベディングで利用可能なトレーニング済みモデルについて詳しくは、以下をご覧ください。 タスクの概要のモデル セクションをご覧ください。

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

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

ModelAssetPath パラメータ内でモデルのパスを指定します。 setupTextEmbedder() 関数の TextEmbedderHelper.kt ファイル:

BaseOptions.Builder.setModelAssetPath() 関数を使用してパスを指定する 使用されます。このメソッドは、次のコードサンプルで参照されています。 。

タスクを作成する

タスクを作成するには、createFrom...() 関数のいずれかを使用します。「 createFromOptions() 関数は、埋め込み機能を設定する構成オプションを受け入れます。 。createFromFile() ファクトリを使用してタスクを初期化することもできます。 使用します。createFromFile() 関数は、相対パスまたは絶対パスを受け入れます。 モデルファイルが生成されます。構成オプションの詳細については、このモジュールの 構成オプション

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

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

サンプルコードの実装例では、 setupTextEmbedder() 関数を次の TextEmbedderHelper.kt 表示されます。

構成オプション

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

オプション名 説明 値の範囲 デフォルト値
l2_normalize 返された特徴ベクトルを L2 ノルムで正規化するかどうか。 このオプションは、モデルにネイティブ L2_NORMALIZATION TFLite 演算ほとんどの場合はこれがすでに行われており、 そのため、L2 正規化は TFLite 推論によって実現され、 指定します。 Boolean False
quantize 返されたエンベディングを、次を使用してバイトに量子化するかどうか スカラー量子化です。エンベディングは暗黙的にユニットノルムであると想定され、 したがって、どのディメンションも [-1.0, 1.0] の範囲の値を持つことが保証されます。使用 そうでない場合は l2_normalize オプションを使用します。 Boolean False

データの準備

テキスト エンベディングはテキスト(String)データを処理します。タスクはデータ入力を処理し、 これにはトークン化やテンソルの前処理が含まれます。すべて 前処理は embed() 関数内で処理されます。インフラストラクチャを 入力テキストを事前に追加前処理します。

val inputText = "The input text to be embedded."

タスクを実行する

テキスト エンベディングは、embed 関数を使用して推論をトリガーします。テキストの場合 エンべディングとは、入力テキストのエンべディング ベクトルを返すことを意味します。

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

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

このコード例では、embed 関数が TextEmbedderHelper.kt 表示されます。

結果の処理と表示

推論を実行すると、テキスト エンベディング タスクが TextEmbedderResult を返します。 エンベディングのリストを含むオブジェクト(浮動小数点または スカラー量子化)が使用されます。

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

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

2 つのエンベディングの意味的類似度は、 TextEmbedder.cosineSimilarity 関数を使用します。例として、次のコードをご覧ください。

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

このコード例では、TextEmbedder.cosineSimilarity() 関数が TextEmbedderHelper.kt 表示されます。