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

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

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

Используйте 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.

Вы можете установить пакет поддержки Pypi TensorFlow Lite, используя следующую команду:

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 для токенизатора Wordpiece/Sentencepiece

  • Модели на основе Universal Sentence Encoder (более подробную информацию см. в исходном коде ):

    • Ровно 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] .