テキスト埋め込みを使用すると、高次元の特徴ベクトルにテキストを埋め込み可能 セマンティックな意味を表現し、それを特徴と比較できます。 ベクトルに変換して、意味的類似性を評価できます。
従来の テキスト検索、 テキスト埋め込みを使用すると、テキスト間の類似度をその場で計算できます。 (コーパスから構築された事前定義されたインデックスを使用しません)。
タスク ライブラリの 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 サポート Pypi パッケージをインストールする
以下を使用して、TensorFlow Lite サポート Pypi パッケージをインストールできます。 command:
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]
)。
- 対応する
Wordpiece/Sentencepiece Tokenizer 用の input_process_units
ユニバーサル センテンス エンコーダ ベースのモデル( ソースコード をご覧ください)。
正確に 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]
)。
- 対応する