微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决多类文本分类不平衡,处理类“other”

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

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

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

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

我将尝试使用 FAQ 被问到的次数作为第二个预测器(不确定如何),但我正在寻找任何现成的解决方案或指针。谢谢!

解决方法

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

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

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

希望这些有帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。