Web 文本分类指南

借助 MediaPipe 文本分类器任务,您可以将文本分类到一组已定义的类别中,例如正面或负面情绪。类别由您使用的模型以及该模型的训练方式决定。以下说明介绍了如何将文本分类器用于 Web 和 JavaScript 应用。

您可以观看 演示来了解此任务的实际效果。 如需详细了解此任务的功能、模型和 配置选项,请参阅概览

代码示例

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

设置

本部分介绍了设置开发环境和代码项目以专门使用文本分类器的关键步骤。如需了解有关 设置开发环境以使用 MediaPipe 任务的一般信息(包括 平台版本要求),请参阅 Web 设置指南

JavaScript 软件包

文本分类器代码可通过 @mediapipe/tasks-text 软件包获取。您可以从 平台 设置指南中提供的链接查找和下载这些库。

您可以使用以下代码进行本地暂存,并使用以下命令安装所需的软件包:

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 元数据写入器 API 将本地化标签添加到自定义模型的元数据中语言区域代码 en
maxResults 设置要返回的得分最高的分类结果的可选数量上限。如果 < 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

此结果是通过对输入文本 "an imperfect but overall entertaining mystery"运行BERT 分类器获得的。