文本分类的工作原理

文本分类是为句子、段落、文本报告或其他形式的非结构化文本分配预定义类别或标注的过程。 GeoAI 工具箱中的文本分析工具集包含使用自然语言处理 (NLP) 技术来训练文本分类模型以及使用模型对文本进行分类的工具。

训练文本分类模型工具训练 NLP 模型,以根据作为训练数据集的一部分提供的已知类或类别对文本进行分类。 经过训练的模型可以与使用深度学习分类文本工具配合使用,以将相似的文本分类到这些类别中。

可能的应用

以下是此工具的潜在应用:

  • 不完整的地址可以按它们所属的国家来分类。 这有助于分配适当的定位器以更准确地对这些地址进行地理编码。
  • 地理定位的推特可以根据它们是否表明对疫苗迟疑的情绪进行分类。 这可以帮助确定公共教育活动可以提高公众信心和疫苗接种率的区域。
  • 根据事件报告对犯罪类型进行分类。 这可以通过按类别聚合犯罪来帮助了解趋势,并有助于规划补救工作。
文本分类模型流程图
地址分类的文本分类模型可以预测一个不完整的地址所属的国家。

ArcGIS 中的文本分类模型以 Vaswani 等人在开创性 Attention is All You Need 论文中提出的转换器架构为基础。 这样可以在需要更少的标注数据训练模型的同时,实现更准确且可并行化的模型。

在内部,ArcGIS 中的文本分类模型是具有两个组件的深度神经网络:

  • 编码器 - 编码器作为模型骨干,将输入文本转换为固定大小矢量形式的要素表示。 该模型使用熟知的编码器,例如基于转换器架构的 BERT、ALBERT 和 RoBERTa,并在大量文本上进行了预训练。
  • 分类器 - 分类器作为模型中心词,将要素表示分类为多个类别。 分类器通常是神经网络中的简单线性图层。
文本分类器模型中的组件

ArcGIS 中的文本分类模型也支持 Mistral 模型骨干。 Mistral 是一个基于变换器架构的大型语言模型,仅作为解码器模型运行。 Mistral 架构的关键组件包括以下内容:

  • 滑动窗口注意力 - 通过将长文本分成较小的重叠段来有效处理长文本,在保留重要上下文的同时降低计算成本和内存使用量。
  • 分组查询注意力 - 通过将相似的查询聚类在一起来提高效率,从而最大限度地减少注意力计算量并加快处理速度。
  • 字节回退 BPE(字节对编码)分词器技术 - 将文本转换为标记以供模型处理。
注:

当自动分析大量非结构化文本时,NLP 模型是有效的工具。 与其他类型的模型一样,需确保将其应用于相关任务时,具有适当的人工监督水平以及模型类型和用于训练模型的训练数据集的透明度水平。

使用文本分类模型

使用深度学习分类文本工具可用于将经过训练的文本分类模型应用于非结构化文本并将其分类为预先确定的类型。 可以使用来自 ArcGIS Living Atlas of the World 的预训练文本分类模型或使用训练文本分类模型工具训练自定义模型。

使用深度学习分类文本工具的输入是包含要分类的文本的要素类或表。 输入模型可以是 Esri 模型定义 JSON 文件 (.emd) 或深度学习模型包 (.dlpk)。 该模型包含深度学习模型文件的路径(包含模型权重)和其他模型参数。 某些模型可能包含其他模型参数。

该工具将在输入表中创建一个字段,其中包含模型分配给输入文本的类或类别标注。

虽然该工具可以在 CPU 上运行,但由于深度学习为计算密集型,因此建议使用 GPU 进行处理。 要使用 GPU 运行此工具,请将处理器类型环境设置为 GPU。 如果您具有多个 GPU,还可以指定 GPU ID 环境设置。

训练文本分类模型

训练文本分类模型工具可用于训练 NLP 模型进行文本分类。 该工具使用机器学习方法,并通过向模型提供由输入文本对和标注类组成的训练样本来训练模型。 通过 Mistral 模型骨干使用情境学习,通过输入提示引导模型的理解和响应,并为模型提供具体示例以帮助其推断所需的输出。 训练 NLP 模型是一项计算密集型任务,为此建议使用 GPU 运行。

训练数据以输入表的形式提供,其中包含一个用作预测变量的文本字段和一个包含表中每个输入文本的目标类标注的标注字段。

