Mit Texteinbettungen lässt sich Text in einen hochdimensionalen Featurevektor einbetten, der seine semantische Bedeutung repräsentiert. Dieser kann dann mit dem Featurevektor anderer Texte verglichen werden, um ihre semantische Ähnlichkeit zu bewerten.
Im Gegensatz zur Textsuche ermöglicht der Text-Embedder, die Ähnlichkeit zwischen Texten spontan zu berechnen, anstatt einen vordefinierten Index zu durchsuchen, der aus einem Korpus erstellt wurde.
Mit der Task Library-API TextEmbedder können Sie Ihren benutzerdefinierten Text-Embedder in Ihren mobilen Apps bereitstellen.
Wichtige Funktionen der TextEmbedder API
Verarbeitung von Eingabetext, einschließlich In-Graph- oder Out-of-Graph-Wordpiece- oder Sentencepiece-Tokenisierung von Eingabetext.
Integrierte Dienstprogrammfunktion zum Berechnen der Kosinusähnlichkeit zwischen Featurevektoren.
Unterstützte Modelle für Texteinbettungen
Die folgenden Modelle sind garantiert mit der TextEmbedder API kompatibel.
Das Universal Sentence Encoder-TFLite-Modell von TensorFlow Hub
Benutzerdefinierte Modelle, die die Anforderungen an die Modellkompatibilität erfüllen.
Inferenz in C++ ausführen
// 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());
Weitere Optionen zum Konfigurieren von TextEmbedder finden Sie im Quellcode.
Inferenz in Python ausführen
Schritt 1: TensorFlow Lite Support-PyPI-Paket installieren
Sie können das TensorFlow Lite Support-PyPI-Paket mit dem folgenden Befehl installieren:
pip install tflite-support
Schritt 2: Modell verwenden
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)
Weitere Optionen zum Konfigurieren von TextEmbedder finden Sie im Quellcode.
Beispielergebnisse
Die Kosinusähnlichkeit zwischen normalisierten Feature-Vektoren ergibt einen Wert zwischen -1 und 1. Je höher der Wert, desto besser. Eine Kosinusähnlichkeit von 1 bedeutet, dass die beiden Vektoren identisch sind.
Cosine similarity: 0.954312
Testen Sie das einfache CLI-Demotool für TextEmbedder mit Ihrem eigenen Modell und Ihren eigenen Testdaten.
Anforderungen an die Modellkompatibilität
Für die TextEmbedder API ist ein TFLite-Modell mit obligatorischen TFLite-Modellmetadaten erforderlich.
Es werden drei Haupttypen von Modellen unterstützt:
BERT-basierte Modelle (weitere Informationen finden Sie im Quellcode):
Genau 3 Eingabetensoren (kTfLiteString)
Tensor „IDs“ mit dem Metadatennamen „ids“
Maskentensor mit dem Metadaten-Namen „mask“.
Tensor mit Segment-IDs, mit dem Metadatennamen „segment_ids“
Genau ein Ausgabetensor (kTfLiteUInt8/kTfLiteFloat32)
mit
NKomponenten, die denNDimensionen des zurückgegebenen Feature-Vektors für diese Ausgabeschicht entsprechen.Entweder 2 oder 4 Dimensionen, d.h.
[1 x N]oder[1 x 1 x 1 x N].input_process_units für Wordpiece-/Sentencepiece-Tokenizer
Modelle, die auf dem Universal Sentence Encoder basieren (weitere Informationen finden Sie im Quellcode):
Genau 3 Eingabetensoren (kTfLiteString)
Texttensor für die Anfrage mit dem Metadatennamen „inp_text“.
Antwortkontext-Tensor mit dem Metadatennamen „res_context“.
Tensor für Antworttext mit dem Metadaten-Namen „res_text“.
Genau 2 Ausgabetensoren (kTfLiteUInt8/kTfLiteFloat32)
Tensor für die Abfragecodierung mit dem Metadaten-Namen „query_encoding“.
Tensor für die Antwortcodierung mit dem Metadaten-Namen „response_encoding“.
Beide mit
N-Komponenten, die denN-Dimensionen des zurückgegebenen Feature-Vektors für diese Ausgabeschicht entsprechen.Beide mit 2 oder 4 Dimensionen, d.h.
[1 x N]oder[1 x 1 x 1 x N].
Jedes Texteinbettungsmodell mit:
- Ein Eingabetext-Tensor (kTfLiteString)
Mindestens ein Ausgabeeinbettungs-Tensor (kTfLiteUInt8/kTfLiteFloat32)
mit
NKomponenten, die denNDimensionen des zurückgegebenen Feature-Vektors für diese Ausgabeschicht entsprechen.Entweder 2 oder 4 Dimensionen, d.h.
[1 x N]oder[1 x 1 x 1 x N].