Zintegruj wyszukiwarki tekstowe

Wyszukiwanie tekstu umożliwia wyszukiwanie w korpusie tekstu podobnego semantycznie. Działa poprzez osadzenie wyszukiwanego hasła w wielowymiarowym wektorze reprezentującym semantyczne znaczenie zapytania, a następnie wyszukiwanie podobieństwa we wstępnie zdefiniowanym, niestandardowym indeksie przy użyciu ScaNN (Scalable Nearest Neighbours).

W przeciwieństwie do klasyfikacji tekstu (np. klasyfikator języka naturalnego Berta ), zwiększenie liczby elementów, które można rozpoznać, nie wymaga ponownego uczenia całego modelu. Nowe elementy można dodawać po prostu odbudowując indeks. Umożliwia to także pracę z większymi korpusami (ponad 100 tys. elementów).

Użyj interfejsu API TextSearcher biblioteki zadań, aby wdrożyć niestandardową wyszukiwarkę tekstu w aplikacjach mobilnych.

Najważniejsze funkcje interfejsu API TextSearcher

  • Pobiera pojedynczy ciąg znaków jako dane wejściowe, przeprowadza wyodrębnianie osadzania i wyszukiwanie najbliższego sąsiada w indeksie.

  • Przetwarzanie tekstu wejściowego, w tym tokenizacje Wordpiece lub Zdanie na wykresie lub poza wykresem w tekście wejściowym.

Warunki wstępne

Przed użyciem interfejsu API TextSearcher należy zbudować indeks na podstawie niestandardowego korpusu tekstu, który ma być przeszukiwany. Można to osiągnąć za pomocą interfejsu API Model Maker Searcher, postępując zgodnie z tutorialem i dostosowując go.

Do tego będziesz potrzebować:

  • model osadzania tekstu TFLite, taki jak Universal Sentence Encoder. Na przykład,
    • ten przeszkolony w tym Colabie , który jest zoptymalizowany pod kątem wnioskowania na urządzeniu. Zapytanie o ciąg tekstowy na Pixelu 6 zajmuje tylko 6 ms.
    • skwantowany , który jest mniejszy niż powyższe, ale zajmuje 38 ms na każde osadzenie.
  • Twój korpus tekstu.

Po tym kroku powinieneś mieć samodzielny model wyszukiwarki TFLite (np. mobilenet_v3_searcher.tflite ), który jest oryginalnym modelem osadzającym tekst z indeksem dołączonym do metadanych modelu TFLite .

Uruchom wnioskowanie w Javie

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

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

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 (NNAPI is included)
    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 uzyskać więcej opcji konfiguracji 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 konfiguracji TextSearcher .

Uruchom wnioskowanie w Pythonie

Krok 1: Zainstaluj pakiet Pypi obsługujący TensorFlow Lite.

Możesz zainstalować pakiet TensorFlow Lite Support Pypi za pomocą następującego polecenia:

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 konfiguracji 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 proste narzędzie demonstracyjne CLI dla TextSearcher z własnym modelem i danymi testowymi.