文本分类的特征选择和归约
feature-extraction
nlp
svm
8
0

我目前正在研究一个项目,一个简单的情感分析器,这样在单独的情况下将有2和3个类 。我使用的语料库唯一词的手段上非常丰富 (大约200.000)。我使用词袋法进行特征选择,并减少了唯一特征的数量,由于出现频率的 阈值而将其消除。 最后一组功能包括大约20.000个功能,实际上减少90% ,但不足以达到预期的测试预测准确性 。我依次使用LibSVMSVM-light进行训练和预测( 线性RBF内核 ),以及一般的PythonBash

到目前为止,观察到的最高准确度 约为75%,而我至少需要90%二进制分类就是这种情况。对于多班训练 ,准确性下降到〜60% 。在这两种情况下,我至少需要90% ,并且无法弄清楚如何增加它:通过优化训练参数通过优化特征选择

我已经阅读了有关文本分类中特征选择的文章,发现使用了三种不同的方法,它们之间确实具有明显的相关性。这些方法如下:

  • 词袋频率(BOW)
  • 信息增益 (IG)
  • X ^ 2统计 (CHI)

第一种方法已经是我使用的方法,但是我非常简单地使用它,并且需要指导以更好地使用它,以获得足够高的精度。我也缺少有关IGCHI的实际实现的知识,并且正在寻求任何帮助以这种方式指导我的知识。

非常感谢,如果您需要其他任何信息以寻求帮助,请告诉我。


  • @larsmans: 频率阈值 :我正在寻找示例中出现的唯一单词,因此,如果一个单词在不同示例中出现的频率足够高,它将作为唯一功能包含在功能集中。

  • @TheManWithNoName:首先,感谢您为解释文档分类的一般问题所做的努力。我检查并试验了您提出的所有方法以及其他方法。我发现比例差分 (PD)的方法最好的特征选择,这里的特点是单克和长期驻留 (TP)为权重,为什么你标记的术语频-反比文档频 (我不明白(TF- IDF)作为索引方法,我宁愿将其视为功能加权方法)。如前所述, 预处理也是此任务的重要方面。我使用某些类型的字符串消除来精炼数据以及进行形态分析词干 分析 。另请注意,我正在使用土耳其语 ,该语言与英语相比具有不同的特征 。最后,我设法达到〜88%的准确度 (F值),用于二元分类和〜84%多类 。这些值是我使用的模型成功的可靠证明。到目前为止,这是我所做的。现在正在研究聚类和归约模型,已经尝试使用LDALSI,然后转向moVMF ,也许还转向了球形模型 (LDA + moVMF),这在具有客观性质的语料库(如新闻语料库)上似乎更有效。如果您对这些问题有任何信息和指导,我将不胜感激。我特别需要信息来设置特征空间尺寸缩减方法(LDA,LSI,moVMF等)和聚类方法 (k均值,分层等)之间的接口(面向python,开源)。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

这可能要晚一些了,但是...

正如Bee指出的那样,您已经知道,如果在分类之前的阶段中已经丢失了信息,则将SVM用作分类器是浪费的。但是,文本分类的过程所需要的不仅是几个阶段,而且每个阶段都会对结果产生重大影响。因此,在研究更复杂的特征选择措施之前,有许多更简单的可能性,通常将需要更低的资源消耗。

在执行标记/表示为词袋格式之前,您是否要对文档进行预处理?只需删除停用词或标点符号即可大大提高准确性。

您是否考虑过改用词袋表示法,例如改为使用词对或n-gram?您可能会发现开始时有更多维度,但它们会进一步缩窄并包含更多有用信息。

还值得注意的是,降维特征选择/特征提取。区别在于特征选择以单变量的方式减小维数,即,它按当前出现的条件逐个删除术语而不会更改它们,而特征提取(我认为Ben Allison所指)是多变量的,将一个或多个合并单个项共同产生更高的正交项(希望)包含更多信息并减少特征空间。

关于文档使用频率,您只是在使用包含术语的文档的概率/百分比,还是在文档中使用术语密度?如果类别1仅具有10个重复项,并且每个都包含一个术语,则类别1实际上与文档相关联。但是,如果类别2只有10个文档,每个文档包含相同的术语,则每个术语都包含一百次,那么显然类别2与该术语的关系要比类别1高得多。如果不考虑术语密度,则会丢失此信息,并且您拥有的类别越少,损失对您的影响就越大。类似地,仅保留具有高频率的术语并不总是明智的,因为它们可能实际上并未提供任何有用的信息。例如,如果一个术语在每个文档中出现一百次,则该术语被视为噪声术语,虽然看起来很重要,但将其保留在功能集中没有任何实际价值。

另外,您如何索引数据?您是通过简单的布尔索引还是更复杂的度量(例如TF-IDF)使用向量空间模型?考虑到场景中类别的数量较少,一种更复杂的度量将是有益的,因为它们可以将每个类别的术语重要性与整个数据集中的重要性联系起来。

就我个人而言,我将首先尝试上述某些可能性,然后在需要进一步提高性能的情况下,考虑使用(或组合)复杂方程式来调整特征选择/提取。


额外

根据新信息,听起来您似乎走对了,对大多数数据集而言,84%+的准确性(F1或BEP-基于多类问题的精度和召回率)通常被认为非常好。可能是您已经从数据中成功获取了所有信息丰富的功能,或者其中一些仍在修剪中。

话虽如此,“离群值”分析可以用作预测特定数据集的主动降维效果的好坏因素,它利用信息增益在外围特征中的下降来确定信息将有多大的可能性在功能选择过程中丢失。您可以将其用于原始数据和/或处理后的数据,以估计您应该以多大程度地修剪功能(或视情况取消修剪)。可以在此处找到描述它的论文:

具有异常值计数信息的纸张

关于将TF-IDF描述为索引方法,您将其作为特征权重度量是正确的,但是我认为它主要用作索引过程的一部分(尽管也可以用于降维)。这样做的理由是,某些措施更好地针对了特征选择/提取,而另一些措施则更适合专门用于文档向量(即索引数据)中的特征加权。这通常是由于基于每个类别确定的降维措施,而索引加权措施往往更注重文档取向,以提供更好的矢量表示。

关于LDA,LSI和moVMF,恐怕我对它们的经验不足,无法提供任何指导。不幸的是,我也没有使用土耳其语数据集或python语言。

收藏
评论

我建议减少尺寸,而不是选择特征。考虑使用奇异值分解主成分分析 ,甚至考虑针对词袋表示量身定制的潜在Larich Dirichlet分配 ,甚至更好。这将允许您从概念上保留包含所有单词的表示形式,但可以通过利用它们之间的相似性(甚至是同义词类型)关系将它们折叠到更少的维度。

所有这些方法都具有相当标准的实现,您可以访问并运行它们-如果您让我们知道您使用的是哪种语言,则本人或其他人将能够为您指明正确的方向。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号