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

MediaPipe Text Embedder タスクを使用すると、テキストデータの数値表現を作成して、その意味を捉えることができます。この手順では、ウェブアプリと JavaScript アプリで Text Embedder を使用する方法について説明します。

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

サンプルコード

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

セットアップ

このセクションでは、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 テキスト エンベダー タスクには、このタスクと互換性のあるトレーニング済みモデルが必要です。テキスト エンベッダーで使用可能なトレーニング済みモデルの詳細については、タスクの概要のモデルのセクションをご覧ください。

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

<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 が含まれていない場合にのみ使用します。ほとんどの場合、すでにこのようになっているため、このオプションを使用しなくても、TFLite 推論によって L2 正規化が実現されます。 Boolean False
quantize 返されたエンベディングをスカラー量子化によってバイトに量子化するかどうか。エンベディングは暗黙的に単位ノルムであると想定されるため、すべてのディメンションの値は [-1.0, 1.0] の範囲になります。そうでない場合は、l2Normalize オプションを使用します。 Boolean False

データの準備

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

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

タスクを実行する

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

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

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

結果を処理して表示する

テキスト エンベッダーは、入力テキストのエンベディング(浮動小数点またはスカラー量子化)のリストを含む 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]);

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