使用 LSA/SVD 进行文档分类

Posted

技术标签:

【中文标题】使用 LSA/SVD 进行文档分类【英文标题】:Document classification using LSA/SVD 【发布时间】:2011-12-10 19:41:42 【问题描述】:

我正在尝试使用支持向量机 (SVM) 进行文档分类。我拥有的文件是电子邮件的集合。我有大约 3000 个文档来训练 SVM 分类器,并且有一个大约 700 个测试文档集,我需要对其进行分类。

我最初使用二进制 DocumentTermMatrix 作为 SVM 训练的输入。使用测试数据进行分类的准确率约为 81%。 DocumentTermMatrix 是在删除几个停用词后使用的。

因为我想提高这个模型的准确度,我尝试使用基于 LSA/SVD 的降维,并将得到的降维因子用作分类模型的输入(我尝试使用 20、50、100 和 200 个奇异值从约3000字的原始包)。在每种情况下,分类的性能都变差了。 (使用 LSA/SVD 的另一个原因是为了克服具有 65 个级别的响应变量之一的记忆问题。

有人可以提供一些关于如何提高 LSA/SVD 分类性能的建议吗?我意识到这是一个没有任何具体数据或代码的一般问题,但希望专家提供一些关于从何处开始调试的意见。

仅供参考,我正在使用 R 进行文本预处理(包:tm、雪球、lsa)和构建分类模型(包:kernelsvm)

谢谢。

【问题讨论】:

分类时是否使用了同样的低排名转换?您的测试文档向量也必须降维。 【参考方案1】:

这里有一些一般性建议 - 不是针对 LSA 的,但它可能有助于改善结果。

    'binary documentMatrix' 似乎暗示您的数据由二进制值表示,即 1 表示文档中存在的术语,0 表示不存在的术语;转移到其他评分方案 (例如 tf/idf)可能会带来更好的结果。

    在某些情况下,LSA 是一个很好的降维指标,但在其他情况下则不太适用。因此,根据数据的确切性质,考虑其他方法可能是个好主意,例如信息获取。

    如果降维的主要动机是一个有 65 个级别的参数,可能会专门处理这个参数,例如通过某种形式的量化,会导致更好的权衡吗?

【讨论】:

【参考方案2】:

这可能不是最适合的答案。希望这些建议能有所帮助。

也许您可以使用词形还原而不是词干来减少不可接受的结果。 短而密:http://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html

The goal of both stemming and lemmatization is to reduce inflectional forms and 
sometimes derivationally related forms of a word to a common base form. 

However, the two words differ in their flavor. Stemming usually refers to a crude 
heuristic process that chops off the ends of words in the hope of achieving this 
goal correctly most of the time, and often includes the removal of derivational 
affixes. Lemmatization usually refers to doing things properly with the use of a 
vocabulary and morphological analysis of words, normally aiming to remove 
inflectional endings only and to return the base or dictionary form of a word, 
which is known as the lemma.

一个实例:

go,goes,going ->Lemma: go,go,go ||Stemming: go, goe, go

并使用一些预定义的规则;这样短期单词就被概括了。例如:

I'am -> I am
should't -> should not
can't -> can not

如何处理句子中的括号。

This is a dog(Its name is doggy)

括号内的文本通常指所提及实体的别名。您可以删除它们,也可以使用correference analysis 并将其视为新句子。

【讨论】:

【参考方案3】:

尝试使用Local LSA,相比全局LSA可以改进分类过程。此外,LSA 的威力完全取决于其参数,因此请尝试调整参数(从 1 开始,然后 2 或更多)并比较结果以提高性能。

【讨论】:

以上是关于使用 LSA/SVD 进行文档分类的主要内容,如果未能解决你的问题,请参考以下文章

使用 BERT 等预训练模型进行文档分类

如何使用分类器算法对单个文本进行分类

使用余弦相似度对文档进行分类

使用 keras 进行文档分类 - 数字的分层序列

如何使用 tf-idf 对新文档进行分类?

使用 scikit-learn 进行文档分类:获取对分类影响更大的单词(标记)的最有效方法