文本分类 + NLP + 数据挖掘 + 数据科学:我应该在应用 tf-idf 之前进行停止词删除和词干提取吗?
Posted
技术标签:
【中文标题】文本分类 + NLP + 数据挖掘 + 数据科学:我应该在应用 tf-idf 之前进行停止词删除和词干提取吗?【英文标题】:Text Classification + NLP + Data-mining + Data Science: Should I do stop word removal and stemming before applying tf-idf? 【发布时间】:2019-03-08 23:23:49 【问题描述】:我正在研究一个文本分类问题。问题解释如下:
我有一个事件数据集,其中包含三列 - 事件名称、事件描述、事件类别。数据集中大约有 32 个类别,例如旅游、运动、教育、商业等。我必须根据每个事件的名称和描述将每个事件分类。
我的理解是,这种特殊的分类任务高度依赖于关键字,而不是语义。我给你举两个例子:
如果在名称或描述中或在两者中都找到“足球”一词,则该活动很可能与体育有关。
如果在名称或描述或两者中都找到“徒步旅行”一词,则该活动很可能与旅行有关。
我们不会为一个活动考虑多个类别(但是,这是未来的计划!!)
我希望在多项式朴素贝叶斯之前应用 tf-idf 会为这个问题带来不错的结果。我的问题是:
我应该在应用 tf-idf 之前停止单词删除和词干提取,还是应该只对原始文本应用 tf-idf?这里的文本表示事件名称和描述列中的条目。
【问题讨论】:
【参考方案1】:这个问题太笼统了,您没有提供数据集、代码的示例,甚至没有说明您使用的语言。在这方面,我假设您使用的是英语,因为您作为示例提供的两个词是“football”和“trekking”。然而,答案必然是通用的。
我应该停止词删除
是的。查看this 以查看英语中最常用的单词。如您所见,它们没有语义意义,因此不会有助于解决您提出的分类任务。如果stopwords
是一个包含停用词的列表,则传递给CountVectorizer
或TfidfVectorizer
构造函数的参数stop_words=stopwords
将在调用.fit_transform()
方法时自动排除停用词。
我应该做词干
视情况而定。英语以外的语言,其语法规则允许大量可能的前缀-后缀,在执行分类任务时通常需要词干,以获得任何有用的结果。然而,英语的语法规则很差,因此您通常可以在没有词干/词形还原的情况下逃脱。您应该首先根据所需的准确性检查获得的结果,如果不够,请尝试在数据预处理中添加词干提取/词形还原步骤。词干提取对于大型语料库来说是一个计算成本很高的过程,我个人只将它用于需要它的语言。
我希望在多项朴素贝叶斯之前应用 tf-idf 会为这个问题带来不错的结果
小心这个。虽然 tf-idf 在实践中适用于朴素贝叶斯分类器,但这并不是特定分类器的使用方式。来自documentation,
The multinomial distribution normally requires integer feature counts. However, in practice, fractional counts such as tf-idf may also work.
首先使用CountVectorizer
处理分类任务并对其进行评分符合您的最大利益,在您获得评估TfidfVectorizer
的基线准确度后,检查其结果是否比CountVectorizer 的结果更好或更差.
如果您发布一些代码和数据集示例,我们可以为您提供帮助,否则就足够了。
【讨论】:
以上是关于文本分类 + NLP + 数据挖掘 + 数据科学:我应该在应用 tf-idf 之前进行停止词删除和词干提取吗?的主要内容,如果未能解决你的问题,请参考以下文章