Руководство по классификации текста для iOS

Задача «Классификатор текста» позволяет классифицировать текст по набору определенных категорий, таких как положительные или отрицательные настроения. Категории определяются на основе используемой вами модели и способа обучения этой модели. В этих инструкциях показано, как использовать классификатор текста в приложениях iOS. Пример кода, описанный в этой инструкции, доступен на GitHub .

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

Пример кода

Пример кода задач MediaPipe — это базовая реализация приложения классификатора текста для iOS.

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

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

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

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

  1. Клонируйте репозиторий git, используя следующую команду:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. При желании настройте свой экземпляр git на использование разреженной проверки, чтобы у вас были только файлы для примера приложения классификатора текста:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

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

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

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

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

Настраивать

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

Зависимости

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

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

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

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

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

Модель

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

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

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

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

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

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

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

Быстрый

import MediaPipeTasksText

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

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Цель-C

@import MediaPipeTasksText;

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

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

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

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

Название опции Описание Диапазон значений Значение по умолчанию
displayNamesLocale Задает язык меток, которые будут использоваться для отображаемых имен, представленных в метаданных модели задачи, если они доступны. По умолчанию en английский язык. Вы можете добавить локализованные метки к метаданным пользовательской модели с помощью API записи метаданных TensorFlow Lite. Код региона ru
maxResults Устанавливает необязательное максимальное количество возвращаемых результатов классификации с наивысшим баллом. Если < 0, будут возвращены все доступные результаты. Любые положительные числа -1
scoreThreshold Устанавливает порог оценки прогноза, который переопределяет тот, который указан в метаданных модели (если таковые имеются). Результаты ниже этого значения отклоняются. Любой плавающий Не задано
categoryAllowlist Устанавливает необязательный список разрешенных имен категорий. Если поле не пусто, результаты классификации, имя категории которых отсутствует в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Эта опция является взаимоисключающей с categoryDenylist , и использование обеих приводит к ошибке. Любые строки Не задано
categoryDenylist Устанавливает необязательный список имен категорий, которые не разрешены. Если значение не пустое, результаты классификации, имя категории которых находится в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Этот параметр является взаимоисключающим с categoryAllowlist , и использование обоих приводит к ошибке. Любые строки Не задано

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

Классификатор текста работает с текстовыми данными. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров.

Вся предварительная обработка выполняется внутри функции classify(text:) . Предварительная дополнительная обработка входного текста не требуется.

Быстрый

let text = "The input text to be classified."

Цель-C

NSString *text = @"The input text to be classified.";

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

Чтобы запустить классификатор текста, используйте метод classify(text:) . Классификатор текста возвращает возможные категории входного текста.

Быстрый

let result = try textClassifier.classify(text: text)

Цель-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

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

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

После выполнения вывода задача «Классификатор текста» возвращает объект TextClassifierResult , который содержит список возможных категорий для входного текста. Категории определяются используемой вами моделью, поэтому, если вам нужны другие категории, выберите другую модель или переобучите существующую.

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

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Этот результат был получен путем применения BERT-классификатора к входному тексту: "an imperfect but overall entertaining mystery" .

Файл ViewController.swift в примере кода демонстрирует, как отображать результаты обнаружения, возвращенные задачей.