Руководство по определению языка для 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 .