テキストエンベダーを統合します。

テキスト エンベッダーを使用すると、テキストをその意味論的な意味を表す高次元の特徴ベクトルに埋め込むことができ、他のテキストの特徴ベクトルと比較して意味論的な類似性を評価できます。

テキスト検索とは対照的に、テキスト エンベッダーを使用すると、コーパスから構築された事前定義されたインデックスを介して検索する代わりに、テキスト間の類似性をオンザフライで計算できます。

タスク ライブラリTextEmbedder API を使用して、カスタム テキスト エンベッダーをモバイル アプリにデプロイします。

TextEmbedder API の主な機能

サポートされているテキストエンベッダーモデル

以下のモデルはTextEmbedder API との互換性が保証されています。

C++ で推論を実行する

// Initialization.
TextEmbedderOptions options:
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<TextEmbedder> text_embedder = TextEmbedder::CreateFromOptions(options).value();

// Run inference with your two inputs, `input_text1` and `input_text2`.
const EmbeddingResult result_1 = text_embedder->Embed(input_text1);
const EmbeddingResult result_2 = text_embedder->Embed(input_text2);

// Compute cosine similarity.
double similarity = TextEmbedder::CosineSimilarity(
    result_1.embeddings[0].feature_vector()
    result_2.embeddings[0].feature_vector());

TextEmbedder構成するためのその他のオプションについては、ソース コードを参照してください。

Python で推論を実行する

ステップ 1: TensorFlow Lite Support Pypi パッケージをインストールします。

次のコマンドを使用して、TensorFlow Lite Support Pypi パッケージをインストールできます。

pip install tflite-support

ステップ 2: モデルの使用

from tflite_support.task import text

# Initialization.
text_embedder = text.TextEmbedder.create_from_file(model_path)

# Run inference on two texts.
result_1 = text_embedder.embed(text_1)
result_2 = text_embedder.embed(text_2)

# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = text_embedder.cosine_similarity(
    result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)

TextEmbedder構成するためのその他のオプションについては、ソース コードを参照してください。

結果の例

正規化された特徴ベクトル間のコサイン類似度は、-1 ~ 1 のスコアを返します。高いほど優れています。つまり、コサイン類似度 1 は 2 つのベクトルが同一であることを意味します。

Cosine similarity: 0.954312

独自のモデルとテスト データを使用して、TextEmbedder のシンプルな CLI デモ ツールを試してください。

モデルの互換性要件

TextEmbedder API は、必須のTFLite モデル メタデータを持つ TFLite モデルを想定しています。

次の 3 つの主要なタイプのモデルがサポートされています。

  • BERT ベースのモデル (詳細についてはソース コードを参照):

    • ちょうど 3 つの入力テンソル (kTfLiteString)

      • ID テンソル、メタデータ名「ids」、
      • メタデータ名が「mask」のマスク テンソル。
      • セグメント ID テンソル、メタデータ名「segment_ids」
    • 正確に 1 つの出力テンソル (kTfLiteUInt8/kTfLiteFloat32)

      • N個のコンポーネントは、この出力層に対して返された特徴ベクトルのN次元に対応します。
      • 2 次元または 4 次元、つまり[1 x N]または[1 x 1 x 1 x N]
    • ワードピース/センテンスピーストークナイザー用の input_process_units

  • Universal Sentence Encoder ベースのモデル (詳細についてはソース コードを参照):

    • ちょうど 3 つの入力テンソル (kTfLiteString)

      • メタデータ名「inp_text」のクエリ テキスト テンソル。
      • メタデータ名が「res_context」の応答コンテキスト テンソル。
      • メタデータ名が「res_text」の応答テキスト テンソル。
    • 正確に 2 つの出力テンソル (kTfLiteUInt8/kTfLiteFloat32)

      • メタデータ名が「query_encoding」のクエリ エンコーディング テンソル。
      • メタデータ名が「response_encoding」の応答エンコーディング テンソル。
      • どちらも、この出力層に対して返された特徴ベクトルのN次元に対応するN個のコンポーネントを持ちます。
      • どちらも 2 次元または 4 次元、つまり[1 x N]または[1 x 1 x 1 x N]です。
  • 以下を備えたテキスト エンベッダー モデル:

    • 入力テキスト テンソル (kTfLiteString)
    • 少なくとも 1 つの出力埋め込みテンソル (kTfLiteUInt8/kTfLiteFloat32)

      • N個のコンポーネントは、この出力層に対して返された特徴ベクトルのN次元に対応します。
      • 2 次元または 4 次元、つまり[1 x N]または[1 x 1 x 1 x N]