Intégrer des outils de recherche de texte

La recherche de texte permet de rechercher du texte sémantiquement similaire dans un corpus. Il fonctionne en intégrant la requête de recherche dans un vecteur de grande dimension représentant la signification sémantique de la requête, suivi d'une recherche de similarité dans un index personnalisé prédéfini à l'aide de ScaNN (Scalable Nearest Neighbors).

Contrairement à la classification de texte (par exemple, le classificateur de langage naturel BERT), l'augmentation du nombre d'éléments pouvant être reconnus ne nécessite pas de réentraîner l'ensemble du modèle. Vous pouvez ajouter des éléments en reconstruisant simplement l'index. Cela permet également de travailler avec des corpus plus volumineux (plus de 100 000 éléments).

Utilisez l'API Task Library TextSearcher pour déployer votre outil de recherche de texte personnalisé dans vos applications mobiles.

Principales fonctionnalités de l'API TextSearcher

  • Prend une seule chaîne en entrée, extrait l'embedding et effectue une recherche des plus proches voisins dans l'index.

  • Traitement du texte d'entrée, y compris les tokenisations Wordpiece ou Sentencepiece dans ou hors graphique sur le texte d'entrée.

Prérequis

Avant d'utiliser l'API TextSearcher, un index doit être créé en fonction du corpus de texte personnalisé dans lequel effectuer la recherche. Pour ce faire, vous pouvez utiliser l'API Model Maker Searcher en suivant et en adaptant le tutoriel.

Pour cela, vous aurez besoin des éléments suivants :

  • un modèle d'intégration de texte TFLite, tel que Universal Sentence Encoder. Par exemple :
    • celui réentraîné dans ce Colab, qui est optimisé pour l'inférence sur l'appareil. Il ne faut que 6 ms pour interroger une chaîne de texte sur le Pixel 6.
    • la version quantifiée, qui est plus petite que celle ci-dessus, mais qui prend 38 ms pour chaque intégration.
  • votre corpus de texte.

Après cette étape, vous devriez disposer d'un modèle de recherche TFLite autonome (par exemple, mobilenet_v3_searcher.tflite), qui est le modèle d'intégration de texte d'origine avec l'index associé aux métadonnées du modèle TFLite.

Exécuter une inférence en Java

Étape 1 : Importer la dépendance Gradle et d'autres paramètres

Copiez le fichier de modèle du moteur de recherche .tflite dans le répertoire des éléments du module Android dans lequel le modèle sera exécuté. Indiquez que le fichier ne doit pas être compressé et ajoutez la bibliothèque TensorFlow Lite au fichier build.gradle du module :

android {
    // Other settings

    // Specify tflite index file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

Étape 2 : Utiliser le modèle

// Initialization
TextSearcherOptions options =
    TextSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
TextSearcher textSearcher =
    textSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = textSearcher.search(text);

Consultez le code source et le Javadoc pour découvrir d'autres options de configuration de TextSearcher.

Exécuter une inférence en C++

// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();

Pour découvrir d'autres options de configuration de TextSearcher, consultez le code source.

Exécuter l'inférence en Python

Étape 1 : Installez le package Pypi TensorFlow Lite Support.

Vous pouvez installer le package Pypi TensorFlow Lite Support à l'aide de la commande suivante :

pip install tflite-support

Étape 2 : Utiliser le modèle

from tflite_support.task import text

# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

Pour découvrir d'autres options de configuration de TextSearcher, consultez le code source.

Exemples de résultats

Results:
 Rank#0:
  metadata: The sun was shining on that day.
  distance: 0.04618
 Rank#1:
  metadata: It was a sunny day.
  distance: 0.10856
 Rank#2:
  metadata: The weather was excellent.
  distance: 0.15223
 Rank#3:
  metadata: The cat is chasing after the mouse.
  distance: 0.34271
 Rank#4:
  metadata: He was very happy with his newly bought car.
  distance: 0.37703

Essayez l'outil de démonstration simple de l'interface de ligne de commande pour TextSearcher avec votre propre modèle et vos données de test.