Интегрируйте текстовые поисковые системы

Текстовый поиск позволяет искать в корпусе семантически близкий текст. Он работает путем внедрения поискового запроса в многомерный вектор, представляющий семантическое значение запроса, с последующим поиском по сходству в предопределенном пользовательском индексе с использованием 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 с вашей собственной моделью и тестовыми данными.