TF-IDF 向量化器并不比 countvectorizer 更好用(scikit learn

Posted

技术标签:

【中文标题】TF-IDF 向量化器并不比 countvectorizer 更好用(scikit learn【英文标题】:TF-IDF vectorizer doesn't work better than countvectorizer (sci-kit learn 【发布时间】:2016-11-07 07:45:21 【问题描述】:

我正在研究一个有 10 个标签的多标签文本分类问题。 数据集很小,总共有 +- 7000 个项目和 +-7500 个标签。我正在使用 python sci-kit learn,结果出现了一些奇怪的东西。作为基线,我开始使用 countvectorizer,实际上计划使用我认为效果更好的 tfidf 矢量化器。但它没有.. 使用 countvectorizer 我获得了 0,1 更高 f1score 的性能。 (0.76 对 0.65)

我无法理解为什么会出现这种情况? 有10个类别,一个叫做杂项。尤其是这个使用 tfidf 的性能要低得多。

有谁知道什么时候 tfidf 的性能会比 count 差?

【问题讨论】:

f1 分数是什么意思? 【参考方案1】:

问题是,为什么不呢?两者都是不同的解决方案。

你的数据集是什么,有多少单词,它们是如何标记的,你如何提取你的特征? countvectorizer 只是简单地计算单词,如果它做得好,就这样吧。

【讨论】:

我有一个事件日历的数据集,我将标题和简介分为十类,例如:舞蹈、音乐、杂项、儿童等。每个事件可以有多个标签。我将标题和文本(以及其他一些小东西)提取到一个字符串中,然后进行标记,然后使用矢量化器。在我看来,tf-idf 至少应该和 tf. 一样好。这是为了我的论文,所以我必须支持我使用 count 而不是 tfidf 的决定,但我无法解释为什么它会更好。 【参考方案2】:

idf 没有理由为分类任务提供更多信息。它在搜索和排名方面表现良好,但分类需要收集相似性,而不是奇点。

IDF 旨在发现一个样本与语料库其余部分之间的奇点,您正在寻找的是一个样本与其他集群之间的奇点。 IDF 平滑了簇内 TF 相似度。

【讨论】:

以上是关于TF-IDF 向量化器并不比 countvectorizer 更好用(scikit learn的主要内容,如果未能解决你的问题,请参考以下文章

TF-IDF

技术视角 自然语言处理之词频-逆文本词频(TF-IDF)详解

如何构建词空间向量和文本向量化

文本向量化(理论篇)

[自然语言处理] 文本向量化技术

使用gensim和sklearn搭建一个文本分类器:文档向量化