我计划编写一个分类程序,它能够在大约10个不同的类别中对未知的文本进行分类,如果它们都不适合的话,很高兴知道这一点。也有可能不止一个类别是正确的。
我的预定义类别是:
c1 = "politics"
c2 = "biology"
c3 = "food"
...我正在考虑如何用正确的方法来表示我的培训数据,或者哪种分类是正确的。第一个挑战是如何找到正确的特性。如果我只有文本(每篇250个单词),你会推荐什么方法来找到正确的特性?我的第一种方法是删除所有的停止词,并使用POS-标签(斯坦福NLP POS-标签)来查找名词、形容词等。
例如政治,我有大约2.000个文本实体。我找到了上面提到的POS-Tagger:
law: 841
capitalism: 412
president: 397
democracy: 1007
executive: 112
...仅仅使用它作为特性是正确的吗?然后,培训集将看起来像:
Training set for politics:
feature law numeric
feature capitalism numeric
feature president numeric
feature democracy numeric
feature executive numeric
class politics,all_others
sample data:
politics,5,7,1,9,3
politics,14,4,6,7,9
politics,9,9,9,4,2,1
politics,5,8,0,7,6
...
all_others,0,2,4,1,0
all_others,0,0,1,1,1
all_others,7,4,0,0,0
...这是一种正确的二进制分类方法吗?或者我该怎么定义我的布景?还是多类分类是正确的方法?然后它看起来就像:
Training set for politics:
feature law numeric
feature capitalism numeric
feature president numeric
feature democracy numeric
feature executive numeric
feature genetics numeric
feature muscle numeric
feature blood numeric
feature burger numeric
feature salad numeric
feature cooking numeric
class politics,biology,food
sample data:
politics,5,7,1,9,3,0,0,2,1,0,1
politics,14,4,6,7,9,0,0,0,0,0,1
politics,9,9,9,4,2,1,1,1,1,0,3
politics,5,8,0,7,6,2,2,0,1,0,1
...
biology,0,2,4,1,0,4,19,5,0,2,2
biology,0,0,1,1,1,12,9,9,2,1,1
biology,7,4,0,0,0,10,10,3,0,0,7
...你会怎么说?
发布于 2014-11-03 03:22:30
我认为,也许第一件有助于澄清其他问题的决定是,您想要执行二进制分类还是多类分类。如果您对将数据集中的每个实例分类为多个类感兴趣,那么这会引发一组新的问题,涉及设置数据集、要运行的实验以及计划如何评估分类器(S)。我的预感是,你可以把你的任务描述成一个二进制的任务,训练和测试你想要预测的每一个类的分类器,然后简单地设置数据矩阵,这样就有两个类可以预测-- (1)你对分类感兴趣的一个,(2)其他的。
在这种情况下,与如下所示的培训集不同(其中每一行都是文档,列1-3包含该文档的特性,类列是要预测的类):
1 2 3 class
feature1 feature2 feature3 politics
feature1 feature2 feature3 law
feature1 feature2 feature3 president
feature1 feature2 feature3 politics如果您感兴趣地检测政治类与其他任何事物的关系,则如下所示:
1 2 3 class
feature1 feature2 feature3 politics
feature1 feature2 feature3 non-politics
feature1 feature2 feature3 non-politics
feature1 feature2 feature3 politics您需要对您感兴趣的每个类执行此过程,然后培训和测试每个类的一个分类器,并根据您选择的度量标准(通常是精确性、精确性、召回性或某些变体)对每个分类器进行评估。
至于选择特性,这需要相当多的思考。功能可能高度依赖于您试图分类的文本类型,因此请务必研究您的数据集,并了解人们在每个域中的写作方式。定性调查不足以一劳永逸地决定什么是好特性,但它是获取想法的好方法。此外,查看术语的TF-以色列国防军加权,而不仅仅是在数据集的每个实例中使用它们的频率。这将帮助您了解(a)文档中流行的术语(可能是目标类)和(b)区分给定文档和其他文档的术语。我希望这能帮点忙。
发布于 2014-11-10 18:46:42
您可能应该从一种非常基本的方法开始:单词包表示(只要你的词汇表有矢量,如果在文本中找到这个单词,则为0),以及一个简单的分类器,比如朴素贝叶斯。这令人惊讶地很好地找到了主题(对于情感分类来说稍微少了一点)。对于预处理,您可能希望做停止词删除和词干(为了减少词汇量),而不是POS标签。
基本方法的问题是,您将有一个n类分类器,没有“这适合多个类别”或“这适合0类别”的答案。如果您想要包含这个方面,那么最好是设计n2类分类器,为您的每个类设计一个,其中每个分类器决定文本是否适合这个类。
但我会先试一试天真的贝叶斯,看看它是如何工作的。您可以使用Weka,它是免费的,开源的,并且可以与java集成。您还可以使用Python进行预处理(词干处理)。
发布于 2014-11-01 10:07:09
下面由Sebastian Raschka撰写的关于贝叶斯文本分类方法的伟大文章将对您的任务非常有帮助。我还强烈推荐他关于数据科学主题的优秀博客,作为一个额外的一般性参考。
您还可以在文本分类上检查此教育报告。它可能会给你提供一些额外的想法。
https://datascience.stackexchange.com/questions/2384
复制相似问题