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

Задача MediaPipe Text Embedder позволяет создавать числовое представление текстовых данных для отражения их семантического значения. В этих инструкциях показано, как использовать Text Embedder с приложениями Android.

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

Пример кода

Пример кода задач MediaPipe — это простая реализация приложения Text Embedder для Android. В примере оценивается семантическое сходство между двумя частями текста. Для этого требуется либо физическое устройство Android, либо эмулятор Android.

Вы можете использовать это приложение в качестве отправной точки для своего собственного приложения для Android или обращаться к нему при изменении существующего приложения. Пример кода Text Embedder размещен на GitHub .

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

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

Чтобы загрузить пример кода:

  1. Клонируйте репозиторий git, используя следующую команду:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. При желании настройте свой экземпляр git на использование разреженной проверки, чтобы у вас были только файлы для примера приложения Text Embedder:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

После создания локальной версии кода примера вы можете импортировать проект в Android Studio и запустить приложение. Инструкции см. в Руководстве по установке для Android .

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

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

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

Настраивать

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

Зависимости

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

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

Модель

Для задачи MediaPipe Text Embedder требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Text Embedder см. в разделе «Модели » обзора задач.

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

<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 работает с текстовыми ( String ) данными. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров. Вся предварительная обработка выполняется внутри функции embed() . Предварительная дополнительная обработка входного текста не требуется.

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

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

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

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

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

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

Обработка и отображение результатов

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

Ниже показан пример выходных данных этой задачи:

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

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

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

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