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)模块
scikit-learn( Macine Learning in Python )
python将scikit-learn自带数据集转换为pandas dataframe格式