分类任务系列学习——总述

classification overview


本文是分类任务系列第一篇——概述,主要介绍分类的基本定义和一般流程。

overview

分类是nlp中常见的任务,例如垃圾邮件分类、情感分析、意图识别、行业分类等,通过一定的方法或手段,对给定样本赋予特定的标签的过程。常见的分类包括

  • 二分类:标签只有两个,通常表现为0-1或者[-1, 1],例如是否垃圾邮件、学生性别识别等
  • 多分类:标签大于两个,例如不同的舆情(正面、中性、负面)

从数据上,一般可以划分为:

  • 非文本分类:表现为多个特征集合,例如年龄、城市、长度、收入等,特征之间存在或者不存在相关关系
  • 文本分类:输入特征一般为文本串,例如搜索query或者评论等
    • 短文本分类
    • 长文本分类

在深度学习场景下,数据通常是混合的,也就是说,输入的特征,即包括文本也包括非文本的,例如部分细粒度情感分析或评论分析任务等。

文本类型的输入需要通过嵌入(embedding)手段转换为模型可接受的输入,非文本的特征,可以直接输入或者通过编码方式去适配模型(category encoder)。

给定的一个问题,如果能够确定为分类任务,那么一般都流程是如下的:

  • 问题抽象:通过问题的背景,定义样本和标签,确定样本全集和标签与样本的关系
    • 以搜索意图分类为例,样本全集是所有用输入并点击搜索按钮的query,而不是全部的用户输入query,因为部分输入是用户错误输入没有发生实际的搜索行为;
    • 假定定义的标签是是否点击了某类结果,那么搜索并点击该类结果的为正例,搜索无该类结果以及搜索有该类结果但未点击的数据都可以作为负例
    • 标签的定义决定了训练数据是否是真实样本空间无偏采样。但往往无法做到真正的无偏采样,因为真实的情况是未知的,最常见的场景是电影分类以及广告点击率的场景
    • 关键点:样本定义、标签定义
  • 数据准备:根据问题的定义,需要从整个的样本空间进行采样,获取模型训练所需的数据,这个过程一般要注意样本获取的合理性、正确性,保证采样数据的分布和整体样本分布是一致的。
    • 数据的来源,可能包括:爬虫、网络公开数据或者业务数据
    • 利用业务数据时候,一定要保证和上述问题定义的空间是一致的,在是否点击的预测中,常见的问题是采样的样本空间大于上述问题定义的空间,以外部邮件是否垃圾邮件问题定义,那么非外部邮件(内部邮件)不应该出现在训练数据中
    • 关键点:样本采样,特征定义、清洗、缺失值处理
  • 样本处理:分类是一种有监督的学习,但标记数据的获取一般是有代价的,经过上述步骤获取的数据可能存在数据过少(几十-几千)、正负样本分布不均等问题
    • 样本过少,可以通过样本增强的方式来生成足够多的样本,或者考虑迁移学习,进行few-shot的小样本学习,将相关的知识进行迁移
    • 样本不均衡会导致部分的评估指标不可信,例如常见的是否癌症的分类,正例(癌症患者)数量远远小于负例(无癌症患者)数量,假如正例:负例=1:99,那么模型即使全部预测为负例,准确率(accuracy)也是99%的,在特定关注指标下,对样本的平衡也是必要的,评估指标尽量选择对样本分布不敏感的指标,例如AUC或者带类别权重的加权损失
      • 如果正负比例过于悬殊,一方面可以通过技术手段,去平衡样本分布,例如采样、生成、加权等
      • 也可以通过问题转换来解决,例如异常检测(本文不做讨论)
      • 利用集成学习的方式,将具有优势数量的类别拆分后,分别与少数类别的样本组成数据集,进行模型的训练
    • 关键点:样本平衡、样本增强、半监督学习
  • 特征处理:如果把数据集看做一个矩阵,行是样本,列是特征,样本处理事在行维度的操作,特征处理是在列维度进行的
    • 在数据准备阶段,为了避免后续重复获取或特征不足的问题,往往会获取大量的特征,这可能引入无效或者负面的特征,例如不符合朴素贝叶斯算法的朴素假定,通过特征选择,排除无关、无效、噪声的特征,既能降低特征空间的大小提升训练效率,也可能提升模型最终的性能,常用的手段包括PCA、LDA、互信息、相关系数等
    • 对于数值型的特征,能够直接利用上述方法处理,对于类别型变量,需要经过一定的转化处理(category encoder),将其转换为数值型变量,不同的转换方式在不同类型的特征以及任务上效果是不同的,没有万能的处理方法。
    • 关键词:特征工程、类别编码
  • 文本向量化(Embedding):这个步骤,是针对文本分类的,对于非文本分类情况,一般不需要这个步骤,文本向量化是将文本表示转化为模型可接受的数值型表示的过程
    • 最古老而经典的转化方式是TF-IDF,通过统计全部预料的词频、逆文档率实现文本到数值的转化;后续出现了word2vec、ELMo、GPT、Bert等方式。
    • 文本向量化,也有不同的粒度,对于中文而言,可以分为:字粒度、词粒度、句粒度、段粒度以及篇章粒度,也有比较偏门的偏旁粒度或者片段粒度;对于英文,一般是空格分割的词粒度,或者sub char粒度。本文仅讨论中文情况,不论字粒度还是词粒度,一般都需要去除停用词的操作,去除无效信息。
    • 关键词:分词、向量化
  • 模型选型和优化(模型集成):通过上述的步骤,得到了一个包含有效信息的数据集,对模型的选择一般是由简单到复杂,通过一个baseline的基线模型或已有的业务指标,不断的去迭代升级模型
    • 数据量很小,用朴素贝叶斯;数据量适中或者较大,用树模型,优先 xgboost;数据量较大,也可以用神经网络
    • 如果单一模型效果不理想,或者受限与数据规模或者分布,可以考虑集成学习,包括boosting、bagging以及stacking方法
    • 关键点:模型选型、模型集成、模型调优
  • 推理应用:完成模型的选型、调优后,进行模型的部署和在线应用,不同的场景和模型难度和使用的资源是不同的,部署模型前,需要对模型的响应时间、依赖资源进行评估,可能需要对模型蒸馏、剪枝等,提升平响和降低资源依赖

上述的整个流程,是分类任务的一般流程,针对上面的流程的每个步骤,后续会分别进行解释说明

猜你喜欢

转载自blog.csdn.net/wwlsm_zql/article/details/126195813