借助 MediaPipe Text Classifier 任务,你可以将文本分类为一组定义的类别, 例如正面或负面情绪。这些类别决定了 以及该模型的训练方式。这些说明将介绍如何使用 将文本分类器与 Android 应用结合使用。
要了解此任务的实际运行情况,请查看 演示。 如需详细了解其功能、模型和 配置选项,请参阅概览。
代码示例
文本分类器的示例代码提供了此分类的简单实现, 供您参考。此代码可帮助您测试此任务并 构建自己的文本分类应用。您可以浏览 文本分类器示例代码 。
下载代码
以下说明介绍了如何创建示例的本地副本 使用 git 版本控制命令行工具构建代码库。
<ph type="x-smartling-placeholder">如需下载示例代码,请执行以下操作:
- 使用以下命令克隆 git 代码库:
git clone https://github.com/google-ai-edge/mediapipe-samples
- (可选)将您的 Git 实例配置为使用稀疏检出,
因此您只有文本分类器示例应用的文件:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/android
如需了解如何使用 Android Studio 设置和运行示例, 请参阅 Android 版设置指南。
关键组件
以下文件包含文本分类的关键代码, 示例应用:
- TextClassifierHelper.kt - 初始化文本分类器并处理模型选择。
- MainActivity.kt:
实现应用,包括调用
TextClassifierHelper
和ResultsAdapter
。 - ResultsAdapter.kt - 处理结果并设置其格式。
设置
本部分介绍了设置开发环境和 专门用于文本分类器的代码项目。有关 设置开发环境以使用 MediaPipe Tasks,包括 平台版本要求,请参阅 Android 版设置指南。
<ph type="x-smartling-placeholder">依赖项
文本分类器使用 com.google.mediapipe:tasks-text
库。添加此项
依赖项添加到 Android 应用开发项目的 build.gradle
文件中。
您可以使用以下代码导入所需的依赖项:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
型号
MediaPipe 文本分类器任务需要一个与此分类兼容的经过训练的模型 任务。如需详细了解文本分类器的可用训练模型,请参阅 任务概览的“模型”部分。
选择并下载模型,然后将其存储在项目 assets
中
目录:
<dev-project-root>/src/main/assets
使用 BaseOptions.Builder.setModelAssetPath()
方法指定路径
要使用的模型。如需查看代码示例,请参阅下一部分。
创建任务
使用其中一个文本分类器 TextClassifier.createFrom...()
函数
为运行推理准备任务。您可以使用 createFromFile()
函数。代码
以下示例演示了如何使用 TextClassifier.createFromOptions()
函数。如需详细了解可用的配置选项,请参阅
配置选项。
以下代码演示了如何构建和配置此任务。
// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";
fun initClassifier() {
val baseOptionsBuilder = BaseOptions.builder()
.setModelAssetPath(currentModel)
try {
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
.setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textClassifier = TextClassifier.createFromOptions(context, options)
} catch (e: IllegalStateException) { // exception handling
}
}
您可以在代码示例中查看如何创建任务的示例
TextClassifierHelper
类 initClassifier()
函数。
配置选项
此任务具有以下适用于 Android 应用的配置选项:
选项名称 | 说明 | 值范围 | 默认值 |
---|---|---|---|
displayNamesLocale |
设置要用于
任务模型的元数据(如果有)。默认值为 en ,
英语。您可以向自定义模型的元数据中添加本地化标签
使用 TensorFlow Lite Metadata Writer API
| 语言区域代码 | en |
maxResults |
将评分最高的分类结果的可选数量上限设置为 return。如果 <0,则返回所有可用的结果。 | 任何正数 | -1 |
scoreThreshold |
设置预测分数阈值,以替换 模型元数据(如果有)。低于此值的结果将被拒绝。 | 任意浮点数 | 未设置 |
categoryAllowlist |
设置允许的类别名称的可选列表。如果不为空,
类别名称未包含在此集合中的分类结果
已滤除。重复或未知的类别名称会被忽略。
此选项与 categoryDenylist 互斥,使用
都会导致错误。 |
任何字符串 | 未设置 |
categoryDenylist |
设置不允许使用的类别名称的可选列表。如果
非空,类别名称在此集中的分类结果将被滤除
。重复或未知的类别名称会被忽略。这个选项
categoryAllowlist 不包含,同时使用这两个元素会导致错误。 |
任何字符串 | 未设置 |
准备数据
文本分类器处理文本 (String
) 数据。任务处理数据输入
预处理,包括标记化和张量预处理。
所有预处理都在 classify()
函数中进行处理。不需要
以预先对输入文本进行额外的预处理。
String inputText = "The input text to be classified.";
运行任务
文本分类器使用 TextClassifier.classify()
函数来运行
推理。使用单独的执行线程执行分类
避免您的应用阻塞 Android 界面线程。
以下代码演示了如何使用任务执行处理 使用单独的执行线程来训练该模型。
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
您可以在代码示例中查看如何运行任务的示例
TextClassifierHelper
类 classify()
函数。
处理和显示结果
文本分类器输出包含列表的 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-loader 来获得此结果:
"an imperfect but overall entertaining mystery"
。
如需查看有关如何显示结果的示例,请参阅代码示例
ResultsAdapter
类和 ViewHolder
内部类。