Textsuchfunktionen einbinden

Mit der Textsuche können Sie in einem Korpus nach semantisch ähnlichem Text suchen. Dabei wird die Suchanfrage in einen hochdimensionalen Vektor eingebettet, der die semantische Bedeutung der Anfrage darstellt. Anschließend wird in einem vordefinierten benutzerdefinierten Index mit ScaNN (Scalable Nearest Neighbors) nach Ähnlichkeiten gesucht.

Im Gegensatz zur Textklassifizierung (z.B. Bert Natural Language Classifier) ist es nicht erforderlich, das gesamte Modell neu zu trainieren, um die Anzahl der erkennbaren Elemente zu erhöhen. Neue Elemente können einfach durch erneutes Erstellen des Index hinzugefügt werden. So können Sie auch mit größeren Korpora (über 100.000 Elemente) arbeiten.

Mit der Task Library-API TextSearcher können Sie Ihren benutzerdefinierten Text-Sucher in Ihren mobilen Apps bereitstellen.

Wichtige Funktionen der TextSearcher API

  • Akzeptiert einen einzelnen String als Eingabe, führt die Extraktion von Einbettungen und die Suche nach dem nächsten Nachbarn im Index aus.

  • Verarbeitung von Eingabetext, einschließlich In-Graph- oder Out-of-Graph-Wordpiece- oder Sentencepiece-Tokenisierung von Eingabetext.

Vorbereitung

Bevor Sie die TextSearcher API verwenden können, muss ein Index auf Grundlage des benutzerdefinierten Textkorpus erstellt werden, in dem gesucht werden soll. Dies kann mit der Model Maker Searcher API erreicht werden, indem Sie der Anleitung folgen und sie anpassen.

Dazu benötigen Sie:

  • ein TFLite-Modell für Texteinbettungen, z. B. Universal Sentence Encoder. Beispiel:
    • Das eine> wird in diesem Colab neu trainiert und ist für die Inferenz auf dem Gerät optimiert. Auf dem Pixel 6 dauert es nur 6 Millisekunden, einen Textstring abzufragen.
    • die quantisierte Version, die kleiner als die oben genannte ist, aber 38 ms für jedes Embedding benötigt.
  • Ihrem Textkorpus.

Nach diesem Schritt sollten Sie ein eigenständiges TFLite-Suchmodell haben (z. B. mobilenet_v3_searcher.tflite). Das ist das ursprüngliche Texteinbettungsmodell mit dem Index, der an die TFLite-Modellmetadaten angehängt ist.

Inferenz in Java ausführen

Schritt 1: Gradle-Abhängigkeit und andere Einstellungen importieren

Kopieren Sie die Datei .tflite des Suchmodells in das Assets-Verzeichnis des Android-Moduls, in dem das Modell ausgeführt wird. Geben Sie an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite-Bibliothek der build.gradle-Datei des Moduls hinzu:

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'
}

Schritt 2: Modell verwenden

// 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);

Weitere Optionen zum Konfigurieren von TextSearcher finden Sie im Quellcode und in der Javadoc.

Inferenz in C++ ausführen

// 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();

Weitere Optionen zum Konfigurieren von TextSearcher 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_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

Weitere Optionen zum Konfigurieren von TextSearcher finden Sie im Quellcode.

Beispielergebnisse

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

Testen Sie das einfache CLI-Demotool für TextSearcher mit Ihrem eigenen Modell und Ihren eigenen Testdaten.