【发布时间】:2014-09-28 12:18:43
【问题描述】:
我有一个包含大约 800 万篇新闻文章的语料库,我需要将它们的 TFIDF 表示为稀疏矩阵。对于相对较少数量的样本,我已经能够使用 scikit-learn 做到这一点,但我相信它不能用于如此庞大的数据集,因为它首先将输入矩阵加载到内存中,这是一个昂贵的过程。
有谁知道,为大型数据集提取 TFIDF 向量的最佳方法是什么?
【问题讨论】:
-
@EdChum 此方法使用 HashingVectorizer (scikit-learn.org/stable/modules/generated/…) 来获取确实可扩展且最适合大型数据集的功能,但您可以在 cons 部分看到,它声明它不能用于计算 IDF 权重.
-
如果不能全部放入内存或存储在 DB/pytables 中并执行查询以计算 tfidf 并存储为另一个表,则您必须迭代地执行此操作
-
我需要一个 csr 矩阵,我认为迭代不会保留矩阵的形状,因为我们每次都会输入一批新数据并获得不同形状的矩阵,如果错了请纠正我.另外将如何考虑 idf 权重,它们是全局权重。使用 python 生成器是否会帮助您通过 CountVectorizer 计算 TF,然后将其转换为 IDF 权重?
-
我相信您可以使用
HashingVectorizer从文本数据中获取较小的car_matrix,然后在其上使用TfidfTransformer。存储 8M 行和数万列的稀疏矩阵并不是什么大问题。
标签: python lucene nlp scikit-learn tf-idf