Текстовый поиск позволяет искать в корпусе семантически близкий текст. Он работает путем внедрения поискового запроса в многомерный вектор, представляющий семантическое значение запроса, с последующим поиском по сходству в предопределенном пользовательском индексе с использованием ScaNN (масштабируемые ближайшие соседи).
В отличие от классификации текста (например, классификатора естественного языка Берта ), увеличение количества распознаваемых элементов не требует повторного обучения всей модели. Новые элементы можно добавлять, просто перестраивая индекс. Это также позволяет работать с более крупными (более 100 тыс. элементов) корпусами.
Используйте API TextSearcher
библиотеки задач, чтобы развернуть собственный поисковик текста в мобильных приложениях.
Ключевые особенности API TextSearcher
Принимает на вход одну строку, выполняет извлечение встраивания и поиск ближайшего соседа по индексу.
Обработка входного текста, включая токенизацию Wordpiece или Sentencepiece в графе или вне графика во входном тексте.
Предварительные условия
Прежде чем использовать API TextSearcher
, необходимо создать индекс на основе пользовательского набора текста для поиска. Этого можно достичь с помощью API Model Maker Searcher, следуя и адаптировав руководство .
Для этого вам понадобится:
- модель устройства для внедрения текста TFLite, например универсальный кодировщик предложений. Например,
- тот, кто переобучился в этом Colab , оптимизированном для вывода на устройстве. Запрос текстовой строки на Pixel 6 занимает всего 6 мс.
- квантованный , который меньше приведенного выше, но занимает 38 мс для каждого встраивания.
- ваш корпус текста.
После этого шага у вас должна получиться автономная модель поиска TFLite (например, mobilenet_v3_searcher.tflite
), которая представляет собой исходную модель для внедрения текста с индексом, прикрепленным к метаданным модели TFLite .
Запустить вывод в Java
Шаг 1. Импортируйте зависимости Gradle и другие настройки.
Скопируйте файл модели поисковика .tflite
в каталог ресурсов модуля Android, где будет запускаться модель. Укажите, что файл не должен быть сжат, и добавьте библиотеку TensorFlow Lite в файл build.gradle
модуля:
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'
}
Шаг 2: Использование модели
// 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);
Дополнительные параметры настройки TextSearcher
см. в исходном коде и документации Java .
Запустить вывод на 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();
Дополнительные параметры настройки TextSearcher
см. в исходном коде .
Запустить вывод в Python
Шаг 1. Установите пакет поддержки Pypi TensorFlow Lite.
Вы можете установить пакет поддержки Pypi TensorFlow Lite, используя следующую команду:
pip install tflite-support
Шаг 2: Использование модели
from tflite_support.task import text
# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)
# Run inference
result = text_searcher.search(text)
Дополнительные параметры настройки TextSearcher
см. в исходном коде .
Примеры результатов
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
Попробуйте простой демонстрационный инструмент CLI для TextSearcher с вашей собственной моделью и тестовыми данными.