Python Scikit-learn:TF-IDF 中的空词汇

Posted

技术标签:

【中文标题】Python Scikit-learn:TF-IDF 中的空词汇【英文标题】:Python Scikit-learn: Empty Vocabulary in TF-IDF 【发布时间】:2013-05-16 22:39:09 【问题描述】:

我正在使用该问题 (Similarity between two text documents) 中获得最多投票的答案中给出的代码来计算文档之间的 TF-IDF。但是,我观察到,当我运行代码而不指定自定义值 min_df(代码中为 1)时,如果两个文档完全不同(因此其中没有共同词),而不是接收TF-IDF 值为 0,我得到以下错误:

ValueError: empty vocabulary; training set may have contained only stop words or min_df (resp. max_df) may be too high (resp. too low).

谁能告诉我怎样才能摆脱这个错误?

【问题讨论】:

我认为不是“TF-IDF 值为 0”,而是“余弦相似度为 0”。 TF-IDF 值是大小为n_features == len(vectorizer.vocabulary_) 的向量,对中的每个文档一个向量。 【参考方案1】:

默认情况下(在 sklearn min_df 设置为 min_df=2,这意味着每个单词必须至少出现在来自语料库的 2 个不同文档中才能包含在矢量化器的词汇表中。虽然这对于大型语料库来说是一个合理的选择,但仅用几句话就无法将任何内容包含在玩具数据集中,因此您收到的错误消息我觉得非常明确。在 scikit-learn 的开发分支中,min_df=2 默认值已更改为 min_df=1,以减少在玩具数据集上尝试使用默认参数值的库的新用户的困惑。

【讨论】:

以上是关于Python Scikit-learn:TF-IDF 中的空词汇的主要内容,如果未能解决你的问题,请参考以下文章

Python---scikit-learn(sklearn)模块

Python中计算TF-IDF(scikit-learn)

scikit-learn( Macine Learning in Python )

python将scikit-learn自带数据集转换为pandas dataframe格式

使用Python scikit-learn 库实现神经网络算法

python scikit-learn 环境搭建问题解决记录