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

Задача MediaPipe Language Detector позволяет определить язык фрагмента текста. В этих инструкциях показано, как использовать детектор языка с приложениями для Android. Пример кода, описанный в этой инструкции, доступен на GitHub .

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

Пример кода

В примере кода Language Detector представлена ​​простая реализация этой задачи. Этот код поможет вам протестировать эту задачу и приступить к созданию собственной функции определения языка. Вы можете просмотреть пример кода Language Detector на GitHub.

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

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

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

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

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

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

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

  • LanguageDetectorHelper.kt — инициализирует детектор языка и обрабатывает выбор модели.
  • ResultAdapter.kt — обрабатывает и форматирует результаты обнаружения.
  • MainActivity.kt — реализует приложение, включая вызов LanguageDetectorHelper ResultsAdapter .

Настраивать

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

Зависимости

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

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

Модель

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

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

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

Укажите путь к модели в параметре ModelName .

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

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

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

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

Пример создания задачи вы можете увидеть в примере кода функции initDetector() класса LanguageDetectorHelper .

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

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

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

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

Language Detector работает с текстовыми ( String ) данными. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров. Вся предварительная обработка выполняется в функции detect() . Предварительная дополнительная обработка входного текста не требуется.

String inputText = "Some input text for the language detector";

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

Детектор языка использует метод LanguageDetector.detect() для обработки входного текста и прогнозирования языка текста. Для выполнения обнаружения следует использовать отдельный поток выполнения, чтобы избежать блокировки потока пользовательского интерфейса Android вашим приложением.

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

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

Вы можете увидеть пример запуска задачи в примере кода функции detect() класса LanguageDetectorHelper .

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

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

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

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

Этот результат был получен путем запуска модели на входном тексте: "Il ya beaucoup de bouches qui parlent et fort peu de têtes qui pensent." .

Вы можете увидеть пример отображения результатов в примере кода классаResultAdapter и внутреннего класса ViewHolder .