首页 > 解决方案 > 多类文本分类(使用 TFIDF 和 SVM)。如何实现一个反馈可能属于多个类的场景?

问题描述

我有一个需要标记(分类)的原始反馈文件,然后作为 SVM 分类器(或任何分类器)的训练输入。

但问题是,我不会将整个反馈分配给某个类别。根据它所谈论的主题,一个反馈可能属于多个类别(提取了名词 n-gram)。所以,我标记的是主题(术语)而不是反馈(文档)。因此,我使用 TFIDF 提取了 n-gram,同时保存了它们的特征,这样我就可以训练我的模型了。问题在于,使用 tfidf,它返回一个文档项矩阵,即 train_x,但另一方面,我有 train_y;分配给每个 n-gram(不是整个文档)的标签。因此,我最终得到了一个文档到频率矩阵,其中包含 x 行数(文档数)与 y 数 n-grams(没有提取的唯一主题)的标签。

下面是数据的样例。蓝色是 n-gram(由 TFIDF 提取),而红色是标签/类别(使用我手动制作的函数为每个 n-gram 计算)。

在此处输入图像描述

这是我实现概念的策略,而不是编写代码:

在此处输入图像描述

问题在于 TFIDF 产生的那部分x_train = tf.Transform(feedbacks),这是一个文档术语矩阵,它作为分类器的输入是没有意义的y_train,它是术语而不是文档的标签。我试图转置矩阵,它给了我一个错误。我尝试直接输入仅包含术语特征值的一维数组,这也给了我一个错误,因为分类器期望 X 是一种(sample, feature)格式。我正在使用 Sklearn 的 SVM 和 TfidfVectorizer 版本。

简而言之,我希望能够在术语列表(n-gram)上使用 SVM 分类器对标签列表进行训练以训练模型,然后测试新数据(在清理和提取其 n-gram 之后)以供 SVM 预测其标签。

该解决方案可能是一个非常技术性的事情,例如使用另一个期望不同格式的分类器,或者不使用 TFIDF,因为它以文档为中心(引用)甚至更广泛,方法和概念的整体改变(如果它是错误的)。

如果有人可以提供帮助,我将不胜感激。

标签: machine-learningscikit-learnsvmtext-classificationtfidfvectorizer

解决方案


推荐阅读