Android 语言检测指南

借助 MediaPipe Language Detector 任务,您可以识别一段文本使用的语言。这些 说明如何将语言检测器用于 Android 应用程序。代码 您可在 GitHub

要了解此任务的实际运行情况,请查看 演示。 如需详细了解功能、模型和配置选项 部分,请参阅概览

代码示例

语言检测器的示例代码提供了此项功能的简单实现 供您参考。此代码可帮助您测试此任务并 构建自己的语言检测功能。您可以浏览 语言检测器示例代码

下载代码

以下说明介绍了如何创建示例的本地副本 使用 git 版本控制命令行工具构建代码库。

<ph type="x-smartling-placeholder">

如需下载示例代码,请执行以下操作:

  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/languagedetector/android
    

如需了解如何使用 Android Studio 设置和运行示例, 请参阅 Android 版设置指南

关键组件

以下文件包含文本分类的关键代码, 示例应用:

设置

本部分介绍了设置开发环境和 代码项目。有关 设置开发环境以使用 MediaPipe 任务,包括 平台版本要求,请参阅 Android 版设置指南

<ph type="x-smartling-placeholder">

依赖项

语言检测器使用 com.google.mediapipe:tasks-text 库。添加此项 依赖项添加到 Android 应用开发项目的 build.gradle 文件中。 您可以使用以下代码导入所需的依赖项:

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);

您可以在代码示例中查看如何创建任务的示例 LanguageDetectorHelperinitDetector() 函数。

配置选项

此任务具有以下适用于 Android 应用的配置选项:

选项名称 说明 值范围 默认值
maxResults 将评分最高的语言预测的可选数量上限设置为 return。如果此值小于零,则返回所有可用的结果。 任何正数 -1
scoreThreshold 设置预测分数阈值,以替换 模型元数据(如果有)。低于此值的结果将被拒绝。 任意浮点数 未设置
categoryAllowlist 设置允许的语言代码的可选列表。如果不为空, 语言代码不在此集中的语言预测将 已滤除。此选项与 categoryDenylist,同时使用这两个元素会导致错误。 任何字符串 未设置
categoryDenylist 设置不允许使用的语言代码的可选列表。如果 非空语言预测,如果语言代码在此集合内,则将被滤除 。此选项与 categoryAllowlist 和 会导致错误。 任何字符串 未设置

准备数据

语言检测器使用文本 (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)
    }
}

您可以在代码示例中查看如何运行任务的示例 LanguageDetectorHelperdetect() 函数。

处理和显示结果

语言检测器输出一个 LanguageDetectorResult,其中包含一系列 语言预测以及这些预测的概率。通过 模型中定义的语言类别,请参阅任务概览 模型部分:详细了解您使用的模型。

以下示例展示了此任务的输出数据:

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

通过对输入文本运行模型来获得此结果: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent."

如需查看有关如何显示结果的示例,请参阅代码示例 ResultsAdapter 类和 ViewHolder 内部类。