多类文本分类不平衡,处理类“其他”

Posted

技术标签:

【中文标题】多类文本分类不平衡,处理类“其他”【英文标题】:Multiclass text classification imbalance, dealing with class "other" 【发布时间】:2021-06-28 07:04:08 【问题描述】:

我正在寻找一种方法来使用机器学习来正确分类不适合预定义类的常见问题解答,并且应该归为“其他”类。

问题:在训练数据集中包含大约 1500 个常见问题解答,其中“其他”是最大的类(该类集中了大约 250 个问题)。这些通常是“奇怪的”问题,很少被问到。然而,当我训练一个模型时,“其他”类成为模型的最爱,只是因为与其他类相比的大小和方差。如果我现在使用这个模型对常见问题进行分类,那么相当数量的问题将被归为不应该的“其他”。

我想要什么:一个模型,它首先将问题与特定类进行分类,只有在找不到特定类的好匹配时才将其归为“其他”。

我的尝试:对“其他”类进行欠采样。这行得通,但我认为应该有更好的解决方案。

我将尝试使用常见问题解答的次数作为第二个预测指标(尚不确定如何),但我正在寻找任何开箱即用的解决方案或指针。谢谢!

【问题讨论】:

【参考方案1】:

我可以建议两种策略来进行这种分类(但是,最好说聚类,因为它是一种无监督学习):

第一种方法:使用NLP(例如nltk),发现问题中出现频率最高的n个词,并将其作为类标签。为此,您需要通过整合所有问题来创建语料库,通过删除标点符号、停用词、数字、提及、主题标签等来清理文本,然后对文本进行标记和词形还原,并找到最常见的标记。我认为最好只保留名词,并使用最常用的名词。此外,您可以计算tf–idf,并据此决定。

第二种方法:使用模糊技术来计算文本之间的相似度。为此,您可以使用 fuzzywuzzy 库,其中包含用于计算相似性的多个函数。对于您的情况,fuzzywuzzy.token_set_ratio() 将是正确的选择,因为您正在比较两个句子。但是,由于您有 1500 个问题,因此您有 (n * (n-1)) / 2 = 1124250 组合来计算相似度,这很多。为了提高效率,我建议使用itertools

希望这些帮助!

【讨论】:

以上是关于多类文本分类不平衡,处理类“其他”的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助将 scikit-learn 应用于这个不平衡的文本分类任务

文本分类:多标签文本分类与多类文本分类

多类文本分类,每类一个训练样例

多类文本分类:如果输入与类不匹配,则新类

SVM 多类文本分类

在python中平衡的多类分类(过采样)