gpt4 book ai didi

python - scikit-learn 中的 TFIDFVectorizer 应该如何工作?

转载 作者:IT老高 更新时间:2023-10-28 22:19:19 25 4
gpt4 key购买 nike

我正在尝试使用 scikit-learn 中的 TfIDFVectorizer 类来获取与某些文档不同的单词。它创建了一个 tfidf 矩阵,其中包含所有文档中的所有单词及其分数,但它似乎也计算了常见单词。这是我正在运行的一些代码:

vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(contents)
feature_names = vectorizer.get_feature_names()
dense = tfidf_matrix.todense()
denselist = dense.tolist()
df = pd.DataFrame(denselist, columns=feature_names, index=characters)
s = pd.Series(df.loc['Adam'])
s[s > 0].sort_values(ascending=False)[:10]

我希望这会返回文档“Adam”的独特单词列表,但它的作用是返回常用单词列表:

and     0.497077
to 0.387147
the 0.316648
of 0.298724
in 0.186404
with 0.144583
his 0.140998

我可能不完全理解它,但据我了解,tf-idf 应该在语料库中查找与一个文档不同的单词,查找在一个文档中频繁出现但在其他文档中不出现的单词。在这里,经常出现在其他文档中,所以我不知道为什么它在这里返回一个高值。

我用来生成它的完整代码是 in this Jupyter notebook .

当我半手动计算 tf/idfs 时,使用 NLTK 并计算每个单词的分数,我得到了适当的结果。对于“亚当”文档:

fresh        0.000813
prime 0.000813
bone 0.000677
relate 0.000677
blame 0.000677
enough 0.000677

这看起来是对的,因为这些词出现在“亚当”文档中,但在语料库的其他文档中没有那么多。用于生成它的完整代码位于 this Jupyter notebook .

我的 scikit 代码有问题吗?有没有另一种方法来初始化这个类,它返回正确的结果?当然,我可以通过传递 stop_words = 'english' 来忽略停用词,但这并不能真正解决问题,因为任何类型的常用词在这里都不应该有高分。

最佳答案

来自 scikit-learn 文档:

由于 tf–idf 经常用于文本特征,还有另一个名为 TfidfVectorizer 的类将 CountVectorizer 和 TfidfTransformer 的所有选项组合在一个模型中。

如您所见,TfidfVectorizerCountVectorizer紧随其后的是 TfidfTransformer .

您可能正在寻找的是 TfidfTransformer而不是 TfidfVectorizer

关于python - scikit-learn 中的 TFIDFVectorizer 应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com