Les intégrateurs de texte permettent d'intégrer du texte dans un vecteur de caractéristiques de grande dimension représentant sa signification sémantique, qui peut ensuite être comparé au vecteur de caractéristiques d'autres textes pour évaluer leur similarité sémantique.
Contrairement à la recherche de texte , l'intégrateur de texte permet de calculer la similarité entre les textes à la volée au lieu de chercher dans un index prédéfini construit à partir d'un corpus.
Utilisez l'API Task Library TextEmbedder
pour déployer votre intégrateur de texte personnalisé dans vos applications mobiles.
Fonctionnalités clés de l'API TextEmbedder
Traitement du texte d'entrée, y compris les tokenisations Wordpiece ou Sentencepiece dans le graphique ou hors graphique sur le texte d'entrée.
Fonction utilitaire intégrée pour calculer la similarité cosinus entre les vecteurs de caractéristiques.
Modèles d'incorporation de texte pris en charge
Les modèles suivants sont garantis compatibles avec l'API TextEmbedder
.
Le modèle Universal Sentence Encoder TFLite de TensorFlow Hub
Modèles personnalisés qui répondent aux exigences de compatibilité des modèles .
Exécuter l'inférence en 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());
Voir le code source pour plus d'options pour configurer TextEmbedder
.
Exécuter l'inférence en Python
Étape 1 : Installez le package Pypi de prise en charge de TensorFlow Lite.
Vous pouvez installer le package TensorFlow Lite Support Pypi à l'aide de la commande suivante :
pip install tflite-support
Étape 2 : Utilisation du modèle
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)
Voir le code source pour plus d'options pour configurer TextEmbedder
.
Exemples de résultats
La similarité cosinus entre les vecteurs de caractéristiques normalisés renvoie un score compris entre -1 et 1. Plus c'est élevé, mieux c'est, c'est-à-dire qu'une similarité cosinus de 1 signifie que les deux vecteurs sont identiques.
Cosine similarity: 0.954312
Essayez l' outil de démonstration CLI simple pour TextEmbedder avec votre propre modèle et vos données de test.
Exigences de compatibilité des modèles
L'API TextEmbedder
attend un modèle TFLite avec des métadonnées de modèle TFLite obligatoires.
Trois principaux types de modèles sont pris en charge :
Modèles basés sur BERT (voir le code source pour plus de détails) :
Exactement 3 tenseurs d'entrée (kTfLiteString)
- Tensor IDs, avec le nom de métadonnées "ids",
- Tenseur de masque, avec le nom de métadonnées "mask".
- Tenseur d'ID de segment, avec le nom de métadonnées "segment_ids"
Exactement un tenseur de sortie (kTfLiteUInt8/kTfLiteFloat32)
- avec
N
composants correspondant auxN
dimensions du vecteur de caractéristiques renvoyé pour cette couche de sortie. - Soit 2 ou 4 dimensions, c'est-à-dire
[1 x N]
ou[1 x 1 x 1 x N]
.
- avec
Un input_process_units pour Wordpiece/Sentencepiece Tokenizer
Modèles basés sur Universal Sentence Encoder (voir le code source pour plus de détails) :
Exactement 3 tenseurs d'entrée (kTfLiteString)
- Interroger le tenseur de texte, avec le nom de métadonnées "inp_text".
- Tenseur de contexte de réponse, avec le nom de métadonnées "res_context".
- Tenseur de texte de réponse, avec le nom de métadonnées "res_text".
Exactement 2 tenseurs de sortie (kTfLiteUInt8/kTfLiteFloat32)
- Tensor d'encodage de requête, avec le nom de métadonnées "query_encoding".
- Tensor d'encodage de réponse, avec le nom de métadonnées "response_encoding".
- Les deux avec
N
composants correspondant auxN
dimensions du vecteur de caractéristiques renvoyé pour cette couche de sortie. - Les deux avec 2 ou 4 dimensions, c'est-à-dire
[1 x N]
ou[1 x 1 x 1 x N]
.
Tout modèle d'incorporation de texte avec :
- Un tenseur de texte d'entrée (kTfLiteString)
Au moins un tenseur d'intégration de sortie (kTfLiteUInt8/kTfLiteFloat32)
- avec
N
composants correspondant auxN
dimensions du vecteur de caractéristiques renvoyé pour cette couche de sortie. - Soit 2 ou 4 dimensions, c'est-à-dire
[1 x N]
ou[1 x 1 x 1 x N]
.
- avec