借助文本分类器任务,您可以将文本分类为一组定义的类别, 例如正面或负面情绪。类别是根据 您使用的模型以及该模型的训练方式。以下说明会向您展示 如何在 iOS 应用中使用文本分类器。以上介绍的代码示例 有关说明,请访问 GitHub
您可以查看此网页 演示。对于 功能、模型和配置选项 请参阅 概览。
代码示例
MediaPipe Tasks 示例代码是文本分类器的基本实现 。
您可以以此为基础来创建自己的 iOS 应用,也可以作为参考 对现有应用进行了修改。您可以参考文本分类器示例代码 已开启 GitHub
下载代码
以下说明介绍了如何创建示例的本地副本 使用 git 命令行工具运行 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/ios/
创建示例代码的本地版本后,您可以安装 MediaPipe 任务库,使用 Xcode 打开项目,然后运行应用。对于 请参阅 iOS 设置指南。
关键组件
以下文件包含文本分类器示例的关键代码 应用:
- TextClassifierHelper.swift: 初始化文本分类器并处理模型选择。
- ViewController.swift: 实现界面并设置结果的格式。
设置
本部分介绍了设置开发环境和 以便使用文本分类器。有关如何设置 用于使用 MediaPipe 任务(包括平台版本)的开发环境 要求,请参阅 iOS 设置指南。
<ph type="x-smartling-placeholder">依赖项
文本分类器使用 MediaPipeTasksText
库,必须安装该库
使用 CocoaPods 构建容器。该库与 Swift 和 Objective-C 应用兼容
并且不需要任何额外的语言相关设置。
如需了解如何在 macOS 上安装 CocoaPods,请参阅 CocoaPods
安装指南。
如需了解如何创建包含必要 Pod 的 Podfile
,请参阅
请参阅使用
CocoaPods。
使用以下代码在 Podfile
中添加 MediaPipeTasksText pod:
target 'MyTextClassifierApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
如果您的应用包含单元测试目标,请参阅应用的设置指南
iOS 设备,详细了解如何设置
您的Podfile
。
型号
MediaPipe 文本分类器任务需要一个经过训练的模型, 此任务。如需详细了解适用于 Kubernetes 的 文本分类器,请参阅任务概览模型 部分。
选择并下载模型,然后使用 Xcode 将其添加到您的项目目录。 有关如何向 Xcode 项目添加文件的说明,请参阅管理 Xcode 中的文件和文件夹 项目。
使用 BaseOptions.modelAssetPath
属性指定模型的路径
。如需查看代码示例,请参阅下一部分。
创建任务
您可以通过调用文本分类器任务之一来创建该任务。通过
TextClassifier(options:)
初始化程序用于为配置设置值
选项。
如果您不需要使用自定义配置初始化的文本分类器
可以使用 TextClassifier(modelPath:)
初始化程序创建
具有默认选项的文本分类器。如需详细了解配置
选项,请参阅配置概览。
以下代码演示了如何构建和配置此任务。
Swift
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)
Objective-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 ,
英语。您可以向自定义模型的元数据中添加本地化标签
使用 TensorFlow Lite Metadata Writer API
| 语言区域代码 | en |
maxResults |
将评分最高的分类结果的可选数量上限设置为 return。如果 <0,则返回所有可用的结果。 | 任何正数 | -1 |
scoreThreshold |
设置预测分数阈值,以替换 模型元数据(如果有)。低于此值的结果将被拒绝。 | 任意浮点数 | 未设置 |
categoryAllowlist |
设置允许的类别名称的可选列表。如果不为空,
类别名称未包含在此集合中的分类结果
已滤除。重复或未知的类别名称会被忽略。
此选项与 categoryDenylist 互斥,使用
都会导致错误。 |
任何字符串 | 未设置 |
categoryDenylist |
设置不允许使用的类别名称的可选列表。如果
非空,类别名称在此集中的分类结果将被滤除
。重复或未知的类别名称会被忽略。这个选项
categoryAllowlist 不包含,同时使用这两个元素会导致错误。 |
任何字符串 | 未设置 |
准备数据
文本分类器处理文本数据。任务处理数据输入 预处理,包括标记化和张量预处理。
所有预处理都在 classify(text:)
函数中进行处理。没有任何
因此需要事先对输入文本进行额外的预处理。
Swift
let text = "The input text to be classified."
Objective-C
NSString *text = @"The input text to be classified.";
运行任务
如需运行文本分类器,请使用 classify(text:)
方法。文本分类器
返回输入文本的可能类别。
Swift
let result = try textClassifier.classify(text: text)
Objective-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-loader 来获得此结果:
"an imperfect but overall entertaining mystery"
。
通过 ViewController.swift 示例代码中的 文件演示了如何显示检测结果 返回的值。