Средства для встраивания текста позволяют встраивать текст в многомерный вектор признаков, представляющий его семантическое значение, который затем можно сравнить с вектором признаков других текстов, чтобы оценить их семантическое сходство.
В отличие от текстового поиска , средство для встраивания текста позволяет вычислять сходство между текстами на лету вместо поиска по предопределенному индексу, созданному на основе корпуса.
Используйте API библиотеки задач TextEmbedder
, чтобы развернуть собственное средство внедрения текста в мобильные приложения.
Ключевые особенности API TextEmbedder
Обработка входного текста, включая токенизацию Wordpiece или Sentencepiece в графе или вне графика во входном тексте.
Встроенная служебная функция для вычисления косинусного сходства между векторами признаков.
Поддерживаемые модели для внедрения текста
Следующие модели гарантированно совместимы с API TextEmbedder
.
Модель универсального кодировщика предложений TFLite от TensorFlow Hub
Пользовательские модели, соответствующие требованиям совместимости моделей .
Запустить вывод на 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]
.
- с