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.