文本分类——35+类;每个班级只有 ~100 个样本

问题描述 投票:0回答:0

我有一个有趣的问题,我一直在努力解决。

任务看似简单——给定一个类列表和一些属于该类的样本/规则,将所有相关的文本样本分配给它。所有的课程都可以说是不同的,但它们在词汇方面有高度的重叠。

精度最重要,但可接受的召回率约为 80%。

这是我的处理方式:

  • 检查是否有任何样本与班级语料库中的样本有直接的单词匹配/引理匹配。 (精度高但召回率低——让我覆盖了大约 40% 的文本)

  • 由所有类的词库和剩余的文本样本组成一个cosine_sim矩阵。在经验阈值处切断,它帮助我识别出一些非常相似的新文本。 (覆盖的文字可能多 10%)

这是我决定做一些创造性工程的地方。

  • 我将单词匹配/引理匹配/嵌入匹配(使用 sbert)选取的每个样本附加到班级的单词语料库中

  • 基本上我增加了班级的样本数量。请注意,有 35 个以上的类,即使使用这种方法,我每个类也可能有大约 200-250 个样本。

  • 我把每个类的样本通过sbert转化为embeddings,然后用UMAP降维。 UMAP 还有一个次要但较少使用的用例:它可以学习表示并将新数据转换为类似的表示!我使用这个概念将文本转换为嵌入,然后通过 UMAP 减少它们,并保存 UMAP 转换。使用这种简化的表示,我构建了一个投票分类器(使用 XGB、RF、KNearestNeighbours、SVC 和逻辑回归)并将其设置为硬投票标准。

未分类的文本通过预测管道(sbert 嵌入 -> 通过保存的 UMAP 转换较低暗淡的嵌入 -> 通过选民预测类别)

问题是,我现在的准确率和召回率都很低。有什么新的东西我可以尝试改进我的处理/可能是一种更好的方法来分类这个文本吗?

请让我知道我还能尝试什么。

谢谢!

python machine-learning text-classification
© www.soinside.com 2019 - 2024. All rights reserved.