Zintegruj wyszukiwarki tekstowe

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wyszukiwanie tekstu umożliwia wyszukiwanie w korpusie tekstu podobnego semantycznie. Działa poprzez osadzenie zapytania wyszukiwania w wysokowymiarowym wektorze reprezentującym semantyczne znaczenie zapytania, a następnie wyszukiwanie podobieństwa w predefiniowanym, niestandardowym indeksie za pomocą ScanNN (Scalable Nearest Neighbors).

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

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

Kluczowe cechy TextSearcher API

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

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

Warunki wstępne

Przed użyciem interfejsu API TextSearcher należy utworzyć indeks w oparciu o niestandardowy korpus tekstu do przeszukiwania. Można to osiągnąć za pomocą interfejsu API Model Maker Searcher , postępując zgodnie z samouczkiem i dostosowując go.

Do tego będziesz potrzebować:

  • model osadzania tekstu TFLite, taki jak Universal Sentence Encoder. Na przykład,
    • ten , który został ponownie nauczony w tym Colab , który jest zoptymalizowany pod kątem wnioskowania na urządzeniu. Zapytanie o ciąg tekstowy na Pixelu zajmuje tylko 6 ms.
    • skwantyzowany , który jest mniejszy niż powyższy, ale zajmuje 38 ms dla każdego osadzania.
  • Twój korpus tekstu.

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

Uruchom wnioskowanie w Javie

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

Skopiuj plik modelu wyszukiwarki .tflite do katalogu asset modułu Android, w którym będzie uruchamiany model. Określ, że plik nie powinien być skompresowany, 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.0'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
}

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 TensorFlow Lite Support Pypi.

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.