NLP 文本分类核心问题
解决思路
- 分解为多个独立二分类任务
- 将多标签分类转化为多分类问题
- 更换 loss 直接由模型进行多标签分类
数据稀疏问题
标注更多数据,核心解决方案:
- 自己构造训练样本
数据增强,如使用 chatGPT 来构造数据 - 更换模型
减少数据需求 - 增加规则弥补
- 调整阀值,用召回率替换准确率
- 重新定义类别(类别合并)
标签不均衡问题
- 过采样
复制指定类别样本,在采样中重复 - 降采样
减少多样本类别的采样,随机使用部分样本 - 增加标注数据
- 调整样本权重
调整损失函数的权重 - 非神经网络的方法
- 贝叶斯
- 全概率公式
- 贝叶斯公式
- 核心在于词频的统计
- 需要做词的独立性假设,形成每个事件在某个事件下发生概率的相乘
这种假设是没有保障的,需要加一平滑等策略,保证概率不为0,没有考虑语序,没有词义。
- 适用于样本分布较均衡的语料
- 简单高效
- 训练结果有一定的可解释性
- 训练数据可以分批处理
- 全概率公式
- SVM 支持向量机
- 找到一个决策边界
- 即一条直线、平面或超平面
- 实现数据的线性可分
- 距离两个类别最近的样本距离最远
- 即一条直线、平面或超平面
- 是非线性不可分的
- 可以通过使用特别的映射关系,将数据映射到高维解决
- 通过核函数解决高维度计算耗时问题
- 主要靠核函数寻找决策边界
- 没有像贝叶斯很好的可解释性,没有神经网络的效果好
- 找到一个决策边界
- 贝叶斯
- 神经网络方法
- fastText
- 结构简单
- embedding
- mean pooling
- fc -> class_num
- 参数少,所以效果不会很好
抛弃了语序信息
- 结构简单
- TextCNN
对位相乘再相加,是有语序信息的,可以堆叠多层使用。- 分类
- LSTM
- GRU
- 分类
- Gated CNN
- 过滤 AB 相乘后为 0 部分
- 放缩 B 中在 0-1 的部分
- Bert
实现方式:- 取[cls] token 对应的向量
- 将整句话的向量取 max/average pooling
- 将 bert 编码后的向量再输入 LSTM 或者 CNN
- 将bert 中间层的结果取出,加入运算
- Bert + RNN 或 CNN
由于Bert 权重不是随机的,RNN 或 CNN 权重随机,为防止Bert 权重失去意义,RNN 最多一层或双向,或 CNN 最多 2-3 层。 - 拓展
- 对比学习
- 海量向量查找
- 向量数据库
Annoy
在多个接近的分支上查找 - KD 树
实现空间分割,局部对比
均方差
中位数
- 向量数据库
- 目的
预设文文本所属的类别
- fastText