我正在研究文本分类问题。问题解释如下:
我有一个事件数据集,其中包含三列 - 事件名称、事件描述、事件类别。数据集中大约有 32 个类别,例如旅行、体育、教育、商业等。我必须根据每个事件的名称和描述将其分类到一个类别。
我的理解是,这种特殊的分类任务高度依赖于关键字,而不是语义。我给你举两个例子:
如果在名称或描述中或两者中找到“足球”一词,则该活动很可能与体育有关。
如果在名称或描述中或两者中发现“徒步旅行”一词,则该活动很可能与旅行有关。
我们不会考虑为一个活动设置多个类别(但是,这是未来的计划!!)
我希望在多项式朴素贝叶斯之前应用 tf-idf 能够为这个问题带来不错的结果。我的问题是:
我应该在应用 tf-idf 之前停止单词删除和词干提取,还是应该仅在原始文本上应用 tf-idf?这里的文本是指事件名称和描述列中的条目。
这个问题太笼统了,您没有提供数据集、代码的示例,甚至没有表明您正在使用的语言。在这方面,我假设您使用英语,因为您提供的示例中的两个单词是“football”和“trekking”。然而,答案必然是通用的。
我应该删除停用词吗
是的。查看 this 查看英语中最常见的单词。正如您所看到的,它们没有语义意义,因此不会有助于解决您提出的分类任务。如果
stopwords
是包含停用词的列表,则传递给 stop_words=stopwords
或 CountVectorizer
构造函数的参数 TfidfVectorizer
将在调用 .fit_transform()
方法时自动排除停用词。
我应该做词干吗
这取决于。除英语之外的语言,其语法规则允许大量可能的前缀后缀,在执行分类任务时通常需要词干提取,以便达到任何有用的结果。然而,英语的语法规则非常差,因此您通常可以在不进行词干/词形还原的情况下逃脱。您应该首先根据所需的准确性检查获得的结果,如果不够,请尝试在数据预处理中添加词干/词形还原步骤。对于大型语料库来说,词干提取是一个计算成本高昂的过程,我个人仅将其用于需要它的语言。
我希望在多项式朴素贝叶斯之前应用 tf-idf 会为这个问题带来不错的结果
小心这一点。虽然 tf-idf 实际上与朴素贝叶斯分类器一起使用,但这并不是特定分类器的使用方式。从文档,
The multinomial distribution normally requires integer feature counts. However, in practice, fractional counts such as tf-idf may also work.
首先使用 CountVectorizer
处理分类任务并对其进行评分符合您的最佳利益,在获得评估 TfidfVectorizer
的基线准确度后,检查其结果是否比 CountVectorizer 的结果更好或更差.
如果您发布一些代码和数据集示例,我们可以帮助您,否则这应该足够了。
文件 1:新屋对屋销售预测 文件 2:7 月份房屋销售增长 文件 3:7 月份新房销量增长 文件 4:7 月新屋销售上升 • 分词、停用词、词干提取、tf、df、cf、location(loc)、idf、if*idf、相似性度量、向量空间、 点积,对相关文档进行排名。