Web 文本分类指南

借助 MediaPipe Text Classifier 任务,你可以将文本分类为一组定义的类别, 例如正面或负面情绪。这些类别决定了 以及该模型的训练方式。这些说明将介绍如何使用 适用于 Web 应用和 JavaScript 应用的文本分类器。

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

代码示例

文本分类器的示例代码提供了此分类的完整实现, 供您参考。此代码可帮助您测试此任务 开始构建您自己的文本分类应用。您可以查看、运行 修改文本分类器示例代码 只需使用网络浏览器即可。

设置

本部分介绍了设置开发环境和 专门用于文本分类器的代码项目。有关 设置开发环境以使用 MediaPipe Tasks,包括 平台版本要求,请参阅 适用于网站的设置指南

JavaScript 软件包

文本分类器代码可通过 @mediapipe/tasks-text 软件包。您可以从 平台 设置指南

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

您可以使用以下代码安装本地暂存所需的软件包 创建 Deployment

npm install @mediapipe/tasks-text

如果您想部署到服务器,可以使用内容传送工具 网络 (CDN) 服务(如 jsDelivr) 将代码直接添加到您的 HTML 网页,如下所示:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@0.1/text-bundle.js"
    crossorigin="anonymous"></script>
</head>

型号

MediaPipe 文本分类器任务需要一个与此分类兼容的经过训练的模型 任务。如需详细了解文本分类器的可用训练模型,请参阅 任务概览的“模型”部分

选择并下载模型,然后将其存储在项目目录中:

<dev-project-root>/assets/bert_text_classifier.tflite

使用 baseOptions 对象 modelAssetPath 指定模型的路径 参数中,如下所示:

baseOptions: {
        modelAssetPath: `/assets/bert_text_classifier.tflite`
      }

创建任务

使用其中一个文本分类器 TextClassifier.createFrom...() 函数 为运行推理准备任务。您可以使用 createFromModelPath() 函数。代码 以下示例演示了如何使用 TextClassifier.createFromOptions() 函数。如需详细了解可用的配置选项,请参阅 配置选项

以下代码演示了如何构建和配置此任务:

async function createClassifier() {
  const textFiles = await FilesetResolver.forTextTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/wasm/");
  textClassifier = await TextClassifier.createFromOptions(
    textFiles,
    {
      baseOptions: {
        modelAssetPath: `https://storage.googleapis.com/mediapipe-tasks/text_classifier/bert_text_classifier.tflite`
      },
      maxResults: 5
    }
  );
}
createClassifier();

配置选项

此任务具有以下针对 Web 和 JavaScript 的配置选项 应用:

选项名称 说明 值范围 默认值
displayNamesLocale 设置要用于 任务模型的元数据(如果有)。默认值为 en, 英语。您可以向自定义模型的元数据中添加本地化标签 使用 TensorFlow Lite Metadata Writer API 语言区域代码 en
maxResults 将评分最高的分类结果的可选数量上限设置为 return。如果 <0,则返回所有可用的结果。 任何正数 -1
scoreThreshold 设置预测分数阈值,以替换 模型元数据(如果有)。低于此值的结果将被拒绝。 任意浮点数 未设置
categoryAllowlist 设置允许的类别名称的可选列表。如果不为空, 类别名称未包含在此集合中的分类结果 已滤除。重复或未知的类别名称会被忽略。 此选项与 categoryDenylist 互斥,使用 都会导致错误。 任何字符串 未设置
categoryDenylist 设置不允许使用的类别名称的可选列表。如果 非空,类别名称在此集中的分类结果将被滤除 。重复或未知的类别名称会被忽略。这个选项 categoryAllowlist 不包含,同时使用这两个元素会导致错误。 任何字符串 未设置

准备数据

文本分类器处理文本 (String) 数据。任务会处理 数据输入预处理,包括标记化和张量预处理。

所有预处理都在 classify() 函数中进行处理。不需要 以预先对输入文本进行额外的预处理。

const inputText = "The input text to be classified.";

运行任务

文本分类器使用 classify() 函数来触发推理。适用于文本 分类,这意味着返回输入文本的可能类别。

以下代码演示了如何使用任务执行处理 模型。

// Wait to run the function until inner text is set
const result: TextClassifierResult = await textClassifier.classify(
  inputText
);

处理和显示结果

文本分类器输出包含列表的 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"