Integracja wyszukiwarki tekstu

Wyszukiwanie tekstowe umożliwia wyszukiwanie tekstu podobnego semantycznie w korpusie. Działa umieszczając wyszukiwane hasło w{0}wysokim wektorze reprezentującym semantyczne znaczenie zapytania, a następnie wyszukiwanie podobieństwa w zdefiniowanym wstępnie, indeks niestandardowy za pomocą ScaNN (skalowalne najbliższe sąsiedzi).

W odróżnieniu od klasyfikacji tekstu (np. klasyfikator języka naturalnego Bert), Zwiększenie liczby rozpoznawanych przedmiotów nie wymaga ponownego trenowania dla całego modelu. Nowe elementy można dodawać, tworząc indeks. To także umożliwia pracę z większymi (ponad 100 tys. elementów) korpusami.

Użyj interfejsu Task Library API TextSearcher, aby wdrożyć w nim niestandardowy mechanizm wyszukiwania tekstu aplikacji mobilnych.

Najważniejsze funkcje interfejsu TextSearcher API

  • Jako dane wejściowe pobiera pojedynczy ciąg znaków, przeprowadza wyodrębnianie wektora dystrybucyjnego i wyszukiwanie najbliższych sąsiadów w indeksie.

  • Przetwarzanie tekstu wejściowego, w tym na wykresie i poza nim WordPress lub Zdanie tokenizacji w tekście wejściowym.

Wymagania wstępne

Zanim użyjesz interfejsu API TextSearcher, musisz utworzyć indeks na podstawie niestandardowy korpus tekstu do przeszukania. Można to osiągnąć za pomocą Interfejs Model Maker Searcher API Stosując i dostosowując samouczek.

Potrzebujesz do tego:

  • model TFLite do umieszczania tekstu, np. Universal Sentence Encoder. Dla: przykład,
    • jeden przeszkolony(-a) w tym Colab która jest zoptymalizowana pod kątem wnioskowania na urządzeniu. Wysłanie zapytania zajmuje tylko 6 ms ciąg tekstowy na Pixelu 6.
    • skwantyzowana która jest mniejsza niż powyżej, ale w każdym z nich trwa 38 ms.
  • Twojego korpusu tekstowego.

Po wykonaniu tego kroku musisz mieć samodzielny model wyszukiwania TFLite (np. mobilenet_v3_searcher.tflite), czyli pierwotny model umieszczania tekstu, z którym do indeksu dołączonego do Metadane modelu TFLite.

Uruchom wnioskowanie w Javie

Krok 1. Zaimportuj zależność Gradle i inne ustawienia

Skopiuj plik modelu wyszukiwarki .tflite do katalogu zasobów Androida w którym będzie uruchomiony model. Określ, że plik nie powinien być skompresować i dodać bibliotekę TensorFlow Lite do modułu build.gradle plik:

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

Krok 2. Korzystanie z modelu

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

Zobacz kod źródłowy i javadoc , aby poznać więcej opcji konfigurowania TextSearcher.

Uruchom wnioskowanie w 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();

Zobacz kod źródłowy , aby uzyskać więcej opcji konfigurowania TextSearcher.

Uruchom wnioskowanie w Pythonie

Krok 1. Zainstaluj pakiet Pypi Support TensorFlow Lite.

Możesz zainstalować pakiet Pypi Support Pypi na TensorFlow Lite za pomocą: polecenie:

pip install tflite-support

Krok 2. Korzystanie z modelu

from tflite_support.task import text

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

# Run inference
result = text_searcher.search(text)

Zobacz kod źródłowy , aby uzyskać więcej opcji konfigurowania TextSearcher.

Przykładowe wyniki

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

Wypróbuj prostą Narzędzie demonstracyjne interfejsu wiersza poleceń dla TextSearcher z własnym modelem i danymi testowymi.