当训练文本分类模型时,可以从头开始训练模型、微调已训练模型或者使用上下文学习。 通常,使用转换器架构的语言模型被认为是少样本学习模型。

但是,如果您可以访问具有与训练样本中相同的目标类集的预训练文本分类模型,则可以在新的训练数据上对其进行微调。 微调现有模型通常比训练新模型更快,而且这个过程也需要更少的训练样本。 在微调预训练模型时,请确保保留与预训练模型中使用的骨干模型相同的骨干模型。

此预训练模型可以是 Esri 模型定义文件或深度学习包文件。 输出模型也以这些格式保存在指定的输出模型文件夹中。

训练深度学习模型是一个迭代过程,其中输入训练数据将多次通过神经网络。 通过整个训练数据的每次训练都称为一个轮数。 最大轮数参数指定模型在训练时所看到训练数据的最大次数。 这取决于您正在训练的模型、任务的复杂性以及训练样本的数量。 如果您有很多训练样本,则可以使用较小的值。 通常情况下,较好的做法是重复训练更多轮数直到验证损失持续下降。

模型骨干参数指定用作模型编码器并提取输入文本要素表示的预配置神经网络。 该模型支持基于 BERT、ALBERT 和 RoBERTa 的编码器,这些编码器基于转换器架构,并以半监督方式对大量文本进行预训练。 这些编码器可以很好地理解语言,以固定长度矢量形式表示输入文本,并将其作为模型分类中心词的输入。 模型骨干参数还支持 Mistral 大型语言模型 (LLM)。 Mistral 一种仅限解码器的变换器模型,采用滑动窗口注意力机制实现高效的长文本处理,使用分组查询注意力机制简化计算,使用字节回退 BPE 分词器技术处理不同的文本输入。

模型训练分批进行,批处理大小参数指定一次为训练处理的训练样本数。 增加批处理大小可以提高工具性能。 但是,随着批处理大小的增加,会占用更多内存。 如果在训练模型时发生内存不足错误,请使用较小的批处理大小。

学习率参数是最重要的超参数之一。 它是在训练期间调整模型权重的速率。 如果指定了低学习率,则模型改进缓慢并且可能需要很长时间来训练,从而导致时间和资源的浪费。 高学习率可能会适得其反,无法达到理想学习效果。 在高学习率的情况下,模型权重可能会被大幅调整,从而导致结果错误。 通常情况下,最好不要指定学习率参数的值,因为该工具使用了基于 Leslie N. Smith 的“训练神经网络的循环学习率”论文的自动学习率查找器。

该工具使用部分训练数据(默认为 10%)作为验证集。 验证百分比参数允许您调整用于验证的训练数据量。 对于 Mistral 模型,必须保留至少 50% 的数据进行验证,因为 Mistral 需要的训练集较小,并且依赖较大的验证集来评估模型性能。

默认情况下,该工具使用提前停止技术,当模型在连续训练轮数中不再改进时,该技术会停止模型训练。 可以通过取消选中模型停止改进时停止参数来关闭此行为。

还可以指定是否冻结预训练模型中的骨干层,以使权重和偏差保持原始设计。 默认情况下,不会冻结骨干模型的图层,可能会更改模型骨干值的权重和偏差以更好地适合您的训练样本。 这将需要花费更多的时间来处理,但通常会产生更好的结果。

文本数据通常包含 HTML 标签和 URL 形式的噪声。 您可以使用移除 HTML 标签移除 URL 参数来预处理文本并在处理前移除标签。

参考资料

Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, and Illia Polosukhin. "Attention Is All You Need." December 6, 2017. https://arxiv.org/abs/1706.03762.

Devlin, Jacob, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding." May 24, 2019. https://doi.org/10.48550/arxiv.1810.04805.

"Encoder models." https://huggingface.co/course/chapter1/5?fw=pt.

Brown, Tom B. et al. "Language Models are Few-Shot Learners." July 22, 2020. https://doi.org/10.48550/arxiv.2005.14165.

Smith, Leslie N. "Cyclical Learning Rates for Training Neural Networks." April 4, 2017. https://doi.org/10.48550/arxiv.1506.01186.

"Mistral." https://docs.mistral.ai/getting-started/open_weight_models/.