Задача Text Embedder позволяет создать числовое представление текстовых данных, чтобы уловить их семантическое значение. В этих инструкциях показано, как использовать Text Embedder в приложениях iOS.
Вы можете увидеть эту задачу в действии, просмотрев эту веб-демо . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
Пример кода Text Embedder предоставляет базовую реализацию приложения для iOS, которое интегрирует эту задачу. В примере оценивается семантическое сходство между двумя фрагментами текста, и для этого требуется либо физическое устройство iOS, либо симулятор iOS.
Вы можете использовать это приложение в качестве отправной точки для своего собственного приложения для iOS или обращаться к нему при изменении существующего приложения. Вы можете обратиться к примеру кода Text Embedder на GitHub .
Загрузите код
Следующие инструкции показывают, как создать локальную копию кода примера с помощью инструмента командной строки git .
Чтобы загрузить пример кода:
Клонируйте репозиторий git, используя следующую команду:
git clone https://github.com/google-ai-edge/mediapipe-samples
При желании настройте свой экземпляр 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 .