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

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

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

Пример кода

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

Вы можете использовать это приложение в качестве отправной точки для своего собственного приложения для iOS или обращаться к нему при изменении существующего приложения. Вы можете обратиться к примеру кода 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/ios/
    

После создания локальной версии примера кода вы можете установить библиотеку задач MediaPipe, открыть проект с помощью Xcode и запустить приложение. Инструкции см. в Руководстве по установке для iOS .

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

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

  • TextEmbedderService.swift : инициализирует средство для внедрения текста и выполняет вывод на входных данных.
  • ViewController.swift : реализует пользовательский интерфейс и форматирует результаты.

Настраивать

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

Зависимости

Text Embedder использует библиотеку MediaPipeTasksText , которую необходимо установить с помощью CocoaPods. Библиотека совместима с приложениями Swift и Objective-C и не требует дополнительной настройки для конкретного языка.

Инструкции по установке CocoaPods на macOS см. в руководстве по установке CocoaPods . Инструкции о том, как создать Podfile с необходимыми модулями для вашего приложения, см. в разделе Использование CocoaPods .

Добавьте модуль MediaPipeTasksText в Podfile используя следующий код:

target 'MyTextEmbedderApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

Если ваше приложение включает в себя цели модульного тестирования, обратитесь к Руководству по настройке для iOS для получения дополнительной информации о настройке вашего Podfile .

Модель

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

Выберите и загрузите модель и добавьте ее в каталог проекта с помощью Xcode. Инструкции по добавлению файлов в проект Xcode см. в разделе Управление файлами и папками в проекте Xcode .

Используйте свойство BaseOptions.modelAssetPath , чтобы указать путь к модели в вашем пакете приложений. Пример кода см. в следующем разделе.

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

Вы можете создать задачу Text Embedder, вызвав один из ее инициализаторов. Инициализатор TextEmbedder(options:) принимает значения для параметров конфигурации.

Если вам не требуется устройство для внедрения текста, инициализированное с настраиваемыми параметрами конфигурации, вы можете использовать инициализатор TextEmbedder(modelPath:) для создания устройства для внедрения текста с параметрами по умолчанию. Дополнительные сведения о параметрах конфигурации см. в разделе Обзор конфигурации .

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

Быстрый

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true

let textEmbedder = try TextEmbedder(options: options)

Цель-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;

MPPTextEmbedder *textEmbedder =
      [[MPPTextEmbedder alloc] initWithOptions:options error:nil];

Варианты конфигурации

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

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

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

Чтобы встроить входной текст и получить его векторы внедрения, вы можете использовать метод embed(text:) TextEmbedder .

Быстрый

let result = try textEmbedder.embed(text: text)

Цель-C

MPPTextEmbedderResult *result = [textEmbedder embedText:text
                                                  error:nil];

Примечание . Задача блокирует текущий поток до тех пор, пока он не завершит вывод текста. Чтобы избежать блокировки текущего потока, выполните обработку в фоновом потоке с помощью платформ iOS Dispatch или NSOperation . Если ваше приложение создано с использованием Swift, вы также можете использовать Swift Concurrency для фонового выполнения потоков.

В примере кода метод embed(text:) вызывается в файле TextEmbedderService.swift .

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

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

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

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

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

Быстрый

let similarity = try TextEmbedder.cosineSimilarity(
  embedding1: result.embeddingResult.embeddings[0],
  embedding2: otherResult.embeddingResult.embeddings[0])
    

Цель-C

NSNumber *similarity = [MPPTextEmbedder
      cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0]
                          andEmbedding2:otherResult.embeddingResult.embeddings[0]
                                  error:nil];
    

В примере кода метод TextEmbedder.cosineSimilarity вызывается в файле TextEmbedderService.swift .