我正在研究文本分类问题。问题解释如下:
我有一个事件数据集,该数据集包含三列-事件名称,事件描述,事件类别。数据集中大约有32个类别,例如旅行,体育,教育,商务等。我必须根据事件的名称和描述将每个事件分类为一个类别。
我了解的是,分类的这一特殊任务高度依赖于关键字,而不是语义。我给你两个例子:
如果在名称或描述中或在两者中都找到“足球”一词,则该事件很可能与体育有关。
如果在名称或描述中或两者中都找到“徒步旅行”一词,则该事件很可能与旅行有关。
我们没有考虑活动的多个类别(但是,这是对未来的计划!)
我希望在多项朴素贝叶斯之前应用tf-idf会导致这个问题的结果令人满意。我的问题是:
我应该在应用tf-idf之前停止单词的去除和词干转换吗,还是应该仅对原始文本应用tf-idf?这里的文本表示事件和描述列名称中的条目。
答案 0 :(得分:2)
这个问题太笼统了,您没有提供数据集,代码的样本,甚至没有指出您使用的语言。在这方面,我假设您使用的是英语,因为您提供的两个单词是“ football”和“ trekking”。但是答案肯定是通用的。
我应该停止删除单词
是。看看this,看看英语中最常用的单词。如您所见,它们没有语义,因此不会有助于解决您提出的分类任务。如果stopwords
是包含停用词的列表,则在调用stop_words=stopwords
方法时,传递给CountVectorizer
或TfidfVectorizer
构造函数的参数.fit_transform()
将自动排除停用词。 / p>
我该干吗
这取决于。除了英语以外,其他语言的语法规则允许使用大量可能的前缀-后缀,通常在执行分类任务时要求使用词干,以便获得任何有用的结果。但是,英语的语法规则很差,因此您经常会在没有词干/词形限制的情况下逃脱。您应该首先根据所需的准确性检查获得的结果,如果不够,请尝试在数据预处理中添加词干/词根化步骤。对于大型语料库来说,词干处理是一个计算上昂贵的过程,我个人仅将其用于需要它的语言。
我希望在多项朴素贝叶斯算法之前应用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的效果差。
如果您发布一些代码和数据集示例,我们可以为您提供帮助,否则就足够了。