Руководство по встраиванию текста для Android

The MediaPipe Text Embedder task lets you create a numeric representation of text data to capture its semantic meaning. These instructions show you how to use the Text Embedder with Android apps.

For more information about the capabilities, models, and configuration options of this task, see the Overview .

Пример кода

The MediaPipe Tasks example code is a simple implementation of a Text Embedder app for Android. В примере оценивается семантическое сходство между двумя частями текста. Для этого требуется либо физическое устройство Android, либо эмулятор Android.

You can use the app as a starting point for your own Android app, or refer to it when modifying an existing app. The Text Embedder example code is hosted on GitHub .

Загрузите код

The following instructions show you how to create a local copy of the example code using the git command line tool.

To download the example code:

  1. Clone the git repository using the following command:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Optionally, configure your git instance to use sparse checkout, so you have only the files for the Text Embedder example app:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

After creating a local version of the example code, you can import the project into Android Studio and run the app. Инструкции см. Руководство по настройке для Android .

Ключевые компоненты

Следующие файлы содержат важный код для этого приложения приложения Text Encedder:

  • TextembedderHelper.kt : инициализирует текстовый встраивание и обрабатывает модель и выбор делегата.
  • MainActivity.kt : реализует приложение и собирает компоненты пользовательского интерфейса.

Настраивать

В этом разделе описываются ключевые шаги для настройки вашей среды разработки и кодовых проектов специально для использования Text Encedder. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для Android .

Зависимости

Text Embedder использует com.google.mediapipe:tasks-text Libraries. Добавьте эту зависимость в файл build.gradle вашего проекта разработки приложений Android. Вы можете импортировать необходимые зависимости со следующим кодом:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Модель

Задача текста MediaPipe Text Embedder требует обученной модели, которая совместима с этой задачей. Для получения дополнительной информации о доступных обученных моделях для Text Encedder см. В разделе обзор задач.

Выберите и загрузите модель, а затем храните ее в каталоге проекта:

<dev-project-root>/src/main/assets

Укажите путь модели в параметре ModelAssetPath . В примере кода модель определяется в функции setupTextEmbedder() в файле textembedderhelper.kt :

Используйте функцию BaseOptions.Builder.setModelAssetPath() , чтобы указать путь, используемый моделью. Этот метод упоминается в примере кода в следующем разделе.

Создать задачу

Для создания задачи вы можете использовать одну из функций createFrom...() . Функция createFromOptions() принимает параметры конфигурации для установки параметров внедрения. Вы также можете инициализировать задачу с помощью фабричной функции createFromFile() . Функция createFromFile() принимает относительный или абсолютный путь к файлу обученной модели. Дополнительные сведения о параметрах конфигурации см. в разделе Параметры конфигурации .

Следующий код демонстрирует, как создать и настроить эту задачу.

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

В примере реализации кода параметры внедрения текста задаются в функции setupTextEmbedder() в файле TextEmbedderHelper.kt .

Параметры конфигурации

Эта задача имеет следующие параметры конфигурации для приложений Android:

Имя опции Описание Диапазон значений Значение по умолчанию
l2_normalize Нормализовать ли возвращенный вектор признаков по норме L2. Используйте эту опцию, только если модель еще не содержит встроенный L2_NORMALIZATION TFLite Op. В большинстве случаев это уже так, и нормализация L2, таким образом, достигается посредством вывода TFLite без необходимости использования этой опции. Boolean False
quantize Следует ли квантовать возвращенное внедрение в байты посредством скалярного квантования. Неявно предполагается, что вложения имеют единичную норму, и поэтому любое измерение гарантированно имеет значение в [-1.0, 1.0]. Если это не так, используйте опцию l2_normalize. Boolean False

Подготовьте данные

Text Embedder works with text ( String ) data. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров. Вся предварительная обработка обрабатывается в функции embed() . Нет необходимости в дополнительной предварительной обработке входного текста заранее.

val inputText = "The input text to be embedded."

Запустите задачу

Текст Enterdder использует функцию embed для запуска выводов. Для встраивания текста это означает возврат векторов встраивания для входного текста.

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

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

В примере кода функция embed вызывается в файле TextembedderHelper.kt .

Handle and display results

После выполнения вывода задача Text Embedder возвращает объект TextEmbedderResult , который содержит список внедрений (с плавающей запятой или скалярно-квантованных) для входного текста.

Следующее показывает пример выходных данных из этой задачи:

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

Вы можете сравнить семантическое сходство двух встраиваний, используя функцию TextEmbedder.cosineSimilarity . See the following code for an example.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

В примере кода функция TextEmbedder.cosineSimilarity() вызывается в файле TextembedderHelper.kt .