具有多个词袋的文本分类器

数据挖掘 分类 文本挖掘 nltk
2022-03-07 04:48:03

我正在从一个数据集中训练一个电子邮件分类器,其中的主题行和电子邮件本身的内容都有单独的列。我已经以完全删除主题和相关元数据的方式对内容列进行了预处理。在这一点上,我的想法是我应该在两个单独的词袋上训练分类器,一个用于主题列,一个用于内容列。这是正确的方法吗?是否有使用 NLTK 或类似库的简单方法来完成此任务?

4个回答

我无法完全理解这个问题,但让我看看我是否做对了。

你想训练一个分类器。主题和正文有不同的列。您现在已经以删除主题和其他元信息的方式对其进行了预处理。

现在我将尝试回答你的问题。请记住,这就是我解决问题的方式(基于过去类似任务的经验),但可能有更好的方法或方法。

我不会首先删除主题列。我也不会在两个单独的词袋上训练分类器。我会将主题和内容都附加到一个文档中,然后用一个词袋单元而不是两个词袋对它们进行相应的分类。

我为什么要这样做?有时主题可能包含关键字或其他内容,这些关键字或其他内容可能会导致比电子邮件正文更好的分类。反之亦然。因此,在没有查看整个数据集的情况下,为了更安全,我也会尝试这种方法。比较你的两种方法,然后看看你在哪里有更好的准确度、精确度、召回率和其他有助于你得出结论的指标。

实现这一点的方法?是的,NLTK 是获取词袋的一种方式。但是,我会继续使用 scikit-learn 包来训练我的分类器。我还将运行 LSA/LDA/HDP(主题建模算法)来查看构成我的数据的内容。为此,我会使用 Gensim。

http://scikit-learn.org/stable/

https://radimrehurek.com/gensim/

如果您不熟悉文本分类,其他教程可帮助您开始使用它(看起来就是这样,如果我错了,请原谅我)。这些也将帮助您从以下方面获得更好的结果:

https://towardsdatascience.com/machine-learning-nlp-text-classification-using-scikit-learn-python-and-nltk-c52b92a7c73a

http://zacstewart.com/2015/04/28/document-classification-with-scikit-learn.html

虽然我提到的两个教程都主要关注二元分类,但您也可以以类似的方式实现细粒度(多类)分类。

因为我无法评论@trollster 的良好响应:用于附加两个词袋或从文本中提取的自定义特征,您可以FeatureUnion在 scikit-learn 中使用。他们在他们的文档中提供了一个很好的例子:http: //scikit-learn.org/stable/auto_examples/hetero_feature_union.html#sphx-glr-auto-examples-hetero-feature-union-py

事实上,他们的示例处理了与您的问题非常相似的问题(包含在博客文章中的 20 个新闻组数据集)。正如@trollster 所说,我不会将主题和内容分开,因为它们可能高度相关并且对分类有同等贡献。

您认为主题和电子邮件正文中的单词分布可能不同的直觉是有价值的。关于和“开箱即用”的解决方案,最简单的方法是构建两个单独的分类器——一个用于主体和主体——然后将它们组合在一起。一种非常简单的集成方法是仅使用这两个模型输出的概率分数作为逻辑回归分类器的输入。

两个不同的词袋在这里没有意义,但是如果你可以使用两个不同的词嵌入,然后使用神经网络将它们与功能 API 一起使用,它应该会提高模型的性能。