ウェブ用テキスト埋め込みガイド

MediaPipe Text Embedder タスクを使用すると、テキストデータの数値表現を作成して、セマンティックな意味をキャプチャできます。以下では、ウェブアプリと JavaScript アプリで Text Embedder を使用する方法について説明します。

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

サンプルコード

Text Embedder のサンプルコードでは、参考用にこのタスクの完全な実装を JavaScript で提供しています。このコードは、このタスクをテストし、独自のテキスト エンベディング アプリの構築を開始するのに役立ちます。ウェブブラウザを使用して、Text Embedder のサンプルコードを表示、実行、編集できます。

セットアップ

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

JavaScript パッケージ

テキスト埋め込みコードは、@mediapipe/tasks-text パッケージで使用できます。これらのライブラリは、プラットフォームの設定ガイドにあるリンクから検索してダウンロードできます。

次のコマンドを使用して、ローカル ステージングに必要な次のコードを含む必要なパッケージをインストールできます。

npm install @mediapipe/tasks-text

サーバーにデプロイする場合は、次のように、jsDelivr などのコンテンツ配信ネットワーク(CDN)サービスを使用してコードを直接 HTML ページに追加できます。

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/index.js"
    crossorigin="anonymous"></script>
</head>

モデル

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

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

<dev-project-root>/app/shared/models

タスクを作成する

Text Embedder の createFrom...() 関数のいずれかを使用して、推論を実行するタスクを準備します。createFromModelPath() 関数は、トレーニング済みモデルファイルへの相対パスまたは絶対パスを指定して使用できます。次のコードサンプルは createFromOptions() 関数の使い方を示しています。使用可能な構成オプションの詳細については、構成オプションをご覧ください。

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

async function createEmbedder() {
  const textFiles = await FilesetResolver.forTextTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/wasm/");
  textEmbedder = await TextEmbedder.createFromOptions(
    textFiles,
    {
      baseOptions: {
        modelAssetPath: `https://storage.googleapis.com/mediapipe-tasks/text_embedder/universal_sentence_encoder.tflite`
      },
      quantize: true
    }
  );
}
createEmbedder();

構成オプション

このタスクには、ウェブ アプリケーションと JavaScript アプリケーション用の次の構成オプションがあります。

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

データの準備

Text Embedder は、テキスト(string)データを処理します。このタスクは、トークン化やテンソルの前処理など、データ入力の前処理を処理します。すべての前処理は embed 関数内で処理されます。入力テキストを事前に追加で前処理する必要はありません。

const inputText = "The input text to be embedded.";

タスクを実行する

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

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

// Wait to run the function until inner text is set
const embeddingResult = textEmbedder.embed(
  inputText
);

結果を処理して表示する

Text Embedder は、入力テキストのエンベディング(浮動小数点またはスカラー量子化)のリストを含む TextEmbedderResult を出力します。

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

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

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

// Compute cosine similarity.
const similarity = TextEmbedder.cosineSimilarity(
  embeddingResult.embeddings[0],
  otherEmbeddingResult.embeddings[0]);

Text Embedder サンプルコードは、タスクから返されたエンベダーの結果を表示する方法を示しています。詳しくは、コードサンプルをご覧ください。