Интегрируйте средства для внедрения текста.

Устройства для внедрения текста позволяют встраивать текст в многомерный вектор признаков, представляющий его семантическое значение, который затем можно сравнивать с вектором признаков других текстов для оценки их семантического сходства.

В отличие от текстового поиска , встроенный текст позволяет вычислять сходство между текстами «на лету» вместо поиска по заранее определенному индексу, созданному на основе корпуса.

Используйте API библиотеки задач TextEmbedder для развертывания собственного инструмента для встраивания текста в мобильные приложения.

Ключевые возможности API TextEmbedder

  • Обработка входного текста, включая внутриграфическую и внеграфическую токенизацию Wordpiece или Sentencepiece во входном тексте.

  • Встроенная функция для вычисления косинусного сходства между векторами признаков.

Поддерживаемые модели встраивания текста

Следующие модели гарантированно совместимы с API TextEmbedder .

Выполнить вывод в C++

// Initialization.
TextEmbedderOptions options:
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<TextEmbedder> text_embedder = TextEmbedder::CreateFromOptions(options).value();

// Run inference with your two inputs, `input_text1` and `input_text2`.
const EmbeddingResult result_1 = text_embedder->Embed(input_text1);
const EmbeddingResult result_2 = text_embedder->Embed(input_text2);

// Compute cosine similarity.
double similarity = TextEmbedder::CosineSimilarity(
    result_1.embeddings[0].feature_vector()
    result_2.embeddings[0].feature_vector());

Дополнительные параметры настройки TextEmbedder см. в исходном коде .

Выполнить вывод на Python

Шаг 1: Установите пакет Pypi для поддержки TensorFlow Lite.

Установить пакет TensorFlow Lite Support Pypi можно с помощью следующей команды:

pip install tflite-support

Шаг 2: Использование модели

from tflite_support.task import text

# Initialization.
text_embedder = text.TextEmbedder.create_from_file(model_path)

# Run inference on two texts.
result_1 = text_embedder.embed(text_1)
result_2 = text_embedder.embed(text_2)

# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = text_embedder.cosine_similarity(
    result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)

Дополнительные параметры настройки TextEmbedder см. в исходном коде .

Примеры результатов

Косинусное сходство между нормализованными векторами признаков возвращает оценку от -1 до 1. Чем выше значение, тем лучше, т.е. косинусное сходство, равное 1, означает, что два вектора идентичны.

Cosine similarity: 0.954312

Попробуйте простой демонстрационный инструмент CLI для TextEmbedder с собственной моделью и тестовыми данными.

Требования к совместимости моделей

API TextEmbedder ожидает модель TFLite с обязательными метаданными модели TFLite .

Поддерживаются три основных типа моделей:

  • Модели на основе BERT (подробнее см. в исходном коде ):

    • Ровно 3 входных тензора (kTfLiteString)

    • Тензор идентификаторов с именем метаданных «ids»,

    • Тензор маски с именем метаданных «маска».

    • Тензор идентификаторов сегментов с именем метаданных «segment_ids»

    • Ровно один выходной тензор (kTfLiteUInt8/kTfLiteFloat32)

    • с N компонентами, соответствующими N измерениям возвращаемого вектора признаков для этого выходного слоя.

    • Либо 2, либо 4 измерения, т. е [1 x N] или [1 x 1 x 1 x N] .

    • Input_process_units для токенизатора частей слов/предложений

  • Модели на основе универсального кодировщика предложений (подробнее см. в исходном коде ):

    • Ровно 3 входных тензора (kTfLiteString)

    • Запрос текстового тензора с именем метаданных «inp_text».

    • Тензор контекста ответа с именем метаданных «res_context».

    • Тензор текста ответа с именем метаданных «res_text».

    • Ровно 2 выходных тензора (kTfLiteUInt8/kTfLiteFloat32)

    • Тензор кодирования запроса с именем метаданных «query_encoding».

    • Тензор кодирования ответа с именем метаданных «response_encoding».

    • Оба имеют N компонентов, соответствующих N измерениям возвращаемого вектора признаков для этого выходного слоя.

    • Оба имеют 2 или 4 измерения, т. е. [1 x N] или [1 x 1 x 1 x N] .

  • Любая модель встраивания текста с:

    • Входной текстовый тензор (kTfLiteString)
    • По крайней мере один выходной тензор вложения (kTfLiteUInt8/kTfLiteFloat32)

    • с N компонентами, соответствующими N измерениям возвращаемого вектора признаков для этого выходного слоя.

    • Либо 2, либо 4 измерения, т. е [1 x N] или [1 x 1 x 1 x N] .