文字分类:结合不同种类的功能


19

我要解决的问题是将短文本分为多个类别。我目前的方法是使用tf-idf加权词频,并学习一个简单的线性分类器(逻辑回归)。这相当有效(测试集上的宏F-1约为90%,训练集上接近100%)。一个大问题是看不见的单词/ n-gram。

我正在尝试通过添加其他功能(例如,使用分布相似性(由word2vec计算)计算出的固定大小的矢量)或示例中的其他分类功能来改进分类器。我的想法是仅从单词袋中将功能添加到稀疏输入功能中。但是,这会导致测试和训练集的性能变差。附加功能本身可以在测试装置上提供大约80%的F-1,因此它们不是垃圾。扩展功能也没有帮助。我目前的想法是,这类功能与(稀疏的)单词功能组合得不太好。

所以问题是:假设附加功能提供了附加信息,那么将它们合并的最佳方法是什么?是否可以训练单独的分类器并将它们组合在一起以进行某种整体工作(这可能会有一个缺点,即无法捕获不同分类器的特征之间的交互)?我还应该考虑其他更复杂的模型吗?


3
一些更新:通过对2个额外的密集向量进行归一化,我能够获得可接受的结果。我错误地认为sklearn StandardScaler可以做到这一点。不过,我仍在寻找更复杂的方法,这将使我能够对标签依赖项进行建模或合并子分类器的置信度。
2014年

去年,我进行了基本相同的实验,遇到了与您完全相同的问题。经过2归一化处理后的word2vec向量可以击败BOW吗?我还没有完成l2归一化,但是即使在测试了许多后处理方法之后,语义向量仍比BOW tf / idf功能落后2-4个绝对百分比,我想知道这是一个死路一条。我最初寻求将密集的语义向量与传统的BOW结合起来,看它是否可以增强主题分类/建模性能。顺便说一句:您正在处理什么数据集,我的是20newsgroup。

我正在使用CIKM 2014竞赛的数据集。对我来说,矢量表示永远无法用tf-idf权重击败BOW。我的计划是在提高质量的同时使用它们。以我的经验(用于文本分类),某种形式的tf-idf +具有n-gram的线性模型是一种非常强大的方法。我目前正在尝试使用卷积神经网络,甚至还尝试使用这些(或多或少)难以匹敌的复杂模型。
Elmille '16

致Mod:对不起,我没有50个声誉,所以我无法在评论区域中书写。嗨Elmille:是的,这就是我在所有测试中所经历的。但是,您是否发现vec + BOW这个词有帮助?以我的经验,当我将单词vec与BOW tf-idf连接起来时(在我的情况下,这个vec实际上是整篇文章中的整体矢量,它不是word-vec而是非常相似的),性能会更低。我最初认为应该是BOW + vec> BOW> vec。由于它们包含互助信息。实际结果是BOW> vec> BOW + vec。然后,我对弓和vec进行标准缩放和归一化

Answers:


13

如果我理解正确,则您的模型实际上具有两种形式的功能。(1)表示为稀疏单词的文本数据,以及(2)更传统的密集特征。如果是这种情况,则有3种常见方法:

  1. TruncatedSVD对稀疏数据执行降维(例如通过的LSA )以使其密集,然后将要素组合到单个密集矩阵中以训练模型。
  2. 使用稀疏矩阵之类的东西将稀疏特征添加到稀疏矩阵中,以hstack在单个稀疏矩阵中训练模型。
  3. 仅使用稀疏文本数据创建模型,然后将其预测(如果是分类,则为概率)与一个密集特征与您的其他密集特征相结合以创建模型(即:通过堆叠进行组装)。如果走这条路线,请记住仅将CV预测作为特征来训练模型,否则可能会严重拟合过度(Pipeline如果需要,您可以制作一个相当大的类,一次完成所有操作)。

这三种方法都是有效的,各有利弊。就个人而言,我发现(1)通常是最差的,因为相对而言,它非常慢。我还发现(3)通常是最好的,既足够快又可以带来很好的预测。如果您愿意进行更广泛的集成,显然也可以将它们组合在一起。

至于您使用的算法,它们基本上都可以适合该框架。在大多数情况下,逻辑回归的效果出乎意料,但其他方法可能要好得多,具体取决于手头的问题以及您对它们的调优程度。我本人只是对GBM感兴趣,但最重要的是,您可以尝试任意数量的算法,甚至对它们的预测进行简单的加权合算,几乎总会得出更好的整体解决方案。


10

线性模型只需将其特征乘以相应的权重即可。例如,如果您有1000个稀疏特征,每个实例中只有3个或4个处于活动状态(其他均为零),而20个密集特征均非零,则很可能密集特征将使大部分稀疏功能的影响只会增加一点价值。您可以通过查看几个实例的特征权重以及它们如何影响结果总和来进行检查。

解决它的一种方法是摆脱加性模型。这是几个候选模型。

SVM基于分离的超平面。尽管超平面本身是线性模型,但SVM不会汇总其参数,而是尝试以最佳方式分割要素空间。考虑到功能的数量,我想说线性SVM应该可以正常工作,而更复杂的内核可能会过度拟合数据。

尽管它的名字,朴素贝叶斯是非常强大的统计模型,显示出很好的文本分类结果。它也足够灵活,可以捕获稀疏和密集特征的频率不平衡,因此,您一定要尝试一下。

最后,在这种情况下,随机森林可能是一种很好的集成方法。随机化将确保将不同种类的特征(稀疏/密集)用作不同树中的主要决策节点。RF /决策树也很适合自身检查特征,因此无论如何都应注意它们的结构。

请注意,所有这些方法都有其缺点,可能会使它们变成垃圾。梳理稀疏和密集的功能并不是一项经过充分研究的工作,因此让我们知道这些方法中的哪种最适合您的情况。


谢谢您的回答!我有两个后续问题:) 1)SVM(带有线性内核)和朴素贝叶斯有何不同之处,因为它们不总结其特征和相应的权重(即所谓的“加性模型”)?两者都有效地创建了一个分离的超平面,难道不是总会有某种添加特征乘以相应权重的结果吗?2)我想尝试随机森林,但不幸的是特征空间太大,无法以密集格式表示(我正在使用sklearn)。有没有可以处理的实现?
2014年

1)在线性回归中,您超平面上的点感兴趣,因此您将加权特征相加以获得预测点。另一方面,在SVM中,您正在寻找超平面两侧的点。您可以通过简单地检查示例的哪一侧来进行分类,而在预测过程中无需累加。朴素贝叶斯可能会合并不同类型的模型(例如,二项式或多项式),但是基本上您会乘以概率,而不是相加。
ffriend

2)我已经看到了有关此主题的一些研究,但从未遇到过实现(可能在此处使用Google搜索会提供一些链接)。但是,您总是可以采用另一种方法-使用PCA降低维度,然后基于简化的数据集运行随机森林。
ffriend
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.